summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Hirt <hirt.danny@gmail.com>2017-05-18 16:06:04 +0300
committerDaniel Hirt <hirt.danny@gmail.com>2017-05-20 21:05:40 +0300
commiteb488af439860105c32a0e7c6758d4acbc0c64be (patch)
treee15ddc537da8831663c1a8747dbde76651a12090
parent1a21d6ec46277e4e9d199a7d9bc4b8555f92e60d (diff)
downloadefl-eb488af439860105c32a0e7c6758d4acbc0c64be.tar.gz
Canvas text: support slant, width, fallbacks and lang
-rw-r--r--src/bin/elementary/test_efl_ui_text.c2
-rw-r--r--src/lib/efl/interfaces/efl_text_font.eo6
-rw-r--r--src/lib/evas/canvas/efl_canvas_text.eo2
-rw-r--r--src/lib/evas/canvas/evas_object_textblock.c74
4 files changed, 67 insertions, 17 deletions
diff --git a/src/bin/elementary/test_efl_ui_text.c b/src/bin/elementary/test_efl_ui_text.c
index c8c44536b3..c43896a112 100644
--- a/src/bin/elementary/test_efl_ui_text.c
+++ b/src/bin/elementary/test_efl_ui_text.c
@@ -174,6 +174,8 @@ test_efl_ui_text(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *eve
efl_text_font_set(en, "Sans", 14);
efl_text_properties_color_set(en, 255, 255, 255, 255);
efl_text_font_weight_set(en, EFL_TEXT_FONT_WEIGHT_BOLD);
+ efl_text_font_slant_set(en, EFL_TEXT_FONT_SLANT_ITALIC);
+ efl_text_font_width_set(en, EFL_TEXT_FONT_WIDTH_ULTRACONDENSED);
main_cur = efl_canvas_text_cursor_get(en);
cur = efl_ui_text_cursor_new(en);
diff --git a/src/lib/efl/interfaces/efl_text_font.eo b/src/lib/efl/interfaces/efl_text_font.eo
index d5a7c37876..41e42570bb 100644
--- a/src/lib/efl/interfaces/efl_text_font.eo
+++ b/src/lib/efl/interfaces/efl_text_font.eo
@@ -30,7 +30,7 @@ enum Efl.Text.Font.Width {
//type Efl.Text.Font_Size: int;
-enum Efl.Text.Font.Style {
+enum Efl.Text.Font.Slant {
normal,
oblique,
italic,
@@ -64,9 +64,9 @@ interface Efl.Text.Font {
}
}
- @property font_style {
+ @property font_slant {
values {
- style: Efl.Text.Font.Style;
+ style: Efl.Text.Font.Slant;
}
}
diff --git a/src/lib/evas/canvas/efl_canvas_text.eo b/src/lib/evas/canvas/efl_canvas_text.eo
index 960f9788a9..c74ad22fda 100644
--- a/src/lib/evas/canvas/efl_canvas_text.eo
+++ b/src/lib/evas/canvas/efl_canvas_text.eo
@@ -382,7 +382,7 @@ Efl.Text.Font)
Efl.Text.Font.font_fallbacks { get; set; }
Efl.Text.Font.font_lang { get; set; }
Efl.Text.Font.font_weight { get; set; }
- Efl.Text.Font.font_style { get; set; }
+ Efl.Text.Font.font_slant { get; set; }
Efl.Text.Font.font_width { get; set; }
}
events {
diff --git a/src/lib/evas/canvas/evas_object_textblock.c b/src/lib/evas/canvas/evas_object_textblock.c
index 623bc90dc0..dbd4d9ccbc 100644
--- a/src/lib/evas/canvas/evas_object_textblock.c
+++ b/src/lib/evas/canvas/evas_object_textblock.c
@@ -612,7 +612,11 @@ struct _Evas_Object_Textblock
Eina_Stringshare *font;
Evas_Font_Size size;
Eina_Stringshare *font_source;
- int font_weight;
+ Eina_Stringshare *font_fallbacks;
+ Eina_Stringshare *font_lang;
+ unsigned int font_weight;
+ unsigned int font_slant;
+ unsigned int font_width;
} info;
} default_format;
double valign;
@@ -3344,11 +3348,17 @@ _layout_format_push(Ctxt *c, Evas_Object_Textblock_Format *fmt,
evas_font_name_parse(fmt->font.fdesc, _FMT_INFO(font));
eina_stringshare_replace(&(fmt->font.fdesc->lang),
evas_font_lang_normalize("auto"));
+ eina_stringshare_replace(&(fmt->font.fdesc->fallbacks),
+ _FMT_INFO(font_fallbacks));
fmt->font.size = _FMT_INFO(size);
+ // FIXME: map fields to EVAS_FONT_XXX
+ fmt->font.fdesc->weight = _FMT_INFO(font_weight);
+ fmt->font.fdesc->slant = _FMT_INFO(font_slant);
+ fmt->font.fdesc->width = _FMT_INFO(font_width);
+ fmt->font.fdesc->lang = _FMT_INFO(font_lang);
fmt->font.font = evas_font_load(evas_obj->layer->evas->evas, fmt->font.fdesc,
fmt->font.source, (int)(((double) _FMT_INFO(size)) * evas_obj->cur->scale));
- fmt->font.fdesc->weight = _FMT_INFO(font_weight);
}
}
@@ -15076,33 +15086,65 @@ _efl_canvas_text_efl_text_font_font_source_get(Eo *obj EINA_UNUSED, Efl_Canvas_T
static void
_efl_canvas_text_efl_text_font_font_fallbacks_set(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o EINA_UNUSED, const char *font_fallbacks EINA_UNUSED)
{
+ Eina_Stringshare *nfont_fallbacks;
+ if (o->default_format.info.font_fallbacks != font_fallbacks)
+ {
+ nfont_fallbacks = eina_stringshare_add(font_fallbacks);
+ if (nfont_fallbacks == _FMT_INFO(font_fallbacks))
+ {
+ /* Already stringshared here, unref */
+ eina_stringshare_del(nfont_fallbacks);
+ }
+ else
+ {
+ // Set immediately, load font_fallbacks later
+ _FMT_INFO(font_fallbacks) = nfont_fallbacks;
+ _canvas_text_format_changed(obj, o);
+ }
+ }
}
static const char*
_efl_canvas_text_efl_text_font_font_fallbacks_get(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o EINA_UNUSED)
{
- return NULL;
+ return _FMT_INFO(font_fallbacks);
}
static void
-_efl_canvas_text_efl_text_font_font_lang_set(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o EINA_UNUSED, const char *lang EINA_UNUSED)
+_efl_canvas_text_efl_text_font_font_lang_set(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o EINA_UNUSED, const char *font_lang EINA_UNUSED)
{
+ Eina_Stringshare *nfont_lang;
+ if (o->default_format.info.font_lang != font_lang)
+ {
+ nfont_lang = eina_stringshare_add(font_lang);
+ if (nfont_lang == _FMT_INFO(font_lang))
+ {
+ /* Already stringshared here, unref */
+ eina_stringshare_del(nfont_lang);
+ }
+ else
+ {
+ // Set immediately, load font_lang later
+ _FMT_INFO(font_lang) = nfont_lang;
+ _canvas_text_format_changed(obj, o);
+ }
+ }
}
-
static const char*
_efl_canvas_text_efl_text_font_font_lang_get(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o EINA_UNUSED)
{
- return NULL;
+ return _FMT_INFO(font_lang);
}
-
static void
_efl_canvas_text_efl_text_font_font_weight_set(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o EINA_UNUSED, Efl_Text_Font_Weight font_weight EINA_UNUSED)
{
+ if (_FMT_INFO(font_weight) == font_weight) return;
_FMT_INFO(font_weight) = font_weight;
+ _canvas_text_format_changed(obj, o);
}
@@ -15114,28 +15156,34 @@ _efl_canvas_text_efl_text_font_font_weight_get(Eo *obj EINA_UNUSED, Efl_Canvas_T
static void
-_efl_canvas_text_efl_text_font_font_style_set(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o EINA_UNUSED, Efl_Text_Font_Style style EINA_UNUSED)
+_efl_canvas_text_efl_text_font_font_slant_set(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o EINA_UNUSED, Efl_Text_Font_Slant font_slant EINA_UNUSED)
{
+ if (_FMT_INFO(font_slant) == font_slant) return;
+ _FMT_INFO(font_slant) = font_slant;
+ _canvas_text_format_changed(obj, o);
}
-static Efl_Text_Font_Style
-_efl_canvas_text_efl_text_font_font_style_get(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o EINA_UNUSED)
+static Efl_Text_Font_Slant
+_efl_canvas_text_efl_text_font_font_slant_get(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o EINA_UNUSED)
{
- return 0;
+ return _FMT_INFO(font_slant);
}
static void
-_efl_canvas_text_efl_text_font_font_width_set(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o EINA_UNUSED, Efl_Text_Font_Width width EINA_UNUSED)
+_efl_canvas_text_efl_text_font_font_width_set(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o EINA_UNUSED, Efl_Text_Font_Width font_width EINA_UNUSED)
{
+ if (_FMT_INFO(font_width) == font_width) return;
+ _FMT_INFO(font_width) = font_width;
+ _canvas_text_format_changed(obj, o);
}
static Efl_Text_Font_Width
_efl_canvas_text_efl_text_font_font_width_get(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o EINA_UNUSED)
{
- return 0;
+ return _FMT_INFO(font_width);
}
/**