2 * Simple Elementary's <b>map widget</b> example, illustrating overlays
5 * See stdout/stderr for output. Compile with:
8 * gcc -g `pkg-config --cflags --libs elementary` map_example_02.c -o map_example_02
12 #include <Elementary.h>
14 # include "elementary_config.h"
19 typedef struct _Overlay_Data
25 Overlay_Data data_argentina = {"Argentina",
26 PACKAGE_DATA_DIR"/images/rock_01.jpg"};
27 Overlay_Data data_chile = {"Chile",
28 PACKAGE_DATA_DIR"/images/rock_02.jpg"};
29 Overlay_Data data_sampa = {"São Paulo",
30 PACKAGE_DATA_DIR"/images/sky_01.jpg"};
31 Overlay_Data data_rio = {"Rio de Janeiro",
32 PACKAGE_DATA_DIR"/images/sky_02.jpg"};
33 Overlay_Data data_brasilia = {"Brasília",
34 PACKAGE_DATA_DIR"/images/sky_03.jpg"};
36 static Elm_Map_Overlay *bubble;
39 _icon_get(Evas_Object *obj, const char *file)
41 Evas_Object *icon = elm_icon_add(obj);
42 elm_icon_file_set(icon, file, NULL);
43 evas_object_show(icon);
48 _city_icon_get(Evas_Object *obj)
50 return _icon_get(obj, PACKAGE_DATA_DIR"/images/icon_07.png");
54 _clas_city_icon_get(Evas_Object *obj)
56 return _icon_get(obj, PACKAGE_DATA_DIR"/images/icon_05.png");
60 _country_icon_get(Evas_Object *obj)
62 return _icon_get(obj, PACKAGE_DATA_DIR"/images/icon_06.png");
66 _clas_country_icon_get(Evas_Object *obj)
68 return _icon_get(obj, PACKAGE_DATA_DIR"/images/icon_04.png");
72 _box_get(Evas_Object *obj, Overlay_Data *data)
74 Evas_Object *bx, *img, *label;
75 bx = elm_box_add(obj);
78 img = evas_object_image_add(evas_object_evas_get(obj));
79 evas_object_image_file_set(img, data->file, NULL);
80 evas_object_image_filled_set(img, EINA_TRUE);
81 evas_object_size_hint_min_set(img, 64, 64);
82 evas_object_show(img);
83 elm_box_pack_end(bx, img);
85 label = elm_label_add(obj);
86 elm_object_text_set(label, data->name);
87 evas_object_show(label);
88 elm_box_pack_end(bx, label);
93 _overlay_cb(void *data __UNUSED__, Evas_Object *map, void *ev)
95 printf("Overlay clicked\n");
96 Elm_Map_Overlay *overlay = ev;
99 // prevent duplication
100 if (!bubble) bubble = elm_map_overlay_bubble_add(map);
102 elm_map_overlay_bubble_follow(bubble, overlay);
103 elm_map_overlay_bubble_content_clear(bubble);
104 bx = _box_get(map, elm_map_overlay_data_get(overlay));
105 elm_map_overlay_bubble_content_append(bubble, bx);
109 _bt_zoom_in(void *data, Evas_Object *obj __UNUSED__, void *ev __UNUSED__)
111 Evas_Object *map = data;
114 elm_map_zoom_mode_set(map, ELM_MAP_ZOOM_MODE_MANUAL);
115 zoom = elm_map_zoom_get(map);
116 elm_map_zoom_set(map, zoom + 1);
120 _bt_zoom_out(void *data, Evas_Object *obj __UNUSED__, void *ev __UNUSED__)
122 Evas_Object *map = data;
125 elm_map_zoom_mode_set(map, ELM_MAP_ZOOM_MODE_MANUAL);
126 zoom = elm_map_zoom_get(map);
127 elm_map_zoom_set(map, zoom - 1);
131 _bt_zoom_fit(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
133 Evas_Object *map = data;
134 elm_map_zoom_mode_set(map, ELM_MAP_ZOOM_MODE_AUTO_FIT);
138 _bt_zoom_fill(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
140 Evas_Object *map = data;
141 elm_map_zoom_mode_set(map, ELM_MAP_ZOOM_MODE_AUTO_FILL);
145 _on_done(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
150 /* FIXME: it shouldn't be required. For unknown reason map won't call
151 * pan_calculate until shot delay time, but then it will take a screenshot
152 * when the map isn't loaded yet (actually it won't be downloaded, because
153 * after the SS it will kill the example). */
155 _nasty_hack(void *data)
157 Evas_Object *o = data;
158 Evas *e = evas_object_evas_get(o);
159 evas_smart_objects_calculate(e);
160 return ECORE_CALLBACK_CANCEL;
164 elm_main(int argc __UNUSED__, char **argv __UNUSED__)
166 Evas_Object *win, *bg, *map, *box, *bt;
167 Eina_List *ovls = NULL;
168 Elm_Map_Overlay *ovl, *city_clas, *country_clas;
170 win = elm_win_add(NULL, "map", ELM_WIN_BASIC);
171 elm_win_title_set(win, "Map Overlay Example");
172 evas_object_smart_callback_add(win, "delete,request", _on_done, NULL);
174 bg = elm_bg_add(win);
175 elm_win_resize_object_add(win, bg);
176 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
177 evas_object_show(bg);
179 map = elm_map_add(win);
180 elm_win_resize_object_add(win, map);
181 evas_object_size_hint_weight_set(map, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
182 evas_object_show(map);
184 box = elm_box_add(win);
185 evas_object_show(box);
187 bt = elm_button_add(win);
188 elm_object_text_set(bt, "+");
189 elm_box_pack_end(box, bt);
190 evas_object_show(bt);
191 evas_object_smart_callback_add(bt, "clicked", _bt_zoom_in, map);
193 bt = elm_button_add(win);
194 elm_object_text_set(bt, "-");
195 elm_box_pack_end(box, bt);
196 evas_object_show(bt);
197 evas_object_smart_callback_add(bt, "clicked", _bt_zoom_out, map);
199 bt = elm_button_add(win);
200 elm_object_text_set(bt, "X");
201 elm_box_pack_end(box, bt);
202 evas_object_show(bt);
203 evas_object_smart_callback_add(bt, "clicked", _bt_zoom_fit, map);
205 bt = elm_button_add(win);
206 elm_object_text_set(bt, "#");
207 elm_box_pack_end(box, bt);
208 evas_object_show(bt);
209 evas_object_smart_callback_add(bt, "clicked", _bt_zoom_fill, map);
211 evas_object_smart_callback_add(map, "overlay,clicked", _overlay_cb, NULL);
213 city_clas = elm_map_overlay_class_add(map);
214 elm_map_overlay_displayed_zoom_min_set(city_clas, 3);
215 elm_map_overlay_icon_set(city_clas, _clas_city_icon_get(map));
217 country_clas = elm_map_overlay_class_add(map);
218 elm_map_overlay_displayed_zoom_min_set(country_clas, 1);
219 elm_map_overlay_icon_set(country_clas, _clas_country_icon_get(map));
221 ovl = elm_map_overlay_add(map, -43.2, -22.9);
222 elm_map_overlay_icon_set(ovl, _city_icon_get(map));
223 elm_map_overlay_data_set(ovl, &data_rio);
224 elm_map_overlay_class_append(city_clas, ovl);
225 ovls = eina_list_append(ovls, ovl);
227 ovl = elm_map_overlay_add(map, -46.63, -23.55);
228 elm_map_overlay_icon_set(ovl, _city_icon_get(map));
229 elm_map_overlay_data_set(ovl, &data_sampa);
230 elm_map_overlay_class_append(city_clas, ovl);
231 ovls = eina_list_append(ovls, ovl);
233 ovl = elm_map_overlay_add(map, -47.88, -15.78);
234 elm_map_overlay_icon_set(ovl, _city_icon_get(map));
235 elm_map_overlay_data_set(ovl, &data_brasilia);
236 elm_map_overlay_class_append(city_clas, ovl);
237 ovls = eina_list_append(ovls, ovl);
239 ovl = elm_map_overlay_add(map, -65.23, -35.1);
240 elm_map_overlay_icon_set(ovl, _country_icon_get(map));
241 elm_map_overlay_data_set(ovl, &data_argentina);
242 elm_map_overlay_class_append(country_clas, ovl);
243 ovls = eina_list_append(ovls, ovl);
245 ovl = elm_map_overlay_add(map, -71.3, -31.75);
246 elm_map_overlay_icon_set(ovl, _country_icon_get(map));
247 elm_map_overlay_data_set(ovl, &data_chile);
248 elm_map_overlay_class_append(country_clas, ovl);
249 ovls = eina_list_append(ovls, ovl);
251 elm_map_overlays_show(ovls);
253 evas_object_resize(win, 512, 512);
254 evas_object_show(win);
256 ecore_timer_add(1, _nasty_hack, win);