flip: make quick sequence of "go" work.

whenever we "go" flip while flipping, we'll enter an inconsitent
state. We should detect where to flip and flip back if required.

Test: go to "Flip" test, click "1" button twice, before the first
animation ends.



SVN revision: 74359
This commit is contained in:
Gustavo Sverzut Barbieri 2012-07-24 21:39:12 +00:00
parent ef219914b3
commit e6f2ea6708
1 changed files with 12 additions and 1 deletions

View File

@ -49,6 +49,7 @@ struct _Elm_Flip_Smart_Data
Slice **slices, **slices2;
Eina_Bool state : 1;
Eina_Bool next_state : 1;
Eina_Bool down : 1;
Eina_Bool finish : 1;
Eina_Bool started : 1;
@ -1353,6 +1354,14 @@ _flip(Evas_Object *obj)
if (t >= 1.0)
{
if (sd->state == sd->next_state)
{
/* it was flipped while flipping, do it again */
sd->start = ecore_loop_time_get();
sd->state = !sd->next_state;
return ECORE_CALLBACK_RENEW;
}
sd->pageflip = EINA_FALSE;
_state_end(sd);
evas_object_map_enable_set(sd->front.content, 0);
@ -1363,7 +1372,7 @@ _flip(Evas_Object *obj)
evas_smart_objects_calculate(evas_object_evas_get(obj));
// FIXME: end hack
sd->animator = NULL;
sd->state = !sd->state;
sd->state = sd->next_state;
_configure(obj);
_flip_show_hide(obj);
evas_object_smart_callback_call(obj, SIG_ANIMATE_DONE, NULL);
@ -1869,6 +1878,7 @@ _elm_flip_smart_add(Evas_Object *obj)
evas_object_event_callback_add(obj, EVAS_CALLBACK_MOVE, _on_move, NULL);
priv->state = EINA_TRUE;
priv->next_state = EINA_TRUE;
priv->intmode = ELM_FLIP_INTERACTION_NONE;
elm_widget_can_focus_set(obj, EINA_FALSE);
@ -1951,6 +1961,7 @@ elm_flip_go(Evas_Object *obj,
sd->mode = mode;
sd->start = ecore_loop_time_get();
sd->next_state = !sd->next_state;
sd->len = 0.5; // FIXME: make config val
if ((sd->mode == ELM_FLIP_PAGE_LEFT) ||
(sd->mode == ELM_FLIP_PAGE_RIGHT) ||