summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Hirt <hirt.danny@gmail.com>2017-10-20 18:02:08 +0300
committerDaniel Hirt <hirt.danny@gmail.com>2017-11-06 18:56:42 +0200
commite4d88d9b0e582b7968a996a36c0d270daae6fb4a (patch)
tree2bedfffd86df046603f46600be6e1032a92d7d30
parent4e419ef00864f5102627bb195d89bc17fbe4c3de (diff)
downloadefl-e4d88d9b0e582b7968a996a36c0d270daae6fb4a.tar.gz
Canvas text: change halign/valign to use doubles
There are use cases where you would want to align by a value. The wordy alignment values are thus removed. This commit also separates auto-modes (none, normal, locale) for horizontal alignment to its own API.
-rw-r--r--src/bin/elementary/test_efl_ui_text.c6
-rw-r--r--src/lib/efl/interfaces/efl_text_format.eo35
-rw-r--r--src/lib/evas/canvas/efl_canvas_text.eo1
-rw-r--r--src/lib/evas/canvas/evas_object_textblock.c82
4 files changed, 57 insertions, 67 deletions
diff --git a/src/bin/elementary/test_efl_ui_text.c b/src/bin/elementary/test_efl_ui_text.c
index a8629a8e09..b53c427b9a 100644
--- a/src/bin/elementary/test_efl_ui_text.c
+++ b/src/bin/elementary/test_efl_ui_text.c
@@ -53,11 +53,11 @@ test_efl_ui_text_label(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, voi
efl_text_set(en, "This is a\t small label");
// 012345678901234567890
_apply_style(en, 0, 21, "font_size=12 font_weight=bold");
- efl_text_halign_set(en, EFL_TEXT_HORIZONTAL_ALIGNMENT_CENTER);
+ efl_text_halign_set(en, 0.5);
efl_text_font_weight_set(en, EFL_TEXT_FONT_WEIGHT_BOLD);
en = _create_label(win, bx);
- efl_text_halign_set(en, EFL_TEXT_HORIZONTAL_ALIGNMENT_CENTER);
+ efl_text_halign_set(en, 0.5);
efl_text_set(en, "This is a text. Is also has\n"
"newlines. There are several styles applied.");
_apply_style(en, 40, 45, "font_weight=bold color=#ff0");
@@ -65,7 +65,7 @@ test_efl_ui_text_label(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, voi
efl_text_multiline_set(en, EINA_TRUE);
en = _create_label(win, bx);
- efl_text_halign_set(en, EFL_TEXT_HORIZONTAL_ALIGNMENT_CENTER);
+ efl_text_halign_set(en, 0.5);
efl_text_set(en, "By default 'multiline' is disabled.\n"
"So, \\n would only work if you enable it.");
diff --git a/src/lib/efl/interfaces/efl_text_format.eo b/src/lib/efl/interfaces/efl_text_format.eo
index 5e14893f06..0e1829972b 100644
--- a/src/lib/efl/interfaces/efl_text_format.eo
+++ b/src/lib/efl/interfaces/efl_text_format.eo
@@ -7,23 +7,13 @@ enum Efl.Text.Format.Wrap {
hyphenation [[Wrap mode hyphenation]]
}
-enum Efl.Text.Format.Horizontal_Alignment_Type {
- [[Horizontal alignment of the text]]
- legacy: efl_text_horizontal_alignment;
- auto, [[Respects LTR/RTL (bidirectional) settings]]
- locale, [[Respects locale's langauge settings]]
- left, [[Text is placed at the left end of the line]]
- right, [[Text is placed at the right end of the line]]
- center, [[Text is places at the center of the line]]
- end [[Text is places at opposite side of LTR/RTL (bidirectional) settings]]
-}
-
-enum Efl.Text.Format.Vertical_Alignment_Type {
- [[Horizontal alignment of the text]]
- legacy: efl_text_vertical_alignment;
- top, [[Text is placed at the top]]
- center, [[Text is placed at the center]]
- bottom [[Text is placed at the bottom]]
+enum Efl.Text.Format.Horizontal_Alignment_Auto_Type {
+ [[Auto-horizontal alignment of the text]]
+ legacy: efl_text_horizontal_alignment_auto;
+ none, [[No auto-alignment rule]]
+ normal, [[Respects LTR/RTL (bidirectional) settings]]
+ locale, [[Respects locale's langauge settings]]
+ end [[Text is places at opposite side of LTR/RTL (bidirectional) settings]]
}
interface Efl.Text.Format {
@@ -58,17 +48,24 @@ interface Efl.Text.Format {
}
}
+ @property halign_auto_type {
+ [[Horizontal alignment of text]]
+ values {
+ value: Efl.Text.Format.Horizontal_Alignment_Auto_Type; [[Alignment type]]
+ }
+ }
+
@property halign {
[[Horizontal alignment of text]]
values {
- value: Efl.Text.Format.Horizontal_Alignment_Type; [[Alignment type]]
+ value: double; [[Horizontal alignment value]]
}
}
@property valign {
[[Vertical alignment of text]]
values {
- value: Efl.Text.Format.Vertical_Alignment_Type; [[Allignment type]]
+ value: double; [[Vertical alignment value]]
}
}
diff --git a/src/lib/evas/canvas/efl_canvas_text.eo b/src/lib/evas/canvas/efl_canvas_text.eo
index d2fce3b1c2..e401577d18 100644
--- a/src/lib/evas/canvas/efl_canvas_text.eo
+++ b/src/lib/evas/canvas/efl_canvas_text.eo
@@ -308,6 +308,7 @@ Efl.Text.Cursor, Efl.Text.Annotate, Efl.Text.Markup)
Efl.Text.Format.wrap { get; set; }
Efl.Text.Format.multiline { get; set; }
Efl.Text.Format.halign { get; set; }
+ Efl.Text.Format.halign_auto_type { get; set; }
Efl.Text.Format.valign { get; set; }
Efl.Text.Format.linegap { get; set; }
Efl.Text.Format.linerelgap { get; set; }
diff --git a/src/lib/evas/canvas/evas_object_textblock.c b/src/lib/evas/canvas/evas_object_textblock.c
index 0e23d06fbf..89ee2ab36c 100644
--- a/src/lib/evas/canvas/evas_object_textblock.c
+++ b/src/lib/evas/canvas/evas_object_textblock.c
@@ -15386,6 +15386,11 @@ _efl_canvas_text_efl_text_font_font_bitmap_scalable_get(Eo *obj EINA_UNUSED, Efl
_FMT(x) = v; \
_canvas_text_format_changed(obj, o);
+#define _FMT_DBL_SET(x, v) \
+ if (EINA_DBL_EQ(_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_START(x, v) \
Eina_Bool changed = EINA_FALSE; \
@@ -15790,81 +15795,68 @@ _efl_canvas_text_efl_text_format_multiline_get(Eo *obj EINA_UNUSED, Efl_Canvas_T
}
static void
-_efl_canvas_text_efl_text_format_halign_set(Eo *obj, Efl_Canvas_Text_Data *o, Efl_Text_Format_Horizontal_Alignment_Type type)
+_efl_canvas_text_efl_text_format_halign_auto_type_set(Eo *obj, Efl_Canvas_Text_Data *o, Efl_Text_Format_Horizontal_Alignment_Auto_Type type)
{
ASYNC_BLOCK;
- if (type == EFL_TEXT_HORIZONTAL_ALIGNMENT_AUTO)
+ if (type == EFL_TEXT_HORIZONTAL_ALIGNMENT_AUTO_NONE)
{
- _FMT_SET(halign_auto, EVAS_TEXTBLOCK_ALIGN_AUTO_NORMAL);
+ _FMT_SET(halign_auto, EVAS_TEXTBLOCK_ALIGN_AUTO_NONE);
}
- else if (type == EFL_TEXT_HORIZONTAL_ALIGNMENT_END)
+ else if (type == EFL_TEXT_HORIZONTAL_ALIGNMENT_AUTO_NORMAL)
{
- _FMT_SET(halign_auto, EVAS_TEXTBLOCK_ALIGN_AUTO_END);
+ _FMT_SET(halign_auto, EVAS_TEXTBLOCK_ALIGN_AUTO_NORMAL);
}
- else if (type == EFL_TEXT_HORIZONTAL_ALIGNMENT_LOCALE)
+ else if (type == EFL_TEXT_HORIZONTAL_ALIGNMENT_AUTO_LOCALE)
{
_FMT_SET(halign_auto, EVAS_TEXTBLOCK_ALIGN_AUTO_LOCALE);
}
- else
+ else if (type == EFL_TEXT_HORIZONTAL_ALIGNMENT_AUTO_END)
{
- double value = 0.0; // EFL_TEXT_HORIZONTAL_ALIGNMENT_LEFT
- _FMT(halign_auto) = EINA_FALSE;
-
- if (type == EFL_TEXT_HORIZONTAL_ALIGNMENT_CENTER)
- {
- value = 0.5;
- }
- else if (type == EFL_TEXT_HORIZONTAL_ALIGNMENT_RIGHT)
- {
- value = 1.0;
- }
- _FMT_SET(halign, value);
+ _FMT_SET(halign_auto, EVAS_TEXTBLOCK_ALIGN_AUTO_END);
}
}
-static Efl_Text_Format_Horizontal_Alignment_Type
-_efl_canvas_text_efl_text_format_halign_get(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o)
+static Efl_Text_Format_Horizontal_Alignment_Auto_Type
+_efl_canvas_text_efl_text_format_halign_auto_type_get(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o)
{
- Efl_Text_Format_Horizontal_Alignment_Type ret =
- EFL_TEXT_HORIZONTAL_ALIGNMENT_LEFT;
+ Efl_Text_Format_Horizontal_Alignment_Auto_Type ret =
+ EFL_TEXT_HORIZONTAL_ALIGNMENT_AUTO_NONE;
if (_FMT(halign_auto) == EVAS_TEXTBLOCK_ALIGN_AUTO_NORMAL)
{
- ret = EFL_TEXT_HORIZONTAL_ALIGNMENT_AUTO;
+ ret = EFL_TEXT_HORIZONTAL_ALIGNMENT_AUTO_NORMAL;
}
else if (_FMT(halign_auto) == EVAS_TEXTBLOCK_ALIGN_AUTO_END)
{
- ret = EFL_TEXT_HORIZONTAL_ALIGNMENT_END;
+ ret = EFL_TEXT_HORIZONTAL_ALIGNMENT_AUTO_END;
}
else if (_FMT(halign_auto) == EVAS_TEXTBLOCK_ALIGN_AUTO_LOCALE)
{
- ret = EFL_TEXT_HORIZONTAL_ALIGNMENT_LOCALE;
- }
- else if (EINA_DBL_EQ(_FMT(halign), 0.5))
- {
- ret = EFL_TEXT_HORIZONTAL_ALIGNMENT_CENTER;
- }
- else if (EINA_DBL_EQ(_FMT(halign), 1.0))
- {
- ret = EFL_TEXT_HORIZONTAL_ALIGNMENT_RIGHT;
+ ret = EFL_TEXT_HORIZONTAL_ALIGNMENT_AUTO_LOCALE;
}
return ret;
}
static void
+_efl_canvas_text_efl_text_format_halign_set(Eo *obj, Efl_Canvas_Text_Data *o,
+ double value)
+{
+ ASYNC_BLOCK;
+ _FMT_DBL_SET(halign, value);
+ _FMT(halign_auto) = EVAS_TEXTBLOCK_ALIGN_AUTO_NONE;
+}
+
+static double
+_efl_canvas_text_efl_text_format_halign_get(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o EINA_UNUSED)
+{
+ return _FMT(halign);
+}
+
+static void
_efl_canvas_text_efl_text_format_valign_set(Eo *obj, Efl_Canvas_Text_Data *o,
- Efl_Text_Format_Vertical_Alignment_Type type)
+ double value)
{
ASYNC_BLOCK;
- double value = 0.0; // EFL_TEXT_VERTICAL_ALIGNMENT_TOP
- if (type == EFL_TEXT_VERTICAL_ALIGNMENT_CENTER)
- {
- value = 0.5;
- }
- else if (type == EFL_TEXT_VERTICAL_ALIGNMENT_BOTTOM)
- {
- value = 1.0;
- }
if (!EINA_DBL_EQ(o->valign, value))
{
o->valign = value;
@@ -15872,7 +15864,7 @@ _efl_canvas_text_efl_text_format_valign_set(Eo *obj, Efl_Canvas_Text_Data *o,
}
}
-static Efl_Text_Format_Vertical_Alignment_Type
+static double
_efl_canvas_text_efl_text_format_valign_get(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o EINA_UNUSED)
{
return o->valign;