elementary transit: fix wrong pausing time calculation.

Summary:
the logic of computation of pausing time was incorrect.
even it didn't take care of revert_mode at all.

delayed time must be subtracted from elapsed time.

@fix

Reviewers: #committers

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D7201
This commit is contained in:
Hermet Park 2018-11-05 14:22:12 +09:00
parent 98149c4c2b
commit ad567a15a2
1 changed files with 37 additions and 13 deletions

View File

@ -50,6 +50,8 @@ struct _Elm_Transit
double current;
double revert_start;
double revert_elapsed;
double revert_paused;
double revert_delayed;
} time;
struct
{
@ -334,12 +336,14 @@ _transit_animate_cb(void *data)
double elapsed_time, duration, revert_progress;
transit->time.current = ecore_loop_time_get();
elapsed_time = transit->time.current - transit->time.begin - 2 * transit->total_revert_time;
duration = transit->time.duration + transit->time.delayed;
elapsed_time = (transit->time.current - transit->time.begin - transit->time.delayed)
- (2 * transit->total_revert_time);
duration = transit->time.duration;
if (elapsed_time > duration)
elapsed_time = duration;
transit->progress = elapsed_time / duration;
if (transit->revert_mode && transit->revert_begin_progress == 0)
{
transit->revert_begin_progress = transit->progress;
@ -348,7 +352,8 @@ _transit_animate_cb(void *data)
if (transit->revert_mode)
{
transit->time.revert_elapsed = transit->time.current - transit->time.revert_start;
transit->time.revert_elapsed =
(transit->time.current - transit->time.revert_start - transit->time.revert_delayed);
revert_progress = transit->time.revert_elapsed / duration;
transit->progress = transit->revert_begin_progress - revert_progress;
}
@ -405,7 +410,7 @@ _transit_animate_cb(void *data)
/* Reverse? */
if (transit->repeat.reverse) transit->progress = 1 - transit->progress;
if (transit->time.duration > 0)
if (duration > 0)
{
if (!_transit_animate_op(transit, transit->progress))
return ECORE_CALLBACK_CANCEL;
@ -415,6 +420,7 @@ _transit_animate_cb(void *data)
{
transit->revert_mode = EINA_FALSE;
transit->time.begin = ecore_loop_time_get();
transit->time.revert_delayed = 0;
transit->total_revert_time = 0;
if ((transit->repeat.count >= 0) &&
(transit->repeat.current == transit->repeat.count) &&
@ -450,6 +456,7 @@ _transit_animate_cb(void *data)
else transit->repeat.reverse = EINA_TRUE;
transit->time.begin = ecore_loop_time_get();
transit->time.delayed = 0;
transit->total_revert_time = 0;
return ECORE_CALLBACK_RENEW;
@ -561,7 +568,6 @@ elm_transit_add(void)
transit->v[0] = 1.0;
transit->v[1] = 0.0;
transit->revert_mode = EINA_FALSE;
transit->smooth = EINA_TRUE;
return transit;
@ -863,6 +869,8 @@ elm_transit_go(Elm_Transit *transit)
transit->time.paused = 0;
transit->time.delayed = 0;
transit->time.revert_paused = 0;
transit->time.revert_delayed = 0;
transit->total_revert_time = 0;
transit->revert_mode = EINA_FALSE;
transit->time.begin = ecore_loop_time_get();
@ -894,18 +902,34 @@ elm_transit_paused_set(Elm_Transit *transit, Eina_Bool paused)
if (paused)
{
if (transit->time.paused > 0)
return;
if (transit->revert_mode)
{
if (transit->time.revert_paused > 0)return;
transit->time.revert_paused = ecore_loop_time_get();
}
else
{
if (transit->time.paused > 0)return;
transit->time.paused = ecore_loop_time_get();
}
ecore_animator_freeze(transit->animator);
transit->time.paused = ecore_loop_time_get();
}
else
{
if (transit->time.paused == 0)
return;
ecore_animator_thaw(transit->animator);
transit->time.delayed += (ecore_loop_time_get() - transit->time.paused);
transit->time.paused = 0;
if (transit->revert_mode)
{
if (transit->time.revert_paused == 0) return;
ecore_animator_thaw(transit->animator);
transit->time.revert_delayed += (ecore_loop_time_get() - transit->time.revert_paused);
transit->time.revert_paused = 0;
}
else
{
if (transit->time.paused == 0) return;
ecore_animator_thaw(transit->animator);
transit->time.delayed += (ecore_loop_time_get() - transit->time.paused);
transit->time.paused = 0;
}
}
}