Elm glayer: fixed zoom momentum in glayer momentum test.

Signed-off-by: Aharon Hillel <a.hillel@partner.samsung.com>

SVN revision: 66431
This commit is contained in:
Aharon Hillel 2011-12-21 08:48:22 +00:00 committed by Tom Hacohen
parent e217f07e86
commit e27515a530
1 changed files with 30 additions and 15 deletions

View File

@ -7,6 +7,7 @@
/* We zoom out to this value so we'll be able to use map and have a nice
* resolution when zooming in. */
#define BASE_ZOOM 0.8
#define MIN_ZOOM 0.4
/* The amount of zoom to do when "lifting" objects. */
#define LIFT_FACTOR 1.3
/* The base size of the shadow image. */
@ -19,10 +20,6 @@
#define ZOOM_MOMENTUM_FRICTION 8
#define TIMER_TICK 0.1
#define ROTATE_MOMENTUM_FRICTION 30
#define ZOOM_MOMENTUM_FRICTION 8
#define TIMER_TICK 0.1
struct _Photo_Object {
Evas_Object *ic, *shadow;
Evas_Object *hit;
@ -46,8 +43,9 @@ struct _Photo_Object {
* per gesture, we have to keep the current rotate/zoom factor and the
* one that was before we started the gesture. */
int base_rotate, rotate; /* base - initial angle */
double rot_momentum;
double base_zoom, zoom, zoom_dx; /* zoom_dx used for zoom-momentum */
double rot_momentum, zoom_mom;
double zoom_mom_time;
double base_zoom, zoom;
double shadow_zoom;
};
typedef struct _Photo_Object Photo_Object;
@ -132,10 +130,26 @@ apply_changes(Photo_Object *po)
/* Zoom momentum animation */
static void
zoom_momentum_animation_operation(void *_po, Elm_Transit *transit __UNUSED__,
double progress __UNUSED__)
double progress)
{
Photo_Object *po = (Photo_Object *) _po;
po->zoom += po->zoom_dx;
double time_prog = po->zoom_mom_time * progress;
double zoom_fric = ZOOM_MOMENTUM_FRICTION;
if (po->zoom_mom > 0)
zoom_fric *= -1;
/* Current = rot0 + (rotv0 * t) + (a * t^2 / 2) */
po->zoom = po->base_zoom +
((po->zoom_mom * time_prog) +
(zoom_fric * (time_prog * time_prog) / 2));
printf("%f = %f + (%f + %f)\n", po->zoom, po->base_zoom,
(po->zoom_mom * time_prog),
(zoom_fric * (time_prog * time_prog) / 2));
if (po->zoom < MIN_ZOOM)
po->zoom = MIN_ZOOM;
apply_changes(po);
}
@ -143,6 +157,7 @@ static void
zoom_momentum_animation_end(void *_po, Elm_Transit *transit __UNUSED__)
{
Photo_Object *po = (Photo_Object *) _po;
po->base_zoom = po->zoom;
po->zoom_momentum = NULL;
}
@ -337,8 +352,10 @@ zoom_end(void *_po, void *event_info)
/* Apply the zoom-momentum or zoom out animator */
double tot_time = fabs(p->momentum) / ZOOM_MOMENTUM_FRICTION;
po->zoom_dx = (p->momentum * tot_time + (ZOOM_MOMENTUM_FRICTION * tot_time * tot_time) / 2) - po->base_zoom;
if (po->zoom_dx)
po->zoom_mom_time = tot_time;
po->zoom_mom = p->momentum;
po->base_zoom = po->zoom;
if (po->zoom_mom)
{
po->zoom_momentum = elm_transit_add();
elm_transit_duration_set(po->zoom_momentum,
@ -349,7 +366,6 @@ zoom_end(void *_po, void *event_info)
elm_transit_go(po->zoom_momentum);
}
po->base_zoom = po->zoom;
return EVAS_EVENT_FLAG_NONE;
}
@ -488,7 +504,6 @@ photo_object_add(Evas_Object *parent, Evas_Object *ic, const char *icon,
elm_gesture_layer_attach(po->gl, po->hit);
/* FIXME: Add a po->rotate start so we take the first angle!!!! */
/*
elm_gesture_layer_cb_set(po->gl, ELM_GESTURE_MOMENTUM,
ELM_GESTURE_STATE_START, momentum_start, po);
elm_gesture_layer_cb_set(po->gl, ELM_GESTURE_MOMENTUM,
@ -497,7 +512,7 @@ photo_object_add(Evas_Object *parent, Evas_Object *ic, const char *icon,
ELM_GESTURE_STATE_END, momentum_end, po);
elm_gesture_layer_cb_set(po->gl, ELM_GESTURE_MOMENTUM,
ELM_GESTURE_STATE_ABORT, momentum_abort, po);
*/
elm_gesture_layer_cb_set(po->gl, ELM_GESTURE_ZOOM,
ELM_GESTURE_STATE_START, zoom_start, po);
elm_gesture_layer_cb_set(po->gl, ELM_GESTURE_ZOOM,
@ -506,7 +521,7 @@ photo_object_add(Evas_Object *parent, Evas_Object *ic, const char *icon,
ELM_GESTURE_STATE_END, zoom_end, po);
elm_gesture_layer_cb_set(po->gl, ELM_GESTURE_ZOOM,
ELM_GESTURE_STATE_ABORT, zoom_end, po);
/*
elm_gesture_layer_cb_set(po->gl, ELM_GESTURE_ROTATE,
ELM_GESTURE_STATE_START, rotate_start, po);
elm_gesture_layer_cb_set(po->gl, ELM_GESTURE_ROTATE,
@ -515,7 +530,7 @@ photo_object_add(Evas_Object *parent, Evas_Object *ic, const char *icon,
ELM_GESTURE_STATE_END, rotate_end, po);
elm_gesture_layer_cb_set(po->gl, ELM_GESTURE_ROTATE,
ELM_GESTURE_STATE_ABORT, rotate_abort, po);
*/
po->rotate = po->base_rotate = angle;
po->shadow_zoom = 1.3;