Elm: add the zoom with the mouse wheel in the photocam test.

SVN revision: 43666
This commit is contained in:
Jonathan Atton 2009-11-13 17:34:20 +00:00
parent bf12a8e8e1
commit 5b36d0ceeb
3 changed files with 79 additions and 13 deletions

View File

@ -112,7 +112,7 @@ my_map_scroll(void *data, Evas_Object *obj, void *event_info)
Evas_Object *win = data;
double lon, lat;
elm_map_geo_region_get(obj, &lat, &lon);
printf("scroll latitude : %f longitude : %f\n", lat, lon);
//printf("scroll latitude : %f longitude : %f\n", lat, lon);
}
static void

View File

@ -1,6 +1,8 @@
#include <Elementary.h>
#ifndef ELM_LIB_QUICKLAUNCH
static Evas_Object *rect;
static void
my_ph_clicked(void *data, Evas_Object *obj, void *event_info)
{
@ -201,6 +203,47 @@ my_bt_zoom_fill(void *data, Evas_Object *obj, void *event_info)
elm_photocam_zoom_mode_set(data, ELM_PHOTOCAM_ZOOM_MODE_AUTO_FILL);
}
static void
_photocam_mouse_wheel_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
Evas_Object *photocam = data;
Evas_Object *ph = data;
Evas_Event_Mouse_Wheel *ev = (Evas_Event_Mouse_Wheel*) event_info;
int zoom;
double val;
//unset the mouse wheel
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
zoom = elm_photocam_zoom_get(photocam);
if (ev->z>0 && zoom == 1) return;
if (ev->z > 0)
zoom /= 2;
else
zoom *= 2;
val = 1;
int _zoom = zoom;
while(_zoom>1)
{
_zoom /= 2;
val++;
}
elm_photocam_zoom_mode_set(photocam, ELM_PHOTOCAM_ZOOM_MODE_MANUAL);
if (zoom >= 1) elm_photocam_zoom_set(photocam, zoom);
}
static void
_photocam_move_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
int x,y,w,h;
evas_object_geometry_get(data,&x,&y,&w,&h);
evas_object_resize(rect,w,h);
evas_object_move(rect,x,y);
}
void
test_photocam(void *data, Evas_Object *obj, void *event_info)
{
@ -229,7 +272,17 @@ test_photocam(void *data, Evas_Object *obj, void *event_info)
evas_object_size_hint_weight_set(ph, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_win_resize_object_add(win, ph);
evas_object_data_set(ph, "window", win);
rect = evas_object_rectangle_add(evas_object_evas_get(win));
evas_object_color_set(rect, 0, 0, 0, 0);
evas_object_repeat_events_set(rect,1);
evas_object_show(rect);
evas_object_event_callback_add(rect, EVAS_CALLBACK_MOUSE_WHEEL, _photocam_mouse_wheel_cb, ph);
evas_object_raise(rect);
evas_object_event_callback_add(ph, EVAS_CALLBACK_RESIZE, _photocam_move_resize_cb, ph);
evas_object_event_callback_add(ph, EVAS_CALLBACK_MOVE, _photocam_move_resize_cb, ph);
evas_object_smart_callback_add(ph, "clicked", my_ph_clicked, win);
evas_object_smart_callback_add(ph, "press", my_ph_press, win);
evas_object_smart_callback_add(ph, "longpressed", my_ph_longpressed, win);

View File

@ -69,7 +69,7 @@ struct _Grid_Item
Eina_Bool want : 1;
Eina_Bool download : 1;
Eina_Bool have : 1;
Eina_Bool dead : 1; // old grid item, will die as sonn as the file is downloaded
Ecore_File_Download_Job *job;
};
struct _Grid
@ -232,13 +232,12 @@ grid_clear(Evas_Object *obj, Grid *g)
}
}
if(gi->download)
if(gi->job)
{
gi->dead = EINA_TRUE;
gi->want = EINA_FALSE;
DBG("DOWNLOAD abort %p", gi);
ecore_file_download_abort(gi->job);
}
else
free(gi);
free(gi);
}
eina_matrixsparse_free(g->grid);
g->grid = NULL;
@ -246,13 +245,25 @@ grid_clear(Evas_Object *obj, Grid *g)
g->gh = 0;
}
static int
_tile_dl_progress(void *data, const char *file,
long int dltotal, long int dlnow,
long int ultotal, long int ulnow)
{
//printf("PROGREES %s\n", file);
return 0;
}
static void
_tile_downloaded(void *data, const char *file, int status)
{
Grid_Item *gi = data;
gi->download = EINA_FALSE;
if (gi->want && !gi->dead)
gi->job = NULL;
DBG("DOWNLOAD done %p %s", gi, file);
if (gi->want)
{
gi->want = EINA_FALSE;
evas_object_image_file_set(gi->img, file, NULL);
@ -267,8 +278,6 @@ _tile_downloaded(void *data, const char *file, int status)
evas_object_smart_callback_call(gi->wd->obj, "loaded,detail", NULL);
}
}
else if (gi->dead)
free(gi);
}
static Grid *
@ -440,10 +449,10 @@ grid_load(Evas_Object *obj, Grid *g)
snprintf(buf, PATH_MAX, SOURCE_PATH,
wd->zoom, x, y);
DBG("DOWNLOAD %s \n\t in %s", buf, buf2);
if(ecore_file_exists(buf2) || g == eina_list_data_get(wd->grids))
{
DBG("DOWNLOAD %p %s \n\t in %s", gi, buf, buf2);
wd->preload_num++;
if (wd->preload_num == 1)
{
@ -455,7 +464,11 @@ grid_load(Evas_Object *obj, Grid *g)
if(ecore_file_exists(buf2))
_tile_downloaded(gi, buf2, EINA_TRUE);
else
ecore_file_download(buf, buf2, _tile_downloaded, NULL, gi);
{
ecore_file_download(buf, buf2, _tile_downloaded, _tile_dl_progress, gi, &gi->job);
if(!gi->job)
DBG("ERROR NO JOB !!!!!\n");
}
}
}
else if(gi->have)