woohyun pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=eb0f7183ddfdaa83b12e2cc0c7ee4b29f54b5a3e

commit eb0f7183ddfdaa83b12e2cc0c7ee4b29f54b5a3e
Author: AbdullehGhujeh <[email protected]>
Date:   Tue Aug 18 18:10:04 2020 +0900

    Efl Canvas Text : canvas textblock changed not fired for shadow format 
(style_apply)
    
    Summary:
    If shadow format changed using style_apply , the event 
EFL_CANVAS_TEXTBLOCK_EVENT_CHANGED will not be fired.
    also added tests for it.
    
    Reviewers: ali.alzyod, woohyun
    
    Reviewed By: ali.alzyod
    
    Subscribers: cedric, #reviewers, #committers
    
    Tags: #efl
    
    Differential Revision: https://phab.enlightenment.org/D11078
---
 src/lib/evas/canvas/evas_object_textblock.c | 27 +++++++++++++++++++++------
 src/tests/evas/evas_test_textblock.c        | 15 ++++++++++++++-
 2 files changed, 35 insertions(+), 7 deletions(-)

diff --git a/src/lib/evas/canvas/evas_object_textblock.c 
b/src/lib/evas/canvas/evas_object_textblock.c
index f8ddf1cee6..7a4a37134c 100644
--- a/src/lib/evas/canvas/evas_object_textblock.c
+++ b/src/lib/evas/canvas/evas_object_textblock.c
@@ -1489,11 +1489,15 @@ _style_string_split(const char *str, char* part1, char* 
part2)
    *temp = 0;
 }
 
-#define FORMAT_SHADOW_SET(evas, efl) {fmt->style = evas; if (set_default) 
_FMT_INFO(effect) = efl;}
+#define FORMAT_SHADOW_SET(evas, efl) { \
+   if (fmt->style != evas) { fmt->style = evas; changed = EINA_TRUE; } \
+   if (set_default && (_FMT_INFO(effect) != efl)) {_FMT_INFO(effect) = efl; 
changed = EINA_TRUE;}}
 
-void
+Eina_Bool
 _format_shadow_set(Evas_Object_Textblock_Format *fmt, char *str, Eina_Bool 
set_default, Efl_Canvas_Textblock_Data *o)
 {
+   Eina_Bool changed = EINA_FALSE;
+
    if (!strcmp(str, "shadow"))
      FORMAT_SHADOW_SET(EVAS_TEXT_STYLE_SHADOW, 
EFL_TEXT_STYLE_EFFECT_TYPE_SHADOW)
    else if (!strcmp(str, "outline"))
@@ -1514,13 +1518,22 @@ _format_shadow_set(Evas_Object_Textblock_Format *fmt, 
char *str, Eina_Bool set_d
      FORMAT_SHADOW_SET(EVAS_TEXT_STYLE_FAR_SOFT_SHADOW, 
EFL_TEXT_STYLE_EFFECT_TYPE_FAR_SOFT_SHADOW)
    else   /*off none plain */
      FORMAT_SHADOW_SET(EVAS_TEXT_STYLE_PLAIN, EFL_TEXT_STYLE_EFFECT_TYPE_NONE)
+
+   return changed;
 }
 
-#define FORMAT_SHADOW_DIRECTION_SET(direction) 
{EVAS_TEXT_STYLE_SHADOW_DIRECTION_SET(fmt->style, 
EVAS_TEXT_STYLE_SHADOW_DIRECTION_##direction); if (set_default) 
_FMT_INFO(shadow_direction) = EFL_TEXT_STYLE_SHADOW_DIRECTION_##direction;}
+#define FORMAT_SHADOW_DIRECTION_SET(direction) { \
+  unsigned char temp = fmt->style; \
+  EVAS_TEXT_STYLE_SHADOW_DIRECTION_SET(fmt->style, 
EVAS_TEXT_STYLE_SHADOW_DIRECTION_##direction); \
+  changed = (fmt->style != temp); \
+  if (set_default && (_FMT_INFO(shadow_direction) != 
EFL_TEXT_STYLE_SHADOW_DIRECTION_##direction)) \
+     {_FMT_INFO(shadow_direction) = 
EFL_TEXT_STYLE_SHADOW_DIRECTION_##direction; changed = EINA_TRUE;}}
 
-void
+Eina_Bool
 _format_shadow_direction_set(Evas_Object_Textblock_Format *fmt, char *str, 
Eina_Bool set_default, Efl_Canvas_Textblock_Data *o)
 {
+   Eina_Bool changed = EINA_FALSE;
+
    if (!strcmp(str, "bottom_right"))
      FORMAT_SHADOW_DIRECTION_SET(BOTTOM_RIGHT)
    else if (!strcmp(str, "bottom"))
@@ -1539,6 +1552,8 @@ _format_shadow_direction_set(Evas_Object_Textblock_Format 
*fmt, char *str, Eina_
      FORMAT_SHADOW_DIRECTION_SET(RIGHT)
    else
      FORMAT_SHADOW_DIRECTION_SET(BOTTOM_RIGHT)
+
+   return changed;
 }
 
 /**
@@ -3169,10 +3184,10 @@ _default_format_command(Evas_Object *eo_obj, 
Evas_Object_Textblock_Format *fmt,
         *part2 = 0;
 
         _style_string_split(param, part1, part2);
-        _format_shadow_set(fmt, part1, EINA_TRUE, o);
+        changed = _format_shadow_set(fmt, part1, EINA_TRUE, o);
 
         if (*part2)
-          _format_shadow_direction_set(fmt, part2, EINA_TRUE, o);
+          changed = _format_shadow_direction_set(fmt, part2, EINA_TRUE, o) || 
changed;
      }
    else
      {
diff --git a/src/tests/evas/evas_test_textblock.c 
b/src/tests/evas/evas_test_textblock.c
index 2b44e3fdff..a05f30af37 100644
--- a/src/tests/evas/evas_test_textblock.c
+++ b/src/tests/evas/evas_test_textblock.c
@@ -5012,12 +5012,17 @@ EFL_START_TEST(efl_canvas_textblock_style)
    const char *style;
    Eina_Size2D size1, size2;
 
+   int changed_emit = 0;
+   efl_event_callback_add(txt, EFL_CANVAS_TEXTBLOCK_EVENT_CHANGED, 
_increment_int_changed, &changed_emit);
+
    efl_text_password_set(txt, EINA_FALSE);
    efl_text_underline_type_set(txt, EFL_TEXT_STYLE_UNDERLINE_TYPE_DOUBLE);
    efl_text_font_weight_set(txt, EFL_TEXT_FONT_WEIGHT_EXTRABOLD);
    efl_text_font_slant_set(txt, EFL_TEXT_FONT_SLANT_OBLIQUE);
    efl_text_tab_stops_set(txt, 20);
 
+   ck_assert_int_eq(changed_emit, 4);
+
    efl_canvas_textblock_style_apply(txt, "color=#90E135");
 
    style = efl_canvas_textblock_all_styles_get(txt);
@@ -5037,6 +5042,7 @@ EFL_START_TEST(efl_canvas_textblock_style)
    style = efl_canvas_textblock_all_styles_get(txt);
    fail_if(!strstr(style, "password=on"));
 
+   changed_emit = 0;
    efl_canvas_textblock_style_apply(txt, "font_width=ultracondensed");
    ck_assert_int_eq(efl_text_font_width_get(txt), 
EFL_TEXT_FONT_WIDTH_ULTRACONDENSED);
 
@@ -5081,6 +5087,13 @@ EFL_START_TEST(efl_canvas_textblock_style)
    ck_assert_int_eq(b, 0x6C);
    ck_assert_int_eq(a, 0xFF);
 
+   ck_assert_int_eq(changed_emit, 12);
+
+   //check if multiple attribute set, called only once
+   changed_emit = 0;
+   efl_canvas_textblock_style_apply(txt, style);
+   ck_assert_int_eq(changed_emit, 1);
+
    // Style Apply taking 
    efl_text_set(txt,"A");
    efl_canvas_textblock_style_apply(txt,"font_size=2");
@@ -5092,7 +5105,7 @@ EFL_START_TEST(efl_canvas_textblock_style)
 
    efl_text_gfx_filter_set(txt, "code");
    ck_assert_str_eq(efl_text_gfx_filter_get(txt), "code");
-   
+
    END_EFL_CANVAS_TEXTBLOCK_TEST();
 }
 EFL_END_TEST

-- 


Reply via email to