summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Hirt <hirt.danny@gmail.com>2017-05-18 13:45:54 +0300
committerDaniel Hirt <hirt.danny@gmail.com>2017-05-20 21:05:39 +0300
commit1a21d6ec46277e4e9d199a7d9bc4b8555f92e60d (patch)
treecec0c15e1b4b7f974b6b7cfb1ca38fd99948a5bf
parent6e380447849c3e9ff437be4d0be09bde479a9721 (diff)
downloadefl-1a21d6ec46277e4e9d199a7d9bc4b8555f92e60d.tar.gz
Canvas text: reimpl. font, impl. weight
-rw-r--r--src/bin/elementary/test_efl_ui_text.c3
-rw-r--r--src/lib/evas/canvas/evas_object_textblock.c101
2 files changed, 81 insertions, 23 deletions
diff --git a/src/bin/elementary/test_efl_ui_text.c b/src/bin/elementary/test_efl_ui_text.c
index 3aa45c75f2..c8c44536b3 100644
--- a/src/bin/elementary/test_efl_ui_text.c
+++ b/src/bin/elementary/test_efl_ui_text.c
@@ -171,8 +171,9 @@ test_efl_ui_text(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *eve
" new UI Text widget.\xE2\x80\xA9This is the next paragraph.\nThis"
" is the next line.\nThis is Yet another line! Line and paragraph"
" separators are actually different!");
- efl_text_properties_font_set(en, "Sans", 10);
+ 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);
main_cur = efl_canvas_text_cursor_get(en);
cur = efl_ui_text_cursor_new(en);
diff --git a/src/lib/evas/canvas/evas_object_textblock.c b/src/lib/evas/canvas/evas_object_textblock.c
index 4712def0ce..623bc90dc0 100644
--- a/src/lib/evas/canvas/evas_object_textblock.c
+++ b/src/lib/evas/canvas/evas_object_textblock.c
@@ -607,11 +607,13 @@ struct _Evas_Object_Textblock
int l, r, t, b;
} style_pad;
struct {
- Evas_Object_Textblock_Format format;
- struct {
- Eina_Stringshare *font;
- Evas_Font_Size size;
- } info;
+ Evas_Object_Textblock_Format format;
+ struct {
+ Eina_Stringshare *font;
+ Evas_Font_Size size;
+ Eina_Stringshare *font_source;
+ int font_weight;
+ } info;
} default_format;
double valign;
Eina_Stringshare *markup_text;
@@ -3332,7 +3334,13 @@ _layout_format_push(Ctxt *c, Evas_Object_Textblock_Format *fmt,
if (_FMT_INFO(font))
{
Evas_Object_Protected_Data *evas_obj = efl_data_scope_get(c->obj, EFL_CANVAS_OBJECT_CLASS);
+
+ if (fmt->font.fdesc)
+ {
+ evas_font_desc_unref(fmt->font.fdesc);
+ }
fmt->font.fdesc = evas_font_desc_new();
+
evas_font_name_parse(fmt->font.fdesc, _FMT_INFO(font));
eina_stringshare_replace(&(fmt->font.fdesc->lang),
evas_font_lang_normalize("auto"));
@@ -3340,6 +3348,7 @@ _layout_format_push(Ctxt *c, Evas_Object_Textblock_Format *fmt,
fmt->font.size = _FMT_INFO(size);
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);
}
}
@@ -6637,7 +6646,6 @@ _efl_canvas_text_efl_object_constructor(Eo *eo_obj, Efl_Canvas_Text_Data *class_
_FMT(password) = 1;
_FMT(ellipsis) = -1;
-
return eo_obj;
}
@@ -14993,90 +15001,139 @@ _efl_canvas_text_efl_text_properties_color_get(Eo *eo_obj EINA_UNUSED, Efl_Canva
}
static void
-_efl_canvas_text_efl_text_font_font_set(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *pd EINA_UNUSED, const char *font EINA_UNUSED, int size EINA_UNUSED)
+_efl_canvas_text_efl_text_font_font_set(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o EINA_UNUSED, const char *font EINA_UNUSED, int size EINA_UNUSED)
{
+ Eina_Bool changed = EINA_FALSE;
+
+ Eina_Stringshare *nfont;
+
+ if (o->default_format.info.size != size)
+ {
+ o->default_format.info.size = size;
+ changed = EINA_TRUE;
+ }
+
+ if (o->default_format.info.font != font)
+ {
+ nfont = eina_stringshare_add(font);
+ if (nfont == _FMT_INFO(font))
+ {
+ /* Already stringshared here, unref */
+ eina_stringshare_del(nfont);
+ }
+ else
+ {
+ // Set immediately, load font later
+ _FMT_INFO(font) = nfont;
+ changed = EINA_TRUE;
+ }
+ }
+
+ if (changed)
+ {
+ _canvas_text_format_changed(obj, o);
+ }
}
static void
-_efl_canvas_text_efl_text_font_font_get(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *pd EINA_UNUSED, const char **font EINA_UNUSED, int *size EINA_UNUSED)
+_efl_canvas_text_efl_text_font_font_get(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o EINA_UNUSED, const char **font EINA_UNUSED, int *size EINA_UNUSED)
{
+ if (font) *font = o->default_format.info.font;
+ if (size) *size = o->default_format.info.size;
}
static void
-_efl_canvas_text_efl_text_font_font_source_set(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *pd EINA_UNUSED, const char *font_source EINA_UNUSED)
+_efl_canvas_text_efl_text_font_font_source_set(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o EINA_UNUSED, const char *font_source EINA_UNUSED)
{
+ Eina_Stringshare *nfont_source;
+ if (o->default_format.info.font_source != font_source)
+ {
+ nfont_source = eina_stringshare_add(font_source);
+ if (nfont_source == _FMT_INFO(font_source))
+ {
+ /* Already stringshared here, unref */
+ eina_stringshare_del(nfont_source);
+ }
+ else
+ {
+ // Set immediately, load font_source later
+ _FMT_INFO(font_source) = nfont_source;
+ _canvas_text_format_changed(obj, o);
+ }
+ }
}
static const char*
-_efl_canvas_text_efl_text_font_font_source_get(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *pd EINA_UNUSED)
+_efl_canvas_text_efl_text_font_font_source_get(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o EINA_UNUSED)
{
- return NULL;
+ return _FMT_INFO(font_source);
}
static void
-_efl_canvas_text_efl_text_font_font_fallbacks_set(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *pd EINA_UNUSED, const char *font_fallbacks EINA_UNUSED)
+_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)
{
}
static const char*
-_efl_canvas_text_efl_text_font_font_fallbacks_get(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *pd EINA_UNUSED)
+_efl_canvas_text_efl_text_font_font_fallbacks_get(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o EINA_UNUSED)
{
return NULL;
}
static void
-_efl_canvas_text_efl_text_font_font_lang_set(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *pd 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 *lang EINA_UNUSED)
{
}
static const char*
-_efl_canvas_text_efl_text_font_font_lang_get(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *pd EINA_UNUSED)
+_efl_canvas_text_efl_text_font_font_lang_get(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o EINA_UNUSED)
{
return NULL;
}
static void
-_efl_canvas_text_efl_text_font_font_weight_set(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *pd EINA_UNUSED, Efl_Text_Font_Weight font_weight EINA_UNUSED)
+_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)
{
+ _FMT_INFO(font_weight) = font_weight;
}
static Efl_Text_Font_Weight
-_efl_canvas_text_efl_text_font_font_weight_get(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *pd EINA_UNUSED)
+_efl_canvas_text_efl_text_font_font_weight_get(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o EINA_UNUSED)
{
- return 0;
+ return _FMT_INFO(font_weight);
}
static void
-_efl_canvas_text_efl_text_font_font_style_set(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *pd EINA_UNUSED, Efl_Text_Font_Style style EINA_UNUSED)
+_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)
{
}
static Efl_Text_Font_Style
-_efl_canvas_text_efl_text_font_font_style_get(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *pd EINA_UNUSED)
+_efl_canvas_text_efl_text_font_font_style_get(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o EINA_UNUSED)
{
return 0;
}
static void
-_efl_canvas_text_efl_text_font_font_width_set(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *pd 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 width EINA_UNUSED)
{
}
static Efl_Text_Font_Width
-_efl_canvas_text_efl_text_font_font_width_get(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *pd EINA_UNUSED)
+_efl_canvas_text_efl_text_font_font_width_get(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o EINA_UNUSED)
{
return 0;
}