From 3bada185c34f26b3c3c68df06d7dc04a622968eb Mon Sep 17 00:00:00 2001 From: Bluezery Date: Wed, 23 May 2012 10:29:03 +0000 Subject: [PATCH] From: Bluezery Subject: [E-devel] [Patch][elm_map] Add elm_map_overlays_get & elm_map_overlay_visible_get I want to add 2 new APIs (elm_map_overlays_get & elm_map_overlay_visible_get). There are no way to get the group overlays because group overlay, something like virtual overlay, is created and deleted dynamically. So elm_map_overlays_get returns total overlay's list and user can get any type of overlays including group overlays. Overlays which is grouped can not be visible. Because overlay grouping is performed by elm_map, user do not know whether overlays are visible or not. So elm_map_overlay_visible_get is added for this reason. SVN revision: 71354 --- legacy/elementary/ChangeLog | 4 + legacy/elementary/NEWS | 1 + legacy/elementary/src/bin/test_map.c | 35 ++- legacy/elementary/src/lib/elm_map.c | 311 +++++++++++++-------------- legacy/elementary/src/lib/elm_map.h | 33 ++- 5 files changed, 223 insertions(+), 161 deletions(-) diff --git a/legacy/elementary/ChangeLog b/legacy/elementary/ChangeLog index 920f27ba8f..ea01dcbb88 100644 --- a/legacy/elementary/ChangeLog +++ b/legacy/elementary/ChangeLog @@ -88,3 +88,7 @@ * Add skeleton for handling remote commands access controls. +2012-05-23 Tae-Hwan Kim (Bluezery) + + * Map: Add elm_map_overlays_get & elm_map_overlay_visible_get functions. + diff --git a/legacy/elementary/NEWS b/legacy/elementary/NEWS index b893a1b8bc..9ee70f9405 100644 --- a/legacy/elementary/NEWS +++ b/legacy/elementary/NEWS @@ -8,6 +8,7 @@ Additions: * Focus can be moved in all directions by elm_widget_focus_go function. * Reload theme when it change on disk. * Fileselector: Add a wheel spinner that show/spin while EIO is working + * Add elm_map_overlays_get & elm_map_overlay_visible_get functions. Fixes: diff --git a/legacy/elementary/src/bin/test_map.c b/legacy/elementary/src/bin/test_map.c index d136e83100..0a2e0b8e36 100644 --- a/legacy/elementary/src/bin/test_map.c +++ b/legacy/elementary/src/bin/test_map.c @@ -205,6 +205,37 @@ _bubble_parking_follow(Evas_Object *map) } } +static void +_overlays_num_check(Evas_Object *obj) +{ + Evas_Coord x, y, w, h; + double lon, lat, max_lon, max_lat, min_lon, min_lat; + Eina_List *overlays, *l; + Elm_Map_Overlay *ovl; + int cnt = 0; + int cnt_visible = 0; + + overlays = elm_map_overlays_get(obj); + evas_object_geometry_get(obj, &x, &y, &w, &h); + elm_map_canvas_to_region_convert(obj, x, y, &min_lon, &max_lat); + elm_map_canvas_to_region_convert(obj, x + w, y + h, &max_lon, &min_lat); + + EINA_LIST_FOREACH(overlays, l, ovl) + { + if (elm_map_overlay_type_get(ovl) == ELM_MAP_OVERLAY_TYPE_CLASS) + continue; + elm_map_overlay_region_get(ovl, &lon, &lat); + if ((min_lon <= lon) && (lon <= max_lon) && + (min_lat <= lat) && (lat <= max_lat)) + { + if (elm_map_overlay_visible_get(ovl)) cnt_visible++; + cnt++; + } + } + printf("Number of (visible/total) overlays in viewport: %d/%d\n", + cnt_visible, cnt); +} + static void _map_clicked(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) { @@ -298,6 +329,7 @@ _map_drag_stop(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSE { printf("scroll,drag,stop\n"); evas_object_smart_callback_add(data, "longpressed", _map_longpressed, data); + _overlays_num_check(obj); } static void @@ -322,13 +354,14 @@ static void _map_zoom_stop(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) { printf("zoom,stop\n"); - _bubble_parking_follow(obj); + _overlays_num_check(obj); } static void _map_zoom_change(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) { printf("zoom,change\n"); + _bubble_parking_follow(obj); } static void diff --git a/legacy/elementary/src/lib/elm_map.c b/legacy/elementary/src/lib/elm_map.c index 46ad77118b..5e3e0dc9dd 100644 --- a/legacy/elementary/src/lib/elm_map.c +++ b/legacy/elementary/src/lib/elm_map.c @@ -150,6 +150,7 @@ struct _Color struct _Overlay_Group { Widget_Data *wd; + double lon, lat; Elm_Map_Overlay *overlay; // virtual group type overlay Elm_Map_Overlay *clas; // class overlay for this virtual group Overlay_Default *ovl; // rendered overlay @@ -239,6 +240,7 @@ struct _Elm_Map_Overlay { Widget_Data *wd; + Eina_Bool visible : 1; Eina_Bool paused : 1; Eina_Bool hide : 1; Evas_Coord zoom_min; @@ -439,6 +441,8 @@ struct _Widget_Data Eina_List *names; Eina_List *overlays; + Eina_List *group_overlays; + Eina_List *all_overlays; }; static char *_mapnik_url_cb(const Evas_Object *obj __UNUSED__, int x, int y, int zoom); @@ -734,6 +738,8 @@ _grid_item_in_viewport(Grid_Item *gi) static void _grid_item_update(Grid_Item *gi) { + EINA_SAFETY_ON_NULL_RETURN(gi); + evas_object_image_file_set(gi->img, gi->file, NULL); if (!gi->wd->zoom_timer && !gi->wd->scr_timer) evas_object_image_smooth_scale_set(gi->img, EINA_TRUE); @@ -786,7 +792,6 @@ _grid_item_unload(Grid_Item *gi) gi->wd->try_num--; } else gi->wd->download_list = eina_list_remove(gi->wd->download_list, gi); - } static Grid_Item * @@ -908,8 +913,7 @@ _download_job(void *data) wd->download_list = eina_list_remove(wd->download_list, gi); wd->try_num++; wd->download_num++; - evas_object_smart_callback_call(gi->wd->obj, SIG_TILE_LOAD, - NULL); + evas_object_smart_callback_call(wd->obj, SIG_TILE_LOAD, NULL); if (wd->download_num == 1) edje_object_signal_emit(elm_smart_scroller_edje_object_get(wd->scr), "elm,state,busy,start", "elm"); @@ -1005,7 +1009,8 @@ _grid_place(Widget_Data *wd) if (wd->zoom == g->zoom) _grid_load(g); else _grid_unload(g); } - if (!wd->download_idler) wd->download_idler = ecore_idler_add(_download_job, wd); + if (!wd->download_idler) + wd->download_idler = ecore_idler_add(_download_job, wd); } static void @@ -1350,7 +1355,7 @@ _mouse_wheel_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, voi if (!wd->paused) { - Evas_Event_Mouse_Wheel *ev = (Evas_Event_Mouse_Wheel*) event_info; + Evas_Event_Mouse_Wheel *ev = event_info; zoom_do(wd, wd->zoom_detail - ((double)ev->z / 10)); } } @@ -1646,25 +1651,17 @@ _overlay_group_coord_member_update(Overlay_Group *grp, Evas_Coord x, Evas_Coord { EINA_SAFETY_ON_NULL_RETURN(grp); if (!grp->ovl) return; - char text[32]; + char text[32]; _overlay_default_coord_set(grp->ovl, x, y); + _coord_to_region_convert(grp->wd, x, y, grp->wd->size.w, &grp->lon, &grp->lat); + if (grp->members) eina_list_free(grp->members); grp->members = members; snprintf(text, sizeof(text), "%d", eina_list_count(members)); _overlay_default_layout_text_update(grp->ovl, text); } -static void -_overlay_group_region_get(Overlay_Group *grp, double *lon, double *lat) -{ - EINA_SAFETY_ON_NULL_RETURN(grp); - Evas_Coord xx, yy; - _overlay_default_coord_get(grp->ovl, &xx, &yy, NULL, NULL); - _coord_to_canvas(grp->wd, xx, yy, &xx, &yy); - elm_map_canvas_to_region_convert(grp->wd->obj, xx, yy, lon, lat); -} - static void _overlay_group_icon_update(Overlay_Group *grp, const Evas_Object *icon) { @@ -1829,18 +1826,23 @@ _overlay_class_new(Widget_Data *wd) return ovl; } -static void -_overlay_bubble_hide(Overlay_Bubble *bubble) -{ - EINA_SAFETY_ON_NULL_RETURN(bubble); - if (bubble->obj) evas_object_hide(bubble->obj); -} - static void _overlay_bubble_coord_update(Overlay_Bubble *bubble) { EINA_SAFETY_ON_NULL_RETURN(bubble); - if (!(bubble->pobj)) + if (bubble->pobj) + { + Evas_Coord x, y, w, h; + evas_object_geometry_get(bubble->pobj, &x, &y, &w, &h); + bubble->x = x + (w / 2); + bubble->y = y - (bubble->h / 2); + _canvas_to_coord(bubble->wd, bubble->x, bubble->y, + &(bubble->x), &(bubble->y)); + _coord_to_region_convert(bubble->wd, bubble->x, bubble->y, + bubble->wd->size.w, + &(bubble->lon), &(bubble->lat)); + } + else { _region_to_coord_convert(bubble->wd, bubble->lon, bubble->lat, bubble->wd->size.w, &bubble->x, &bubble->y); @@ -1867,45 +1869,27 @@ _overlay_bubble_coord_get(Overlay_Bubble *bubble, Evas_Coord *x, Evas_Coord *y, } } -static void -_overlay_bubble_show(Overlay_Bubble *bubble) +static Eina_Bool +_overlay_bubble_show_hide(Overlay_Bubble *bubble, Eina_Bool visible) { - EINA_SAFETY_ON_NULL_RETURN(bubble); - if (!(bubble->pobj)) + EINA_SAFETY_ON_NULL_RETURN_VAL(bubble, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(bubble->obj, EINA_FALSE); + + if (!visible) evas_object_hide(bubble->obj); + else if (bubble->pobj && !evas_object_visible_get(bubble->pobj)) + { + evas_object_hide(bubble->obj); + visible = EINA_FALSE; + } + else { _coord_to_canvas(bubble->wd, bubble->x, bubble->y, - &(bubble->x), &(bubble->y)); + &(bubble->x), &(bubble->y)); _obj_place(bubble->obj, bubble->x - (bubble->w /2), bubble->y - (bubble->h /2), bubble->w, bubble->h); + evas_object_raise(bubble->obj); } -} - -static void -_overlay_bubble_chase(Overlay_Bubble *bubble) -{ - EINA_SAFETY_ON_NULL_RETURN(bubble); - EINA_SAFETY_ON_NULL_RETURN(bubble->pobj); - - Evas_Coord x, y, w; - evas_object_geometry_get(bubble->pobj, &x, &y, &w, NULL); - x = x + (w / 2) - (bubble->w / 2); - y = y - bubble->h; - _obj_place(bubble->obj, x, y, bubble->w, bubble->h); - evas_object_raise(bubble->obj); -} - -static void -_overlay_bubble_hide_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) -{ - EINA_SAFETY_ON_NULL_RETURN(data); - _overlay_bubble_hide(data); -} - -static void -_overlay_bubble_chase_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) -{ - EINA_SAFETY_ON_NULL_RETURN(data); - _overlay_bubble_chase(data); + return visible; } static void @@ -1916,15 +1900,6 @@ _overlay_bubble_free(Overlay_Bubble* bubble) evas_object_del(bubble->bx); evas_object_del(bubble->sc); evas_object_del(bubble->obj); - if (bubble->pobj) - { - evas_object_event_callback_del_full(bubble->pobj, EVAS_CALLBACK_HIDE, - _overlay_bubble_hide_cb, bubble); - evas_object_event_callback_del_full(bubble->pobj, EVAS_CALLBACK_SHOW, - _overlay_bubble_chase_cb, bubble); - evas_object_event_callback_del_full(bubble->pobj, EVAS_CALLBACK_MOVE, - _overlay_bubble_chase_cb, bubble); - } free(bubble); } @@ -1941,8 +1916,6 @@ _overlay_bubble_new(Elm_Map_Overlay *overlay) bubble->obj = edje_object_add(evas_object_evas_get(overlay->wd->obj)); _elm_theme_object_set(overlay->wd->obj, bubble->obj , "map", "marker_bubble", elm_widget_style_get(overlay->wd->obj)); - evas_object_event_callback_add(bubble->obj, EVAS_CALLBACK_MOUSE_UP, - _overlay_bubble_chase_cb, bubble); evas_object_event_callback_add(bubble->obj, EVAS_CALLBACK_MOUSE_DOWN, _overlay_clicked_cb, overlay); @@ -2369,6 +2342,10 @@ _overlay_grouping(Eina_List *clas_membs, Elm_Map_Overlay *boss) sum_y = (sum_y + by) / (cnt + 1); grp_membs = eina_list_append(grp_membs, boss); _overlay_group_coord_member_update(boss->grp, sum_x, sum_y, grp_membs); + + // Append group to all overlay list + boss->wd->group_overlays = eina_list_append(boss->wd->group_overlays, + boss->grp->overlay); } } @@ -2376,54 +2353,64 @@ static void _overlay_show(Elm_Map_Overlay *overlay) { Widget_Data *wd = overlay->wd; - Eina_Bool hide = EINA_FALSE; - - if (overlay->type == ELM_MAP_OVERLAY_TYPE_CLASS) return; if (overlay->paused) return; - if ((overlay->grp->clas) && (overlay->grp->clas->paused)) return; + if ((overlay->grp) && (overlay->grp->clas) && + (overlay->grp->clas->paused)) return; - if (((overlay->grp->in) || (overlay->hide) || - (overlay->zoom_min > wd->zoom))) - hide = EINA_TRUE; - if ((overlay->grp->clas) && ((overlay->grp->clas->hide) || - (overlay->grp->clas->zoom_min > wd->zoom))) - hide = EINA_TRUE; + overlay->visible = EINA_TRUE; + if (overlay->type == ELM_MAP_OVERLAY_TYPE_CLASS) + { + overlay->visible = EINA_FALSE; + return; + } + if (overlay->grp) + { + if ((overlay->grp->in) || + (overlay->hide) || (overlay->zoom_min > wd->zoom)) + overlay->visible = EINA_FALSE; - if (overlay->type == ELM_MAP_OVERLAY_TYPE_DEFAULT) - { - if (hide) _overlay_default_hide(overlay->ovl); - else _overlay_default_show(overlay->ovl); + if ((overlay->grp->clas) && + ((overlay->grp->clas->hide) || + (overlay->grp->clas->zoom_min > wd->zoom))) + overlay->visible = EINA_FALSE; } - else if (overlay->type == ELM_MAP_OVERLAY_TYPE_BUBBLE) + + switch (overlay->type) { - if (hide) _overlay_bubble_hide(overlay->ovl); - else _overlay_bubble_show(overlay->ovl); - } - else if (overlay->type == ELM_MAP_OVERLAY_TYPE_ROUTE) - { - if (hide) _overlay_route_hide(overlay->ovl); - else _overlay_route_show(overlay->ovl); - } - else if (overlay->type == ELM_MAP_OVERLAY_TYPE_LINE) - { - if (hide) _overlay_line_hide(overlay->ovl); - else _overlay_line_show(overlay->ovl); - } - else if (overlay->type == ELM_MAP_OVERLAY_TYPE_POLYGON) - { - if (hide) _overlay_polygon_hide(overlay->ovl); - else _overlay_polygon_show(overlay->ovl); - } - else if (overlay->type == ELM_MAP_OVERLAY_TYPE_CIRCLE) - { - if (hide) _overlay_circle_hide(overlay->ovl); - else _overlay_circle_show(overlay->ovl); - } - else if (overlay->type == ELM_MAP_OVERLAY_TYPE_SCALE) - { - if (hide) _overlay_scale_hide(overlay->ovl); - else _overlay_scale_show(overlay->ovl); + case ELM_MAP_OVERLAY_TYPE_DEFAULT: + if (overlay->visible) _overlay_default_show(overlay->ovl); + else _overlay_default_hide(overlay->ovl); + break; + case ELM_MAP_OVERLAY_TYPE_GROUP: + if (overlay->visible) _overlay_group_show(overlay->ovl); + else _overlay_group_hide(overlay->ovl); + break; + case ELM_MAP_OVERLAY_TYPE_BUBBLE: + overlay->visible = _overlay_bubble_show_hide(overlay->ovl, + overlay->visible); + break; + case ELM_MAP_OVERLAY_TYPE_ROUTE: + if (overlay->visible) _overlay_route_show(overlay->ovl); + else _overlay_route_hide(overlay->ovl); + break; + case ELM_MAP_OVERLAY_TYPE_LINE: + if (overlay->visible) _overlay_line_show(overlay->ovl); + else _overlay_line_hide(overlay->ovl); + break; + case ELM_MAP_OVERLAY_TYPE_POLYGON: + if (overlay->visible) _overlay_polygon_show(overlay->ovl); + else _overlay_polygon_hide(overlay->ovl); + break; + case ELM_MAP_OVERLAY_TYPE_CIRCLE: + if (overlay->visible) _overlay_circle_show(overlay->ovl); + else _overlay_circle_hide(overlay->ovl); + break; + case ELM_MAP_OVERLAY_TYPE_SCALE: + if (overlay->visible) _overlay_scale_show(overlay->ovl); + else _overlay_scale_hide(overlay->ovl); + default: + ERR("Invalid overlay type to show: %d", overlay->type); } } @@ -2435,13 +2422,19 @@ _overlay_place(Widget_Data *wd) Eina_List *l, *ll; Elm_Map_Overlay *overlay; - // Reset group & Update overlays coord + eina_list_free(wd->group_overlays); + wd->group_overlays = NULL; + EINA_LIST_FOREACH(wd->overlays, l, overlay) { - if (overlay->type == ELM_MAP_OVERLAY_TYPE_CLASS) continue; + // Reset groups + if ((overlay->type == ELM_MAP_OVERLAY_TYPE_CLASS) || + (overlay->type == ELM_MAP_OVERLAY_TYPE_CLASS)) continue; overlay->grp->in = EINA_FALSE; overlay->grp->boss = EINA_FALSE; + _overlay_group_hide(overlay->grp); + // Update overlays' coord if (overlay->type == ELM_MAP_OVERLAY_TYPE_DEFAULT) _overlay_default_coord_update(overlay->ovl); else if (overlay->type == ELM_MAP_OVERLAY_TYPE_BUBBLE) @@ -2468,16 +2461,9 @@ _overlay_place(Widget_Data *wd) } } - // Place overlays + // Place group overlays and overlays + EINA_LIST_FOREACH(wd->group_overlays, l, overlay) _overlay_show(overlay); EINA_LIST_FOREACH(wd->overlays, l, overlay) _overlay_show(overlay); - - // Place group overlays on top of overlays - EINA_LIST_FOREACH(wd->overlays, l, overlay) - { - if (overlay->type == ELM_MAP_OVERLAY_TYPE_CLASS) continue; - if (overlay->grp->boss) _overlay_group_show(overlay->grp); - else _overlay_group_hide(overlay->grp); - } } static Evas_Object * @@ -2897,22 +2883,6 @@ _name_parse(Elm_Map_Name *n) } } -Grid *_get_current_grid(Widget_Data *wd) -{ - EINA_SAFETY_ON_NULL_RETURN_VAL(wd, NULL); - Eina_List *l; - Grid *g = NULL, *ret = NULL; - EINA_LIST_FOREACH(wd->grids, l, g) - { - if (wd->zoom == g->zoom) - { - ret = g; - break; - } - } - return ret; -} - static void _route_cb(void *data, const char *file, int status) { @@ -3749,6 +3719,8 @@ _del_pre_hook(Evas_Object *obj) EINA_LIST_FOREACH_SAFE(wd->overlays, l, ll, overlay) elm_map_overlay_del(overlay); eina_list_free(wd->overlays); + eina_list_free(wd->group_overlays); + eina_list_free(wd->all_overlays); EINA_LIST_FREE(wd->track, track) evas_object_del(track); @@ -3889,7 +3861,7 @@ elm_map_add(Evas_Object *parent) evas_object_event_callback_add(obj, EVAS_CALLBACK_MOUSE_UP, _mouse_up, wd); evas_object_event_callback_add(obj, EVAS_CALLBACK_MOUSE_WHEEL, - _mouse_wheel_cb,wd); + _mouse_wheel_cb, wd); wd->obj = obj; wd->scr = elm_smart_scroller_add(e); @@ -4723,6 +4695,32 @@ elm_map_overlay_add(Evas_Object *obj, double lon, double lat) #endif } +EAPI Eina_List * +elm_map_overlays_get(Evas_Object *obj) +{ +#ifdef HAVE_ELEMENTARY_ECORE_CON + ELM_CHECK_WIDTYPE(obj, widtype) NULL; + Widget_Data *wd = elm_widget_data_get(obj); + EINA_SAFETY_ON_NULL_RETURN_VAL(wd, NULL); + + Eina_List *l; + Elm_Map_Overlay *ovl; + + eina_list_free(wd->all_overlays); + wd->all_overlays = NULL; + + EINA_LIST_FOREACH(wd->overlays, l, ovl) + wd->all_overlays = eina_list_append(wd->all_overlays, ovl); + EINA_LIST_FOREACH(wd->group_overlays, l, ovl) + wd->all_overlays = eina_list_append(wd->all_overlays, ovl); + + return wd->all_overlays; +#else + (void) obj; + return NULL; +#endif +} + EAPI void elm_map_overlay_del(Elm_Map_Overlay *overlay) { @@ -4907,6 +4905,21 @@ elm_map_overlay_paused_get(const Elm_Map_Overlay *overlay) #endif } +EAPI Eina_Bool +elm_map_overlay_visible_get(const Elm_Map_Overlay *overlay) +{ +#ifdef HAVE_ELEMENTARY_ECORE_CON + EINA_SAFETY_ON_NULL_RETURN_VAL(overlay, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(overlay->wd, EINA_FALSE); + ELM_CHECK_WIDTYPE(overlay->wd->obj, widtype) EINA_FALSE; + + return overlay->visible; +#else + (void) overlay; + return EINA_FALSE; +#endif +} + EAPI void elm_map_overlay_show(Elm_Map_Overlay *overlay) { @@ -4980,6 +4993,7 @@ elm_map_overlay_region_set(Elm_Map_Overlay *overlay, double lon, double lat) else if (overlay->type == ELM_MAP_OVERLAY_TYPE_BUBBLE) { Overlay_Bubble *ovl = overlay->ovl; + ovl->pobj = NULL; ovl->lon = lon; ovl->lat = lat; } @@ -5004,7 +5018,8 @@ elm_map_overlay_region_get(const Elm_Map_Overlay *overlay, double *lon, double * if (overlay->type == ELM_MAP_OVERLAY_TYPE_GROUP) { Overlay_Group *ovl = overlay->ovl; - _overlay_group_region_get(ovl, lon, lat); + if (lon) *lon = ovl->lon; + if (lat) *lat = ovl->lat; } else if (overlay->type == ELM_MAP_OVERLAY_TYPE_DEFAULT) { @@ -5392,25 +5407,7 @@ elm_map_overlay_bubble_follow(Elm_Map_Overlay *bubble, const Elm_Map_Overlay *pa Evas_Object *pobj = _overlay_obj_get(parent); if (!pobj) return; - if (ovl->pobj) - { - evas_object_event_callback_del_full(ovl->pobj, EVAS_CALLBACK_HIDE, - _overlay_bubble_hide_cb, ovl); - evas_object_event_callback_del_full(ovl->pobj, EVAS_CALLBACK_SHOW, - _overlay_bubble_chase_cb, ovl); - evas_object_event_callback_del_full(ovl->pobj, EVAS_CALLBACK_MOVE, - _overlay_bubble_chase_cb, ovl); - } - ovl->pobj = pobj; - evas_object_event_callback_add(ovl->pobj, EVAS_CALLBACK_HIDE, - _overlay_bubble_hide_cb, ovl); - evas_object_event_callback_add(ovl->pobj, EVAS_CALLBACK_SHOW, - _overlay_bubble_chase_cb, ovl); - evas_object_event_callback_add(ovl->pobj, EVAS_CALLBACK_MOVE, - _overlay_bubble_chase_cb, ovl); - - _overlay_bubble_chase(ovl); evas_object_smart_changed(bubble->wd->pan_smart); #else (void) bubble; diff --git a/legacy/elementary/src/lib/elm_map.h b/legacy/elementary/src/lib/elm_map.h index 05ab6cbc8d..383c183c4e 100644 --- a/legacy/elementary/src/lib/elm_map.h +++ b/legacy/elementary/src/lib/elm_map.h @@ -178,7 +178,7 @@ typedef enum _Elm_Map_Overlay_Type typedef struct _Elm_Map_Marker Elm_Map_Marker; /**< A marker to be shown in a specific point of the map. Can be created with elm_map_marker_add() and deleted with elm_map_marker_remove(). */ typedef struct _Elm_Map_Marker_Class Elm_Map_Marker_Class; /**< Each marker must be associated to a class. It's required to add a mark. The class defines the style of the marker when a marker is displayed alone (not grouped). A new class can be created with elm_map_marker_class_new(). */ typedef struct _Elm_Map_Group_Class Elm_Map_Group_Class; /**< Each marker must be associated to a group class. It's required to add a mark. The group class defines the style of the marker when a marker is grouped to other markers. Markers with the same group are grouped if they are close. A new group class can be created with elm_map_marker_group_class_new(). */ -typedef struct _Elm_Map_Route Elm_Map_Route; /**< A route to be shown in the map. Can be created with elm_map_route_add() and deleted with elm_map_route_remove(). */ +typedef struct _Elm_Map_Route Elm_Map_Route; /**< A route to be shown in the map. Can be created with elm_map_route_add() and deleted with elm_map_route_del(). */ typedef struct _Elm_Map_Name Elm_Map_Name; /**< A handle for specific coordinates. */ typedef struct _Elm_Map_Overlay Elm_Map_Overlay; /**< A overlay to be shown in a specific point of the map. This can be created by elm_map_overlay_add() and similar functions and deleted by elm_map_overlay_del(). */ @@ -587,6 +587,19 @@ EAPI const char *elm_map_user_agent_get(const Evas_Object *obj); */ EAPI Elm_Map_Overlay * elm_map_overlay_add(Evas_Object *obj, double lon, double lat); +/** + * Return all overlays in the map object. + * + * @param obj The map object to return overlays. + * @return The list of all overlays or @c NULL upon failure. + * + * This list includes group overlays also. + * So this can be changed dynamically while zooming and panning. + * + * @ingroup Map + */ +EAPI EAPI Eina_List * elm_map_overlays_get(Evas_Object *obj); + /** * Delete a overlay from the map. This function can delete all types * of overlays. @@ -732,6 +745,20 @@ EAPI void elm_map_overlay_paused_set(Elm_Map_Overlay *overlay, */ EAPI Eina_Bool elm_map_overlay_paused_get(const Elm_Map_Overlay *overlay); +/** + * Get a value whether the overlay is visible or not. + * + * @param overlay The overlay to return visible state. + * @return @c EINA_TRUE means overlay is visible. @c EINA_FALSE indicates + * it is not. + * + * The visible of the overlay can not be set. + * This value can be changed dynamically while zooming and panning + * + * @ingroup Map + */ +EAPI Eina_Bool elm_map_overlay_visible_get(const Elm_Map_Overlay *overlay); + /** * Set the content object of the overlay. * @@ -1354,10 +1381,10 @@ EAPI const char *elm_map_source_get(const Evas_Object *obj, Elm_Map_So * of #ELM_MAP_ROUTE_METHOD_SHORTEST or #ELM_MAP_ROUTE_METHOD_FASTEST. * * Routes created with this method can be deleted with - * elm_map_route_remove(), + * elm_map_route_del(), * and distance can be get with elm_map_route_distance_get(). * - * @see elm_map_route_remove() + * @see elm_map_route_del() * @see elm_map_route_distance_get() * @see elm_map_source_set() *