diff options
-rw-r--r-- | src/Makefile_Efl.am | 1 | ||||
-rw-r--r-- | src/lib/efl/Efl.h | 1 | ||||
-rw-r--r-- | src/lib/efl/interfaces/efl_interfaces_main.c | 1 | ||||
-rw-r--r-- | src/lib/efl/interfaces/efl_text_format.eo | 90 | ||||
-rw-r--r-- | src/lib/evas/canvas/efl_canvas_text.eo | 12 | ||||
-rw-r--r-- | src/lib/evas/canvas/evas_object_textblock.c | 196 |
6 files changed, 300 insertions, 1 deletions
diff --git a/src/Makefile_Efl.am b/src/Makefile_Efl.am index 373ce87a97..60041edd6f 100644 --- a/src/Makefile_Efl.am +++ b/src/Makefile_Efl.am @@ -18,6 +18,7 @@ efl_eolian_files = \ lib/efl/interfaces/efl_text.eo \ lib/efl/interfaces/efl_text_font.eo \ lib/efl/interfaces/efl_text_style.eo \ + lib/efl/interfaces/efl_text_format.eo \ lib/efl/interfaces/efl_text_properties.eo \ lib/efl/interfaces/efl_gfx_stack.eo \ lib/efl/interfaces/efl_gfx_view.eo \ diff --git a/src/lib/efl/Efl.h b/src/lib/efl/Efl.h index 4afd747361..c428a2dd2f 100644 --- a/src/lib/efl/Efl.h +++ b/src/lib/efl/Efl.h @@ -146,6 +146,7 @@ typedef Efl_Gfx_Path_Command_Type Efl_Gfx_Path_Command; /* Text interfaces */ #include "interfaces/efl_text_font.eo.h" #include "interfaces/efl_text_style.eo.h" +#include "interfaces/efl_text_format.eo.h" #else diff --git a/src/lib/efl/interfaces/efl_interfaces_main.c b/src/lib/efl/interfaces/efl_interfaces_main.c index 2f3c00fffa..209f9e4eec 100644 --- a/src/lib/efl/interfaces/efl_interfaces_main.c +++ b/src/lib/efl/interfaces/efl_interfaces_main.c @@ -16,6 +16,7 @@ #include "interfaces/efl_text_properties.eo.c" #include "interfaces/efl_text_font.eo.c" #include "interfaces/efl_text_style.eo.c" +#include "interfaces/efl_text_format.eo.c" #include "interfaces/efl_gfx.eo.c" #include "interfaces/efl_gfx_buffer.eo.c" diff --git a/src/lib/efl/interfaces/efl_text_format.eo b/src/lib/efl/interfaces/efl_text_format.eo new file mode 100644 index 0000000000..a23324ddaf --- /dev/null +++ b/src/lib/efl/interfaces/efl_text_format.eo @@ -0,0 +1,90 @@ +enum Efl.Text.Format.Wrap { + [[Wrap mode of the text (not in effect if not multiline)]] + none, + char, + word, + mixed, + hyphenation +} + +interface Efl.Text.Format { + methods { + @property format_ellipsis { + [[Ellipsis value (number from -1.0 to 1.0)]] + values + { + value: double; + } + } + + @property format_wrap { + [[Wrap mode for use in the text]] + values { + wrap: Efl.Text.Format.Wrap; + } + } + + @property format_multiline { + [[Multiline is enabled or not]] + values { + enabled: bool; + } + } + + @property format_halign { + [[Horizontal alignment of text (number from 0.0 to 1.0)]] + values + { + value: double; + } + } + + @property format_valign { + [[Vertical alignment of text (number from -1.0 to 1.0)]] + values + { + value: double; + } + } + + @property format_linegap { + values + { + value: double; + } + } + + @property format_linerelgap { + values + { + value: double; + } + } + + @property format_tabstops { + values + { + value: int; + } + } + + @property format_password { + [[Whether text is a password]] + values + { + enabled: bool; + } + } + + @property format_replacement_char { + [[The character used to replace characters that can not be displayed. + + Currently, only used to replace characters if @.format_password + is enabled. + ]] + values { + repch: string; + } + } + } +} 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; +} + /** * @} */ |