From: Bluezery <ohpowel@gmail.com>

Subject: [E-devel] [E-Devel][Patch][Elementary]Map: Remove delayed job

This patch removes delayed jobs in elm_map.
Previously delayed job is used for queuing the zooming & zoom mode
changing & overlay_showing API requests. Queued jobs are all executed
when pan is calculated.
But actually queued jobs are not needed to be  executed. Just last
jobs are needed to be executed per pan calculation.
So I removed delayed jobs and fill calc job functions to be executed
while calculation is executed.



SVN revision: 79269
This commit is contained in:
Bluezery 2012-11-14 07:10:24 +00:00 committed by Carsten Haitzler
parent af3ceeccfd
commit c1db5c3bd2
2 changed files with 249 additions and 289 deletions

View File

@ -537,24 +537,6 @@ _canvas_to_coord(Elm_Map_Smart_Data *sd,
if (yy) *yy = y; if (yy) *yy = y;
} }
static void
_region_show(void *data)
{
Delayed_Data *dd = data;
int x, y, w, h;
EINA_SAFETY_ON_NULL_RETURN(data);
_region_to_coord_convert
(dd->wsd, dd->lon, dd->lat, dd->wsd->size.w, &x, &y);
_viewport_coord_get(dd->wsd, NULL, NULL, &w, &h);
x = x - (w / 2);
y = y - (h / 2);
dd->wsd->s_iface->content_region_show
(ELM_WIDGET_DATA(dd->wsd)->obj, x, y, w, h);
evas_object_smart_changed(dd->wsd->pan_obj);
}
static void static void
_grid_item_coord_get(Grid_Item *gi, _grid_item_coord_get(Grid_Item *gi,
int *x, int *x,
@ -1021,16 +1003,23 @@ _track_place(Elm_Map_Smart_Data *sd)
} }
static void static void
_delayed_do(Elm_Map_Smart_Data *sd) _calc_job(Elm_Map_Smart_Data *sd)
{ {
Delayed_Data *dd; if (sd->calc_job.region_show_bring_in)
dd = eina_list_nth(sd->delayed_jobs, 0);
if (dd && !dd->wsd->zoom_animator)
{ {
dd->func(dd); sd->calc_job.region_show_bring_in
sd->delayed_jobs = eina_list_remove(sd->delayed_jobs, dd); (sd, sd->calc_job.lon, sd->calc_job.lat, sd->calc_job.bring_in);
free(dd); sd->calc_job.region_show_bring_in = NULL;
}
if (sd->calc_job.zoom_mode_set)
{
sd->calc_job.zoom_mode_set(sd, sd->calc_job.zoom);
sd->calc_job.zoom_mode_set = NULL;
}
if (sd->calc_job.overlays_show)
{
sd->calc_job.overlays_show(sd, sd->calc_job.overlays);
sd->calc_job.overlays_show = NULL;
} }
} }
@ -2628,172 +2617,6 @@ _overlay_obj_get(const Elm_Map_Overlay *overlay)
} }
} }
static void
_overlays_show(void *data)
{
double max_lon, min_lon, max_lat, min_lat;
Delayed_Data *dd = data;
int zoom, zoom_max;
Evas_Coord vw, vh;
EINA_SAFETY_ON_NULL_RETURN(data);
_region_max_min_get(dd->overlays, &max_lon, &min_lon, &max_lat, &min_lat);
dd->lon = (max_lon + min_lon) / 2;
dd->lat = (max_lat + min_lat) / 2;
zoom = dd->wsd->src_tile->zoom_min;
_viewport_coord_get(dd->wsd, NULL, NULL, &vw, &vh);
if (dd->wsd->src_tile->zoom_max < dd->wsd->zoom_max)
zoom_max = dd->wsd->src_tile->zoom_max;
else zoom_max = dd->wsd->zoom_max;
while (zoom <= zoom_max)
{
Evas_Coord size, max_x, max_y, min_x, min_y;
size = pow(2.0, zoom) * dd->wsd->tsize;
_region_to_coord_convert
(dd->wsd, min_lon, max_lat, size, &min_x, &max_y);
_region_to_coord_convert
(dd->wsd, max_lon, min_lat, size, &max_x, &min_y);
if ((max_x - min_x) > vw || (max_y - min_y) > vh) break;
zoom++;
}
zoom--;
_zoom_do(dd->wsd, zoom);
_region_show(dd);
evas_object_smart_changed(dd->wsd->pan_obj);
}
static void
_elm_map_pan_smart_pos_set(Evas_Object *obj,
Evas_Coord x,
Evas_Coord y)
{
ELM_MAP_PAN_DATA_GET(obj, psd);
if ((x == psd->wsd->pan_x) && (y == psd->wsd->pan_y)) return;
psd->wsd->pan_x = x;
psd->wsd->pan_y = y;
evas_object_smart_changed(obj);
}
static void
_elm_map_pan_smart_pos_get(const Evas_Object *obj,
Evas_Coord *x,
Evas_Coord *y)
{
ELM_MAP_PAN_DATA_GET(obj, psd);
if (x) *x = psd->wsd->pan_x;
if (y) *y = psd->wsd->pan_y;
}
static void
_elm_map_pan_smart_pos_max_get(const Evas_Object *obj,
Evas_Coord *x,
Evas_Coord *y)
{
Evas_Coord ow, oh;
ELM_MAP_PAN_DATA_GET(obj, psd);
evas_object_geometry_get(obj, NULL, NULL, &ow, &oh);
ow = psd->wsd->size.w - ow;
oh = psd->wsd->size.h - oh;
if (ow < 0) ow = 0;
if (oh < 0) oh = 0;
if (x) *x = ow;
if (y) *y = oh;
}
static void
_elm_map_pan_smart_pos_min_get(const Evas_Object *obj __UNUSED__,
Evas_Coord *x,
Evas_Coord *y)
{
if (x) *x = 0;
if (y) *y = 0;
}
static void
_elm_map_pan_smart_content_size_get(const Evas_Object *obj,
Evas_Coord *w,
Evas_Coord *h)
{
ELM_MAP_PAN_DATA_GET(obj, psd);
if (w) *w = psd->wsd->size.w;
if (h) *h = psd->wsd->size.h;
}
static void
_elm_map_pan_smart_add(Evas_Object *obj)
{
/* here just to allocate our extended data */
EVAS_SMART_DATA_ALLOC(obj, Elm_Map_Pan_Smart_Data);
ELM_PAN_CLASS(_elm_map_pan_parent_sc)->base.add(obj);
}
static void
_elm_map_pan_smart_resize(Evas_Object *obj,
Evas_Coord w __UNUSED__,
Evas_Coord h __UNUSED__)
{
ELM_MAP_PAN_DATA_GET(obj, psd);
_sizing_eval(psd->wsd);
elm_map_zoom_mode_set(ELM_WIDGET_DATA(psd->wsd)->obj, psd->wsd->mode);
evas_object_smart_changed(obj);
}
static void
_elm_map_pan_smart_calculate(Evas_Object *obj)
{
Evas_Coord w, h;
ELM_MAP_PAN_DATA_GET(obj, psd);
evas_object_geometry_get(obj, NULL, NULL, &w, &h);
if (w <= 0 || h <= 0) return;
_grid_place(psd->wsd);
_overlay_place(psd->wsd);
_track_place(psd->wsd);
_delayed_do(psd->wsd);
}
static void
_elm_map_pan_smart_move(Evas_Object *obj,
Evas_Coord x __UNUSED__,
Evas_Coord y __UNUSED__)
{
EINA_SAFETY_ON_NULL_RETURN(obj);
evas_object_smart_changed(obj);
}
static void
_elm_map_pan_smart_set_user(Elm_Map_Pan_Smart_Class *sc)
{
ELM_PAN_CLASS(sc)->base.add = _elm_map_pan_smart_add;
ELM_PAN_CLASS(sc)->base.move = _elm_map_pan_smart_move;
ELM_PAN_CLASS(sc)->base.resize = _elm_map_pan_smart_resize;
ELM_PAN_CLASS(sc)->base.calculate = _elm_map_pan_smart_calculate;
ELM_PAN_CLASS(sc)->pos_set = _elm_map_pan_smart_pos_set;
ELM_PAN_CLASS(sc)->pos_get = _elm_map_pan_smart_pos_get;
ELM_PAN_CLASS(sc)->pos_max_get = _elm_map_pan_smart_pos_max_get;
ELM_PAN_CLASS(sc)->pos_min_get = _elm_map_pan_smart_pos_min_get;
ELM_PAN_CLASS(sc)->content_size_get =
_elm_map_pan_smart_content_size_get;
}
static Eina_Bool static Eina_Bool
_xml_name_attrs_dump_cb(void *data, _xml_name_attrs_dump_cb(void *data,
const char *key, const char *key,
@ -3720,26 +3543,26 @@ _source_all_load(Elm_Map_Smart_Data *sd)
} }
static void static void
_zoom_mode_set(void *data) _zoom_mode_set(Elm_Map_Smart_Data *sd, double zoom)
{ {
Delayed_Data *dd = data; EINA_SAFETY_ON_NULL_RETURN(sd);
EINA_SAFETY_ON_NULL_RETURN(data); if (sd->mode == ELM_MAP_ZOOM_MODE_MANUAL)
{
dd->wsd->mode = dd->mode; if (sd->paused) _zoom_do(sd, zoom);
if (dd->mode != ELM_MAP_ZOOM_MODE_MANUAL) else _zoom_with_animation(sd, zoom, 10);
}
else
{ {
double zoom;
double diff; double diff;
Evas_Coord w, h; Evas_Coord w, h;
Evas_Coord vw, vh; Evas_Coord vw, vh;
w = dd->wsd->size.w; w = sd->size.w;
h = dd->wsd->size.h; h = sd->size.h;
zoom = dd->wsd->zoom_detail; _viewport_coord_get(sd, NULL, NULL, &vw, &vh);
_viewport_coord_get(dd->wsd, NULL, NULL, &vw, &vh);
if (dd->mode == ELM_MAP_ZOOM_MODE_AUTO_FIT) if (sd->mode == ELM_MAP_ZOOM_MODE_AUTO_FIT)
{ {
if ((w < vw) && (h < vh)) if ((w < vw) && (h < vh))
{ {
@ -3747,8 +3570,8 @@ _zoom_mode_set(void *data)
while ((w < vw) && (h < vh)) while ((w < vw) && (h < vh))
{ {
zoom += diff; zoom += diff;
w = pow(2.0, zoom) * dd->wsd->tsize; w = pow(2.0, zoom) * sd->tsize;
h = pow(2.0, zoom) * dd->wsd->tsize; h = pow(2.0, zoom) * sd->tsize;
} }
} }
else else
@ -3757,12 +3580,12 @@ _zoom_mode_set(void *data)
while ((w > vw) || (h > vh)) while ((w > vw) || (h > vh))
{ {
zoom += diff; zoom += diff;
w = pow(2.0, zoom) * dd->wsd->tsize; w = pow(2.0, zoom) * sd->tsize;
h = pow(2.0, zoom) * dd->wsd->tsize; h = pow(2.0, zoom) * sd->tsize;
} }
} }
} }
else if (dd->mode == ELM_MAP_ZOOM_MODE_AUTO_FILL) else if (sd->mode == ELM_MAP_ZOOM_MODE_AUTO_FILL)
{ {
if ((w < vw) || (h < vh)) if ((w < vw) || (h < vh))
{ {
@ -3770,8 +3593,8 @@ _zoom_mode_set(void *data)
while ((w < vw) || (h < vh)) while ((w < vw) || (h < vh))
{ {
zoom += diff; zoom += diff;
w = pow(2.0, zoom) * dd->wsd->tsize; w = pow(2.0, zoom) * sd->tsize;
h = pow(2.0, zoom) * dd->wsd->tsize; h = pow(2.0, zoom) * sd->tsize;
} }
} }
else else
@ -3780,46 +3603,198 @@ _zoom_mode_set(void *data)
while ((w > vw) && (h > vh)) while ((w > vw) && (h > vh))
{ {
zoom += diff; zoom += diff;
w = pow(2.0, zoom) * dd->wsd->tsize; w = pow(2.0, zoom) * sd->tsize;
h = pow(2.0, zoom) * dd->wsd->tsize; h = pow(2.0, zoom) * sd->tsize;
} }
} }
} }
_zoom_do(dd->wsd, zoom); _zoom_do(sd, zoom);
} }
} }
static void static void
_zoom_set(void *data) _region_show_bring_in(Elm_Map_Smart_Data *wsd, double lon, double lat, Eina_Bool bring_in)
{ {
Delayed_Data *dd = data; int x, y, w, h;
EINA_SAFETY_ON_NULL_RETURN(data); EINA_SAFETY_ON_NULL_RETURN(wsd);
if (dd->wsd->paused) _zoom_do(dd->wsd, dd->zoom); _region_to_coord_convert
else _zoom_with_animation(dd->wsd, dd->zoom, 10); (wsd, lon, lat, wsd->size.w, &x, &y);
_viewport_coord_get(wsd, NULL, NULL, &w, &h);
x = x - (w / 2);
y = y - (h / 2);
evas_object_smart_changed(dd->wsd->pan_obj); if (bring_in) wsd->s_iface->region_bring_in(ELM_WIDGET_DATA(wsd)->obj, x, y, w, h);
else wsd->s_iface->content_region_show(ELM_WIDGET_DATA(wsd)->obj, x, y, w, h);
} }
static void static void
_region_bring_in(void *data) _overlays_show(Elm_Map_Smart_Data *sd, Eina_List *overlays)
{ {
Delayed_Data *dd = data; double max_lon, min_lon, max_lat, min_lat, lon, lat;
int x, y, w, h; int zoom, zoom_max;
Evas_Coord vw, vh;
EINA_SAFETY_ON_NULL_RETURN(data); EINA_SAFETY_ON_NULL_RETURN(sd);
EINA_SAFETY_ON_NULL_RETURN(overlays);
_region_to_coord_convert _region_max_min_get(overlays, &max_lon, &min_lon, &max_lat, &min_lat);
(dd->wsd, dd->lon, dd->lat, dd->wsd->size.w, &x, &y); lon = (max_lon + min_lon) / 2;
_viewport_coord_get(dd->wsd, NULL, NULL, &w, &h); lat = (max_lat + min_lat) / 2;
x = x - (w / 2);
y = y - (h / 2); zoom = sd->src_tile->zoom_min;
dd->wsd->s_iface->region_bring_in _viewport_coord_get(sd, NULL, NULL, &vw, &vh);
(ELM_WIDGET_DATA(dd->wsd)->obj, x, y, w, h); if (sd->src_tile->zoom_max < sd->zoom_max)
evas_object_smart_changed(dd->wsd->pan_obj); zoom_max = sd->src_tile->zoom_max;
else zoom_max = sd->zoom_max;
while (zoom <= zoom_max)
{
Evas_Coord size, max_x, max_y, min_x, min_y;
size = pow(2.0, zoom) * sd->tsize;
_region_to_coord_convert
(sd, min_lon, max_lat, size, &min_x, &max_y);
_region_to_coord_convert
(sd, max_lon, min_lat, size, &max_x, &min_y);
if ((max_x - min_x) > vw || (max_y - min_y) > vh) break;
zoom++;
}
zoom--;
_zoom_do(sd, zoom);
_region_show_bring_in(sd, lon, lat, EINA_FALSE);
} }
static void
_elm_map_pan_smart_pos_set(Evas_Object *obj,
Evas_Coord x,
Evas_Coord y)
{
ELM_MAP_PAN_DATA_GET(obj, psd);
if ((x == psd->wsd->pan_x) && (y == psd->wsd->pan_y)) return;
psd->wsd->pan_x = x;
psd->wsd->pan_y = y;
evas_object_smart_changed(obj);
}
static void
_elm_map_pan_smart_pos_get(const Evas_Object *obj,
Evas_Coord *x,
Evas_Coord *y)
{
ELM_MAP_PAN_DATA_GET(obj, psd);
if (x) *x = psd->wsd->pan_x;
if (y) *y = psd->wsd->pan_y;
}
static void
_elm_map_pan_smart_pos_max_get(const Evas_Object *obj,
Evas_Coord *x,
Evas_Coord *y)
{
Evas_Coord ow, oh;
ELM_MAP_PAN_DATA_GET(obj, psd);
evas_object_geometry_get(obj, NULL, NULL, &ow, &oh);
ow = psd->wsd->size.w - ow;
oh = psd->wsd->size.h - oh;
if (ow < 0) ow = 0;
if (oh < 0) oh = 0;
if (x) *x = ow;
if (y) *y = oh;
}
static void
_elm_map_pan_smart_pos_min_get(const Evas_Object *obj __UNUSED__,
Evas_Coord *x,
Evas_Coord *y)
{
if (x) *x = 0;
if (y) *y = 0;
}
static void
_elm_map_pan_smart_content_size_get(const Evas_Object *obj,
Evas_Coord *w,
Evas_Coord *h)
{
ELM_MAP_PAN_DATA_GET(obj, psd);
if (w) *w = psd->wsd->size.w;
if (h) *h = psd->wsd->size.h;
}
static void
_elm_map_pan_smart_add(Evas_Object *obj)
{
/* here just to allocate our extended data */
EVAS_SMART_DATA_ALLOC(obj, Elm_Map_Pan_Smart_Data);
ELM_PAN_CLASS(_elm_map_pan_parent_sc)->base.add(obj);
}
static void
_elm_map_pan_smart_resize(Evas_Object *obj,
Evas_Coord w __UNUSED__,
Evas_Coord h __UNUSED__)
{
ELM_MAP_PAN_DATA_GET(obj, psd);
_sizing_eval(psd->wsd);
elm_map_zoom_mode_set(ELM_WIDGET_DATA(psd->wsd)->obj, psd->wsd->mode);
evas_object_smart_changed(obj);
}
static void
_elm_map_pan_smart_calculate(Evas_Object *obj)
{
Evas_Coord w, h;
ELM_MAP_PAN_DATA_GET(obj, psd);
evas_object_geometry_get(obj, NULL, NULL, &w, &h);
if (w <= 0 || h <= 0) return;
_grid_place(psd->wsd);
_overlay_place(psd->wsd);
_track_place(psd->wsd);
_calc_job(psd->wsd);
}
static void
_elm_map_pan_smart_move(Evas_Object *obj,
Evas_Coord x __UNUSED__,
Evas_Coord y __UNUSED__)
{
EINA_SAFETY_ON_NULL_RETURN(obj);
evas_object_smart_changed(obj);
}
static void
_elm_map_pan_smart_set_user(Elm_Map_Pan_Smart_Class *sc)
{
ELM_PAN_CLASS(sc)->base.add = _elm_map_pan_smart_add;
ELM_PAN_CLASS(sc)->base.move = _elm_map_pan_smart_move;
ELM_PAN_CLASS(sc)->base.resize = _elm_map_pan_smart_resize;
ELM_PAN_CLASS(sc)->base.calculate = _elm_map_pan_smart_calculate;
ELM_PAN_CLASS(sc)->pos_set = _elm_map_pan_smart_pos_set;
ELM_PAN_CLASS(sc)->pos_get = _elm_map_pan_smart_pos_get;
ELM_PAN_CLASS(sc)->pos_max_get = _elm_map_pan_smart_pos_max_get;
ELM_PAN_CLASS(sc)->pos_min_get = _elm_map_pan_smart_pos_min_get;
ELM_PAN_CLASS(sc)->content_size_get =
_elm_map_pan_smart_content_size_get;
}
static Eina_Bool static Eina_Bool
_elm_map_smart_on_focus(Evas_Object *obj) _elm_map_smart_on_focus(Evas_Object *obj)
{ {
@ -4045,7 +4020,6 @@ _elm_map_smart_del(Evas_Object *obj)
{ {
Elm_Map_Route *r; Elm_Map_Route *r;
Elm_Map_Name *na; Elm_Map_Name *na;
Delayed_Data *dd;
Eina_List *l, *ll; Eina_List *l, *ll;
Evas_Object *track; Evas_Object *track;
Elm_Map_Overlay *overlay; Elm_Map_Overlay *overlay;
@ -4075,10 +4049,6 @@ _elm_map_smart_del(Evas_Object *obj)
if (sd->scr_timer) ecore_timer_del(sd->scr_timer); if (sd->scr_timer) ecore_timer_del(sd->scr_timer);
if (sd->long_timer) ecore_timer_del(sd->long_timer); if (sd->long_timer) ecore_timer_del(sd->long_timer);
if (sd->delayed_jobs)
EINA_LIST_FREE (sd->delayed_jobs, dd)
free(dd);
if (sd->user_agent) eina_stringshare_del(sd->user_agent); if (sd->user_agent) eina_stringshare_del(sd->user_agent);
if (sd->ua) eina_hash_free(sd->ua); if (sd->ua) eina_hash_free(sd->ua);
@ -4216,7 +4186,6 @@ elm_map_zoom_set(Evas_Object *obj,
int zoom) int zoom)
{ {
#ifdef HAVE_ELEMENTARY_ECORE_CON #ifdef HAVE_ELEMENTARY_ECORE_CON
Delayed_Data *data;
ELM_MAP_CHECK(obj); ELM_MAP_CHECK(obj);
ELM_MAP_DATA_GET(obj, sd); ELM_MAP_DATA_GET(obj, sd);
@ -4226,12 +4195,10 @@ elm_map_zoom_set(Evas_Object *obj,
if (zoom < 0) zoom = 0; if (zoom < 0) zoom = 0;
if (sd->zoom == zoom) return; if (sd->zoom == zoom) return;
data = ELM_NEW(Delayed_Data); sd->calc_job.zoom = zoom;
data->func = _zoom_set; sd->calc_job.zoom_mode_set = _zoom_mode_set;
data->wsd = sd;
data->zoom = zoom; evas_object_smart_changed(sd->pan_obj);
data->wsd->delayed_jobs = eina_list_append(data->wsd->delayed_jobs, data);
evas_object_smart_changed(data->wsd->pan_obj);
#else #else
(void)obj; (void)obj;
(void)zoom; (void)zoom;
@ -4257,19 +4224,16 @@ elm_map_zoom_mode_set(Evas_Object *obj,
Elm_Map_Zoom_Mode mode) Elm_Map_Zoom_Mode mode)
{ {
#ifdef HAVE_ELEMENTARY_ECORE_CON #ifdef HAVE_ELEMENTARY_ECORE_CON
Delayed_Data *data;
ELM_MAP_CHECK(obj); ELM_MAP_CHECK(obj);
ELM_MAP_DATA_GET(obj, sd); ELM_MAP_DATA_GET(obj, sd);
if ((mode == ELM_MAP_ZOOM_MODE_MANUAL) && (sd->mode == !!mode)) return; if ((mode == ELM_MAP_ZOOM_MODE_MANUAL) && (sd->mode == !!mode)) return;
data = ELM_NEW(Delayed_Data); sd->mode = mode;
data->mode = mode; sd->calc_job.zoom = sd->zoom_detail;
data->func = _zoom_mode_set; sd->calc_job.zoom_mode_set = _zoom_mode_set;
data->wsd = sd;
data->wsd->delayed_jobs = eina_list_append(data->wsd->delayed_jobs, data); evas_object_smart_changed(sd->pan_obj);
evas_object_smart_changed(data->wsd->pan_obj);
#else #else
(void)obj; (void)obj;
(void)mode; (void)mode;
@ -4358,18 +4322,15 @@ elm_map_region_bring_in(Evas_Object *obj,
double lat) double lat)
{ {
#ifdef HAVE_ELEMENTARY_ECORE_CON #ifdef HAVE_ELEMENTARY_ECORE_CON
Delayed_Data *data;
ELM_MAP_CHECK(obj); ELM_MAP_CHECK(obj);
ELM_MAP_DATA_GET(obj, sd); ELM_MAP_DATA_GET(obj, sd);
data = ELM_NEW(Delayed_Data); sd->calc_job.bring_in = EINA_TRUE;
data->func = _region_bring_in; sd->calc_job.lon = lon;
data->wsd = sd; sd->calc_job.lat = lat;
data->lon = lon; sd->calc_job.region_show_bring_in = _region_show_bring_in;
data->lat = lat;
data->wsd->delayed_jobs = eina_list_append(data->wsd->delayed_jobs, data); evas_object_smart_changed(sd->pan_obj);
evas_object_smart_changed(data->wsd->pan_obj);
#else #else
(void)obj; (void)obj;
(void)lon; (void)lon;
@ -4383,18 +4344,15 @@ elm_map_region_show(Evas_Object *obj,
double lat) double lat)
{ {
#ifdef HAVE_ELEMENTARY_ECORE_CON #ifdef HAVE_ELEMENTARY_ECORE_CON
Delayed_Data *data;
ELM_MAP_CHECK(obj); ELM_MAP_CHECK(obj);
ELM_MAP_DATA_GET(obj, sd); ELM_MAP_DATA_GET(obj, sd);
data = ELM_NEW(Delayed_Data); sd->calc_job.bring_in = EINA_FALSE;
data->func = _region_show; sd->calc_job.lon = lon;
data->wsd = sd; sd->calc_job.lat = lat;
data->lon = lon; sd->calc_job.region_show_bring_in = _region_show_bring_in;
data->lat = lat;
data->wsd->delayed_jobs = eina_list_append(data->wsd->delayed_jobs, data); evas_object_smart_changed(sd->pan_obj);
evas_object_smart_changed(data->wsd->pan_obj);
#else #else
(void)obj; (void)obj;
(void)lon; (void)lon;
@ -5310,7 +5268,6 @@ EAPI void
elm_map_overlays_show(Eina_List *overlays) elm_map_overlays_show(Eina_List *overlays)
{ {
#ifdef HAVE_ELEMENTARY_ECORE_CON #ifdef HAVE_ELEMENTARY_ECORE_CON
Delayed_Data *data;
Elm_Map_Overlay *overlay; Elm_Map_Overlay *overlay;
EINA_SAFETY_ON_NULL_RETURN(overlays); EINA_SAFETY_ON_NULL_RETURN(overlays);
@ -5318,12 +5275,10 @@ elm_map_overlays_show(Eina_List *overlays)
overlay = eina_list_data_get(overlays); overlay = eina_list_data_get(overlays);
data = ELM_NEW(Delayed_Data); overlay->wsd->calc_job.overlays = overlays;
data->func = _overlays_show; overlay->wsd->calc_job.overlays_show = _overlays_show;
data->wsd = overlay->wsd;
data->overlays = eina_list_clone(overlays); evas_object_smart_changed(overlay->wsd->pan_obj);
data->wsd->delayed_jobs = eina_list_append(data->wsd->delayed_jobs, data);
evas_object_smart_changed(data->wsd->pan_obj);
#else #else
(void)overlays; (void)overlays;
#endif #endif

View File

@ -204,7 +204,7 @@ typedef struct _Path_Node Path_Node;
typedef struct _Path_Waypoint Path_Waypoint; typedef struct _Path_Waypoint Path_Waypoint;
typedef struct _Route_Dump Route_Dump; typedef struct _Route_Dump Route_Dump;
typedef struct _Name_Dump Name_Dump; typedef struct _Name_Dump Name_Dump;
typedef struct _Delayed_Data Delayed_Data; typedef struct _Calc_Job Calc_Job;
enum _Route_Xml_Attribute enum _Route_Xml_Attribute
{ {
@ -241,16 +241,6 @@ struct _Region
double lon, lat; double lon, lat;
}; };
struct _Delayed_Data
{
void (*func)(void *data);
Elm_Map_Smart_Data *wsd;
Elm_Map_Zoom_Mode mode;
int zoom;
double lon, lat;
Eina_List *overlays;
};
struct _Color struct _Color
{ {
int r, g, b, a; int r, g, b, a;
@ -484,6 +474,20 @@ struct _Grid
Eina_Matrixsparse *grid; Eina_Matrixsparse *grid;
}; };
struct _Calc_Job
{
double zoom;
void (*zoom_mode_set)(Elm_Map_Smart_Data *sd, double zoom);
Eina_Bool bring_in : 1;
double lon, lat;
void (*region_show_bring_in)(Elm_Map_Smart_Data *sd, double lon,
double lat, Eina_Bool bring_in);
Eina_List *overlays;
void (*overlays_show)(Elm_Map_Smart_Data *sd, Eina_List *overlays);
};
struct _Elm_Map_Smart_Data struct _Elm_Map_Smart_Data
{ {
Elm_Widget_Smart_Data base; /* base widget smart data as Elm_Widget_Smart_Data base; /* base widget smart data as
@ -550,7 +554,6 @@ struct _Elm_Map_Smart_Data
const char *user_agent; const char *user_agent;
Evas_Coord pan_x, pan_y; Evas_Coord pan_x, pan_y;
Eina_List *delayed_jobs;
Ecore_Timer *scr_timer; Ecore_Timer *scr_timer;
Ecore_Timer *long_timer; Ecore_Timer *long_timer;
@ -574,6 +577,8 @@ struct _Elm_Map_Smart_Data
Eina_Bool wheel_disabled : 1; Eina_Bool wheel_disabled : 1;
Eina_Bool on_hold : 1; Eina_Bool on_hold : 1;
Eina_Bool paused : 1; Eina_Bool paused : 1;
Calc_Job calc_job;
}; };
typedef struct _Elm_Map_Pan_Smart_Class typedef struct _Elm_Map_Pan_Smart_Class