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
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel