From 20ecea1615e484b18a651fc4983b99abb85146eb Mon Sep 17 00:00:00 2001 From: Daniel Hirt Date: Thu, 12 Oct 2017 10:28:36 +0300 Subject: [PATCH] Canvas text: fix applying effects Signed-off-by: Cedric BAIL --- src/lib/evas/canvas/evas_object_textblock.c | 38 ++++++++++++++++++++++++++--- 1 file changed, 35 insertions(+), 3 deletions(-) diff --git a/src/lib/evas/canvas/evas_object_textblock.c b/src/lib/evas/canvas/evas_object_textblock.c index 251d1ad..7d91e68 100644 --- a/src/lib/evas/canvas/evas_object_textblock.c +++ b/src/lib/evas/canvas/evas_object_textblock.c @@ -15581,14 +15581,45 @@ static const struct { EFL_TEXT_STYLE_SHADOW_DIRECTION_RIGHT, EVAS_TEXT_STYLE_SHADOW_DIRECTION_RIGHT }, }; +#define MAP_LEN(a) ((sizeof (a)) / sizeof((a)[0])) + +static Evas_Text_Style_Type +_get_style_from_map(Efl_Text_Style_Effect_Type st) +{ + size_t i; + size_t len = MAP_LEN(_map_style_effect); + for (i = 0; i < len; i++) + { + if (_map_style_effect[i].x == st) + return _map_style_effect[i].y; + } + ERR("Mapping style failed. Please check code\n"); + return EVAS_TEXT_STYLE_SHADOW; // shouldn't reach +} + +static Evas_Text_Style_Type +_get_dir_from_map(Efl_Text_Style_Shadow_Direction dir) +{ + size_t i; + size_t len = MAP_LEN(_map_shadow_dir); + for (i = 0; i < len; i++) + { + if (_map_shadow_dir[i].x == dir) + return _map_shadow_dir[i].y; + } + ERR("Mapping direction failed. Please check code\n"); + return EVAS_TEXT_STYLE_SHADOW_DIRECTION_LEFT; // shouldn't reach +} + static void _efl_canvas_text_efl_text_style_effect_type_set(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o EINA_UNUSED, Efl_Text_Style_Effect_Type type EINA_UNUSED) { ASYNC_BLOCK; _FMT_INFO_SET_START(effect, type); - _FMT(style) = _map_style_effect[type].y; + _FMT(style) = _get_style_from_map(type); // Re-apply shadow direction - EVAS_TEXT_STYLE_SHADOW_DIRECTION_SET(_FMT(style), _map_shadow_dir[type].y); + EVAS_TEXT_STYLE_SHADOW_DIRECTION_SET(_FMT(style), + _get_dir_from_map(_FMT_INFO(shadow_direction))); _FMT_INFO_SET_END(); } @@ -15616,7 +15647,8 @@ _efl_canvas_text_efl_text_style_shadow_direction_set(Eo *obj EINA_UNUSED, Efl_Ca { ASYNC_BLOCK; _FMT_INFO_SET_START(shadow_direction, type); - EVAS_TEXT_STYLE_SHADOW_DIRECTION_SET(_FMT(style), _map_shadow_dir[type].y); + EVAS_TEXT_STYLE_SHADOW_DIRECTION_SET(_FMT(style), + _get_dir_from_map(_FMT_INFO(shadow_direction))); _FMT_INFO_SET_END(); } -- 2.7.4