diff options
author | Daniel Hirt <hirt.danny@gmail.com> | 2017-05-18 16:06:04 +0300 |
---|---|---|
committer | Daniel Hirt <hirt.danny@gmail.com> | 2017-05-20 21:05:40 +0300 |
commit | eb488af439860105c32a0e7c6758d4acbc0c64be (patch) | |
tree | e15ddc537da8831663c1a8747dbde76651a12090 | |
parent | 1a21d6ec46277e4e9d199a7d9bc4b8555f92e60d (diff) | |
download | efl-eb488af439860105c32a0e7c6758d4acbc0c64be.tar.gz |
Canvas text: support slant, width, fallbacks and lang
-rw-r--r-- | src/bin/elementary/test_efl_ui_text.c | 2 | ||||
-rw-r--r-- | src/lib/efl/interfaces/efl_text_font.eo | 6 | ||||
-rw-r--r-- | src/lib/evas/canvas/efl_canvas_text.eo | 2 | ||||
-rw-r--r-- | src/lib/evas/canvas/evas_object_textblock.c | 74 |
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); } /** |