From 6d58825f1ebe983bca8b9184291c427f3ac15ffb Mon Sep 17 00:00:00 2001 From: Youngbok Shin Date: Fri, 28 Jul 2017 12:05:08 +0900 Subject: [PATCH] edje: send signals for ellipsize.marquee It adds the following signals. "text,ellipsize,marquee,loop" - When each loop is done. "text,ellipsize,marquee,done" - When all loops are done. "text,ellipsize,marquee,none" - When text is too short to slide. @tizen_feature Change-Id: Ib9205b0ddda42ed25cd6b252337137e22a2ff148 --- src/lib/edje/edje_calc.c | 47 +++++++++++++++++++++++++++++++++------------ src/lib/edje/edje_private.h | 1 + 2 files changed, 36 insertions(+), 12 deletions(-) diff --git a/src/lib/edje/edje_calc.c b/src/lib/edje/edje_calc.c index 5100ce4..bdbcc8c 100644 --- a/src/lib/edje/edje_calc.c +++ b/src/lib/edje/edje_calc.c @@ -5961,6 +5961,7 @@ _edje_text_ellipsize_marquee_animator_cb(void *data) double cur_time; double elapsed_time; Edje_Real_Part *ep = (Edje_Real_Part *)data; + Edje *ed = ep->typedata.text->ellipsize.marquee.edje; Edje_Part_Description_Text *chosen_desc = (Edje_Part_Description_Text *)ep->chosen_description; Evas_Object *clipper_obj = ep->typedata.text->ellipsize.clipper_obj; Evas_Coord_Rectangle text_cur_area; @@ -6016,6 +6017,9 @@ _edje_text_ellipsize_marquee_animator_cb(void *data) _edje_text_ellipsize_marquee_remove(ep); _edje_text_ellipsize_fade_update(ep, EINA_FALSE); + /* Emit a signal when text is too short to do slide. */ + _edje_emit(ed, "text,ellipsize,marquee,none", ep->part->name); + return ECORE_CALLBACK_CANCEL; } @@ -6154,6 +6158,9 @@ _edje_text_ellipsize_marquee_animator_cb(void *data) ep->typedata.text->ellipsize.marquee.distance += overpixel_for_loop; } + + /* Emit a signal when a loop(or loops) is done. */ + _edje_emit(ed, "text,ellipsize,marquee,loop", ep->part->name); } /* Check if the loop count reaches the given loop limit. */ @@ -6168,6 +6175,9 @@ _edje_text_ellipsize_marquee_animator_cb(void *data) _edje_text_ellipsize_marquee_remove(ep); _edje_text_ellipsize_fade_update(ep, EINA_TRUE); + /* Emit a signal when all loops are done. */ + _edje_emit(ed, "text,ellipsize,marquee,done", ep->part->name); + return ECORE_CALLBACK_DONE; } @@ -6281,6 +6291,18 @@ _edje_text_ellipsize_apply(Edje *ed, Edje_Real_Part *ep, _edje_text_ellipsize_fade_update(ep, EINA_FALSE); } + /* Enable fade if one of fade types is set or legacy fade_ellipsis option is set */ + if ((chosen_desc->text.ellipsize.mode == EDJE_TEXT_ELLIPSIZE_MODE_FADE) || + (chosen_desc->text.ellipsize.mode == EDJE_TEXT_ELLIPSIZE_MODE_FADE_MARQUEE) || + (chosen_desc->text.fade_ellipsis > 0.0)) + is_fade = EINA_TRUE; + + /* Enable marquee if one of marquee types is set and loop count is bigger than zero */ + if (((chosen_desc->text.ellipsize.mode == EDJE_TEXT_ELLIPSIZE_MODE_MARQUEE) || + (chosen_desc->text.ellipsize.mode == EDJE_TEXT_ELLIPSIZE_MODE_FADE_MARQUEE)) && + (chosen_desc->text.ellipsize.marquee_repeat_limit != 0)) + is_marquee = EINA_TRUE; + /* Hide fade image if fade_ellipsis option is off or object size is zero. */ if ((pf->final.w == 0) || (pf->final.h == 0) || ((chosen_desc->text.ellipsize.mode == EDJE_TEXT_ELLIPSIZE_MODE_NONE) && @@ -6305,6 +6327,12 @@ _edje_text_ellipsize_apply(Edje *ed, Edje_Real_Part *ep, evas_object_text_ellipsis_set(ep->object, chosen_desc->text.min_x ? -1.0 : pf->type.text.ellipsis); + if (is_marquee) + { + /* Emit a signal when text is too short to do slide. */ + _edje_emit(ed, "text,ellipsize,marquee,none", ep->part->name); + } + return; } @@ -6350,18 +6378,6 @@ _edje_text_ellipsize_apply(Edje *ed, Edje_Real_Part *ep, else if (ep->part->type == EDJE_PART_TYPE_TEXT) evas_object_text_ellipsis_set(ep->object, -1.0); - /* Enable fade if one of fade types is set or legacy fade_ellipsis option is set */ - if ((chosen_desc->text.ellipsize.mode == EDJE_TEXT_ELLIPSIZE_MODE_FADE) || - (chosen_desc->text.ellipsize.mode == EDJE_TEXT_ELLIPSIZE_MODE_FADE_MARQUEE) || - (chosen_desc->text.fade_ellipsis > 0.0)) - is_fade = EINA_TRUE; - - /* Enable marquee if one of marquee types is set and loop count is bigger than zero */ - if (((chosen_desc->text.ellipsize.mode == EDJE_TEXT_ELLIPSIZE_MODE_MARQUEE) || - (chosen_desc->text.ellipsize.mode == EDJE_TEXT_ELLIPSIZE_MODE_FADE_MARQUEE)) && - (chosen_desc->text.ellipsize.marquee_repeat_limit != 0)) - is_marquee = EINA_TRUE; - if (ep->part->type == EDJE_PART_TYPE_TEXTBLOCK) { evas_object_textblock_size_formatted_get(ep->object, &tw, &th); @@ -6387,6 +6403,12 @@ _edje_text_ellipsize_apply(Edje *ed, Edje_Real_Part *ep, evas_object_hide(ep->typedata.text->ellipsize.fade.mask_obj); } + if (is_marquee) + { + /* Emit a signal when text is too short to do slide. */ + _edje_emit(ed, "text,ellipsize,marquee,none", ep->part->name); + } + return; } @@ -6528,6 +6550,7 @@ _edje_text_ellipsize_apply(Edje *ed, Edje_Real_Part *ep, ep->typedata.text->ellipsize.marquee.animator_prev_time = ecore_time_get(); ep->typedata.text->ellipsize.marquee.orig_x = tx; ep->typedata.text->ellipsize.marquee.orig_y = ty; + ep->typedata.text->ellipsize.marquee.edje = ed; /* Give a latency for first loop. */ if (chosen_desc->text.ellipsize.marquee.loop_delay > 0.0) diff --git a/src/lib/edje/edje_private.h b/src/lib/edje/edje_private.h index 8ac31526..559a575 100644 --- a/src/lib/edje/edje_private.h +++ b/src/lib/edje/edje_private.h @@ -1953,6 +1953,7 @@ struct _Edje_Real_Part_Text } fade; struct { + Edje *edje; Evas_Object *proxy_obj; Ecore_Animator *animator; double animator_prev_time; -- 2.7.4