edje: send signals for ellipsize.marquee 59/141059/5
authorYoungbok Shin <youngb.shin@samsung.com>
Fri, 28 Jul 2017 03:05:08 +0000 (12:05 +0900)
committerYoungbok Shin <youngb.shin@samsung.com>
Mon, 31 Jul 2017 05:14:45 +0000 (14:14 +0900)
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
src/lib/edje/edje_private.h

index 5100ce4..bdbcc8c 100644 (file)
@@ -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)
index 8ac3152..559a575 100644 (file)
@@ -1953,6 +1953,7 @@ struct _Edje_Real_Part_Text
       } fade;
 
       struct {
+         Edje           *edje;
          Evas_Object    *proxy_obj;
          Ecore_Animator *animator;
          double          animator_prev_time;