Dear All. 

Here is elm_transit patches.

001_elm_transit.txt
Added elm_transit_pause, elm_transit_resume, elm_transit_progress_value_get

002_elm_transit.txt
fixed customized transit sample error. 


Check it then apply it please.

Thanks. 

Best Regards
Hermet
Index: src/lib/elm_transit.c
===================================================================
--- src/lib/elm_transit.c       (revision 56024)
+++ src/lib/elm_transit.c       (working copy)
@@ -66,6 +66,8 @@
       void *arg;
    } del_data;
    struct {
+      double delayed;
+      double paused;
       double duration;
       double begin;
       double current;
@@ -75,6 +77,7 @@
       int current;
       Eina_Bool reverse;
    } repeat;
+   double progress;
    unsigned int effects_pending_del;
    int walking;
    Eina_Bool auto_reverse : 1;
@@ -155,12 +158,13 @@
 {
    Eina_List *elist, *elist_next;
    Elm_Transit_Effect *effect;
-   
+
+   if(transit->animator)
+      ecore_animator_del(transit->animator);
+
    if (transit->del_data.func)
       transit->del_data.func(transit->del_data.arg, transit);
-   
-   ecore_animator_del(transit->animator);
-   
+
    EINA_LIST_FOREACH_SAFE(transit->effect_list, elist, elist_next, effect)
       _elm_transit_effect_del(transit, effect, elist);
    
@@ -196,38 +200,39 @@
 _animator_animate_cb(void *data)
 {
    Elm_Transit *transit = data;
-   double elapsed_time, progress;
-   
+   double elapsed_time, duration;
+
    transit->time.current = ecore_loop_time_get();
    elapsed_time = transit->time.current - transit->time.begin;
-   
-   if (elapsed_time > transit->time.duration)
-      elapsed_time = transit->time.duration;
-   
-   progress = elapsed_time / transit->time.duration;
+   duration = transit->time.duration + transit->time.delayed; 
+
+   if (elapsed_time > duration) 
+      elapsed_time = duration;
+
+   transit->progress = elapsed_time / duration;
    switch (transit->tween_mode)
      {
       case ELM_TRANSIT_TWEEN_MODE_ACCELERATE:
-        progress = 1.0 - sin((ELM_PI / 2.0) + (progress * ELM_PI / 2.0));
+        transit->progress = 1.0 - sin((ELM_PI / 2.0) + (transit->progress * 
ELM_PI / 2.0));
         break;
       case ELM_TRANSIT_TWEEN_MODE_DECELERATE:
-        progress = sin(progress * ELM_PI / 2.0);
+        transit->progress = sin(transit->progress * ELM_PI / 2.0);
         break;
       case ELM_TRANSIT_TWEEN_MODE_SINUSOIDAL:
-        progress = (1.0 - cos(progress * ELM_PI)) / 2.0;
+        transit->progress = (1.0 - cos(transit->progress * ELM_PI)) / 2.0;
         break;
       default:
         break;
      }
    
    /* Reverse? */
-   if (transit->repeat.reverse) progress = 1 - progress;
+   if (transit->repeat.reverse) transit->progress = 1 - transit->progress;
    
-   if (transit->time.duration > 0) _transit_animate_op(transit, progress);
+   if (transit->time.duration > 0) _transit_animate_op(transit, 
transit->progress);
    
    /* Not end. Keep going. */
-   if (elapsed_time < transit->time.duration) return ECORE_CALLBACK_RENEW;
-   
+   if (elapsed_time < duration) return ECORE_CALLBACK_RENEW;
+
    /* Repeat and reverse and time done! */
    if ((transit->repeat.current == transit->repeat.count)
        && (!transit->auto_reverse || transit->repeat.reverse))
@@ -794,6 +799,74 @@
    transit->animator = ecore_animator_add(_animator_animate_cb, transit);
 }
 
+/**
+ * Pause the transition. 
+ * If you call elm_transit_go again, this pause will affect no anymore. 
+ *
+ * @note @p transit can not be NULL
+ *
+ * @see elm_transit_resume()
+ *
+ * @param transit The transit object.
+ *
+ * @ingroup Transit
+ */
+EAPI void
+elm_transit_pause(Elm_Transit *transit)
+{
+   ELM_TRANSIT_CHECK_OR_RETURN(transit);
+
+   if ((!transit->animator) || (transit->time.paused > 0)) 
+      return;
+
+   ecore_animator_freeze(transit->animator);
+   transit->time.paused = ecore_loop_time_get();
+}
+
+/**
+ * Resume the transition. 
+ *
+ * @note @p transit can not be NULL
+ *
+ * @see elm_transit_pause()
+ *
+ * @param transit The transit object.
+ *
+ * @ingroup Transit
+ */
+EAPI void
+elm_transit_resume(Elm_Transit *transit)
+{
+   ELM_TRANSIT_CHECK_OR_RETURN(transit);
+
+   if ((!transit->animator) || (transit->time.paused == 0)) 
+      return;
+
+   ecore_animator_thaw(transit->animator);
+   transit->time.delayed += (ecore_loop_time_get() - transit->time.paused); 
+   transit->time.paused = 0;
+}
+
+/**
+ * Get the time progression of the animation (a double value between 0.0 and 
1.0).
+ * If the transit is not running, it will return -1.
+ *
+ * @note @p transit can not be NULL
+ *
+ * @param transit The transit object.
+ *
+ * @return The time progression value.
+ *
+ * @ingroup Transit
+ */
+EAPI double
+elm_transit_progress_value_get(Elm_Transit *transit)
+{
+   ELM_TRANSIT_CHECK_OR_RETURN(transit);
+   
+   return transit->progress;
+}
+
 ///////////////////////////////////////////////////////////////////////////////
 //Resizing FX
 ///////////////////////////////////////////////////////////////////////////////
Index: src/lib/Elementary.h.in
===================================================================
--- src/lib/Elementary.h.in     (revision 56024)
+++ src/lib/Elementary.h.in     (working copy)
@@ -2502,6 +2502,9 @@
    EAPI void                   elm_transit_duration_set(Elm_Transit *transit, 
double duration) EINA_ARG_NONNULL(1); 
    EAPI double                 elm_transit_duration_get(const Elm_Transit 
*transit) EINA_ARG_NONNULL(1);
    EAPI void                   elm_transit_go(Elm_Transit *transit) 
EINA_ARG_NONNULL(1);
+   EAPI void                   elm_transit_pause(Elm_Transit *transit) 
EINA_ARG_NONNULL(1);
+   EAPI void                   elm_transit_resume(Elm_Transit *transit) 
EINA_ARG_NONNULL(1);
+   EAPI double                 elm_transit_progress_value_get(Elm_Transit 
*transit) EINA_ARG_NONNULL(1);
 
    EAPI void                  *elm_transit_effect_resizing_add(Elm_Transit* 
transit, Evas_Coord from_w, Evas_Coord from_h, Evas_Coord to_w, Evas_Coord 
to_h);
    EAPI void                  *elm_transit_effect_translation_add(Elm_Transit* 
transit, Evas_Coord from_dx, Evas_Coord dy, Evas_Coord to_dx, Evas_Coord to_dy);
Index: src/bin/test_transit.c
===================================================================
--- src/bin/test_transit.c      (revision 56024)
+++ src/bin/test_transit.c      (working copy)
@@ -505,7 +505,7 @@
    evas_object_show(win);
 
    /* Adding Transit */
-   trans = elm_transit_add(5.0);
+   trans = elm_transit_add();
    elm_transit_auto_reverse_set(trans, EINA_TRUE);
    elm_transit_tween_mode_set(trans, ELM_TRANSIT_TWEEN_MODE_DECELERATE);
    elm_transit_repeat_times_set(trans, -1);
@@ -514,6 +514,8 @@
    elm_transit_effect_add(trans,
                           _custom_op, effect_context,
                           _custom_context_free);
+   elm_transit_duration_set(trans, 5.0);
+   elm_transit_go(trans);
 }
 
 #endif
------------------------------------------------------------------------------
Gaining the trust of online customers is vital for the success of any company
that requires sensitive data to be transmitted over the Web.   Learn how to 
best implement a security strategy that keeps consumers' information secure 
and instills the confidence they need to proceed with transactions.
http://p.sf.net/sfu/oracle-sfdevnl 
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to