summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Hirt <hirt.danny@gmail.com>2017-05-21 16:21:46 +0300
committerDaniel Hirt <hirt.danny@gmail.com>2017-05-22 00:00:42 +0300
commit35a02cbb11835ead29faaf410468ab2d0cd9ab12 (patch)
tree557f6a691ab302f4e42ed3bd1bf6faf9926e08d1
parent2d151711c71b33dbc15fc07649d11376387be16c (diff)
downloadefl-devs/herdsman/work2.tar.gz
Canvas text: implement Efl.Text.Formatdevs/herdsman/work2
Also fix a few Efl.Text.* things.
-rw-r--r--src/Makefile_Efl.am1
-rw-r--r--src/lib/efl/Efl.h1
-rw-r--r--src/lib/efl/interfaces/efl_interfaces_main.c1
-rw-r--r--src/lib/efl/interfaces/efl_text_format.eo90
-rw-r--r--src/lib/evas/canvas/efl_canvas_text.eo12
-rw-r--r--src/lib/evas/canvas/evas_object_textblock.c196
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;
+}
+
/**
* @}
*/