diff options
Diffstat (limited to 'src/lib/evas/canvas')
-rw-r--r-- | src/lib/evas/canvas/efl_canvas_text.eo | 12 | ||||
-rw-r--r-- | src/lib/evas/canvas/evas_object_textblock.c | 196 |
2 files changed, 207 insertions, 1 deletions
diff --git a/src/lib/evas/canvas/efl_canvas_text.eo b/src/lib/evas/canvas/efl_canvas_text.eo index a0d13b85bc..a455666d7a 100644 --- a/src/lib/evas/canvas/efl_canvas_text.eo +++ b/src/lib/evas/canvas/efl_canvas_text.eo @@ -1,7 +1,7 @@ struct Efl.Canvas.Text.Style; [[EFL text style data structure]] class Efl.Canvas.Text (Efl.Canvas.Object, Efl.Text, Efl.Text.Properties, Efl.Canvas.Filter.Internal, -Efl.Text.Font, Efl.Text.Style) +Efl.Text.Font, Efl.Text.Style, Efl.Text.Format) { [[Efl canvas text class]] legacy_prefix: evas_object_textblock; @@ -401,6 +401,16 @@ Efl.Text.Font, Efl.Text.Style) Efl.Text.Style.glow_color { get; set; } Efl.Text.Style.glow2_color { get; set; } Efl.Text.Style.strikethrough_color { get; set; } + Efl.Text.Format.format_ellipsis { get; set; } + Efl.Text.Format.format_wrap { get; set; } + Efl.Text.Format.format_multiline { get; set; } + Efl.Text.Format.format_halign { get; set; } + Efl.Text.Format.format_valign { get; set; } + Efl.Text.Format.format_linegap { get; set; } + Efl.Text.Format.format_linerelgap { get; set; } + Efl.Text.Format.format_tabstops { get; set; } + Efl.Text.Format.format_password { get; set; } + Efl.Text.Format.format_replacement_char { get; set; } } events { changed; [[Called when the content (text or annotations) changed.]] diff --git a/src/lib/evas/canvas/evas_object_textblock.c b/src/lib/evas/canvas/evas_object_textblock.c index 4a8591ba03..86bc51acb7 100644 --- a/src/lib/evas/canvas/evas_object_textblock.c +++ b/src/lib/evas/canvas/evas_object_textblock.c @@ -618,6 +618,7 @@ struct _Evas_Object_Textblock unsigned int font_slant; unsigned int font_width; Efl_Text_Style_Shadow_Direction shadow_direction; + Efl_Text_Format_Wrap wrap; } info; } default_format; double valign; @@ -15191,6 +15192,7 @@ _efl_canvas_text_efl_text_font_font_width_get(Eo *obj EINA_UNUSED, Efl_Canvas_Te /* Efl.Text.Style interface implementation */ +/* Helper: sets color fields of style 'x' and informs if any are changed. */ #define _FMT_COLOR_SET(x) \ if ((_FMT(color.x).r == r) && (_FMT(color.x).g == g) \ && (_FMT(color.x).b == b) && (_FMT(color.x).a == a)) return; \ @@ -15200,17 +15202,20 @@ _efl_canvas_text_efl_text_font_font_width_get(Eo *obj EINA_UNUSED, Efl_Canvas_Te _FMT(color.x).a = a; \ _canvas_text_format_changed(obj, o); +/* Helper: returns color fields of style 'x'. */ #define _FMT_COLOR_RET(x) \ if (r) *r = _FMT(color.x).r; \ if (g) *g = _FMT(color.x).g; \ if (b) *b = _FMT(color.x).b; \ if (a) *a = _FMT(color.x).a; +/* Helper: updates format field, and informs if changed. */ #define _FMT_SET(x, v) \ if (_FMT(x) == v) return; \ _FMT(x) = v; \ _canvas_text_format_changed(obj, o); +/* Helper: updates format field of extended format information, and informs if changed. */ #define _FMT_INFO_SET(x, v) \ if (_FMT_INFO(x) == v) return; \ _FMT_INFO(x) = v; \ @@ -15468,6 +15473,197 @@ _efl_canvas_text_efl_text_style_strikethrough_color_get(Eo *obj EINA_UNUSED, Efl _FMT_COLOR_RET(strikethrough); } +static void +_efl_canvas_text_efl_text_format_format_ellipsis_set(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o EINA_UNUSED, double value EINA_UNUSED) +{ + _FMT_SET(ellipsis, value); +} + + +static double +_efl_canvas_text_efl_text_format_format_ellipsis_get(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o EINA_UNUSED) +{ + return _FMT(ellipsis); +} + + +static void +_efl_canvas_text_efl_text_format_format_wrap_set(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o EINA_UNUSED, Efl_Text_Format_Wrap wrap EINA_UNUSED) +{ + if (_FMT_INFO(wrap) == wrap) _FMT_INFO(wrap) = wrap; + + _FMT(wrap_word) = (wrap == EFL_TEXT_FORMAT_WRAP_WORD); + _FMT(wrap_char) = (wrap == EFL_TEXT_FORMAT_WRAP_CHAR); + _FMT(wrap_mixed) = (wrap == EFL_TEXT_FORMAT_WRAP_MIXED); + _FMT(wrap_hyphenation) = (wrap == EFL_TEXT_FORMAT_WRAP_HYPHENATION); + _canvas_text_format_changed(obj, o); +} + + +static Efl_Text_Format_Wrap +_efl_canvas_text_efl_text_format_format_wrap_get(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o EINA_UNUSED) +{ + return _FMT_INFO(wrap); +} + + +static void +_efl_canvas_text_efl_text_format_format_multiline_set(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o EINA_UNUSED, Eina_Bool enabled EINA_UNUSED) +{ + if (o->multiline == enabled) return; + o->multiline = enabled; + _canvas_text_format_changed(obj, o); +} + + +static Eina_Bool +_efl_canvas_text_efl_text_format_format_multiline_get(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o EINA_UNUSED) +{ + return o->multiline; +} + + +static void +_efl_canvas_text_efl_text_format_format_halign_set(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o EINA_UNUSED, double value EINA_UNUSED) +{ + if (value < 0.0) + { + _FMT_SET(halign_auto, EINA_TRUE); + } + else + { + _FMT_SET(halign, value); + _FMT(halign_auto) = EINA_FALSE; + } +} + + +static double +_efl_canvas_text_efl_text_format_format_halign_get(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o EINA_UNUSED) +{ + return (_FMT(halign_auto) ? -1.0 : _FMT(halign)); +} + + +static void +_efl_canvas_text_efl_text_format_format_valign_set(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o EINA_UNUSED, double value EINA_UNUSED) +{ + _FMT_SET(valign, value); +} + + +static double +_efl_canvas_text_efl_text_format_format_valign_get(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o EINA_UNUSED) +{ + return _FMT(valign); +} + + +static void +_efl_canvas_text_efl_text_format_format_linegap_set(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o EINA_UNUSED, double value EINA_UNUSED) +{ + double linerelgap = _FMT(linerelgap); + _FMT(linerelgap) = 0.0; + + if (EINA_DBL_EQ(linerelgap, 0.0)) + { + _FMT_SET(linegap, value); + } + else + { + _FMT(linegap) = value; + _FMT(linerelgap) = 0.0; + _canvas_text_format_changed(obj, o); + } +} + + +static double +_efl_canvas_text_efl_text_format_format_linegap_get(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o EINA_UNUSED) +{ + return _FMT(linegap); +} + + +static void +_efl_canvas_text_efl_text_format_format_linerelgap_set(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o EINA_UNUSED, double value EINA_UNUSED) +{ + double linegap = _FMT(linegap); + _FMT(linegap) = 0.0; + + if (EINA_DBL_EQ(linegap, 0.0)) + { + _FMT_SET(linerelgap, value); + } + else + { + _FMT(linerelgap) = value; + _canvas_text_format_changed(obj, o); + } +} + + +static double +_efl_canvas_text_efl_text_format_format_linerelgap_get(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o EINA_UNUSED) +{ + return _FMT(linerelgap); +} + + +static void +_efl_canvas_text_efl_text_format_format_tabstops_set(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o EINA_UNUSED, int value EINA_UNUSED) +{ + _FMT_SET(tabstops, value); +} + + +static int +_efl_canvas_text_efl_text_format_format_tabstops_get(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o EINA_UNUSED) +{ + return _FMT(tabstops); +} + + +static void +_efl_canvas_text_efl_text_format_format_password_set(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o EINA_UNUSED, Eina_Bool enabled EINA_UNUSED) +{ + _FMT_SET(password, enabled); +} + + +static Eina_Bool +_efl_canvas_text_efl_text_format_format_password_get(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o EINA_UNUSED) +{ + return _FMT(password); +} + +static void +_efl_canvas_text_efl_text_format_format_replacement_char_set(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o EINA_UNUSED, const char *repch EINA_UNUSED) +{ + Eina_Stringshare *nrepch; + if (o->repch != repch) + { + nrepch = eina_stringshare_add(repch); + if (nrepch == _FMT_INFO(font_fallbacks)) + { + /* Already stringshared here, unref */ + eina_stringshare_del(nrepch); + } + else + { + // Set immediately, load repch later + o->repch = nrepch; + _canvas_text_format_changed(obj, o); + } + } +} + +static const char * +_efl_canvas_text_efl_text_format_format_replacement_char_get(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o EINA_UNUSED) +{ + return o->repch; +} + /** * @} */ |