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
This commit is contained in:
AbdullehGhujeh 2020-08-18 18:10:04 +09:00 committed by WooHyun Jung
parent 4ad272a8c3
commit eb0f7183dd
2 changed files with 35 additions and 7 deletions

View File

@ -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
{

View File

@ -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