From 6b88bee7e53ca8e72a27e18e43240378f0b0d932 Mon Sep 17 00:00:00 2001 From: Jonathan Atton Date: Sat, 25 Jun 2011 14:30:10 +0000 Subject: [PATCH] elm_map: use emap SVN revision: 60684 --- legacy/elementary/configure.ac | 31 ++++ legacy/elementary/src/bin/test_map.c | 7 +- legacy/elementary/src/lib/Elementary.h.in | 12 +- legacy/elementary/src/lib/Makefile.am | 2 + legacy/elementary/src/lib/elm_main.c | 9 ++ legacy/elementary/src/lib/elm_map.c | 164 ++++------------------ 6 files changed, 86 insertions(+), 139 deletions(-) diff --git a/legacy/elementary/configure.ac b/legacy/elementary/configure.ac index e4e4b0dbdc..39f107872f 100644 --- a/legacy/elementary/configure.ac +++ b/legacy/elementary/configure.ac @@ -420,6 +420,36 @@ if test "x$want_elementary_eweather" = "xyes" -a "x$have_elementary_eweather" = fi AC_SUBST(ELM_EWEATHER_DEF) +ELM_EMAP_DEF="#undef" +have_elementary_emap="no" +want_elementary_emap="auto" +AC_ARG_ENABLE([emap], + [AC_HELP_STRING([--disable-emap], [disable emap support. @<:@default=detect@:>@])], + [want_elementary_emap=$enableval], []) + +if test "x$want_elementary_emap" != "xno"; then + PKG_CHECK_MODULES([ELEMENTARY_EMAP], + [ + emap + ], + [ + AC_DEFINE(HAVE_ELEMENTARY_EMAP, 1, [EMap support for Elementary]) + have_elementary_emap="yes" + ELM_EMAP_DEF="#define" + requirement_elm="emap ${requirement_elm}" + ], + [have_elementary_emap="no"] + ) +else + have_elementary_emap="no" +fi +if test "x$want_elementary_emap" = "xyes" -a "x$have_elementary_emap" = "xno"; then + AC_MSG_ERROR([Emap support requested, but no emap found by pkg-config.]) +fi +AC_SUBST(ELM_EMAP_DEF) + + + ELM_ETHUMB_DEF="#undef" have_elementary_ethumb="no" want_elementary_ethumb="auto" @@ -559,6 +589,7 @@ echo " Features:" echo " EDBus..................: ${have_elementary_edbus}" echo " EFreet.................: ${have_elementary_efreet}" echo " EWeather...............: ${have_elementary_eweather}" +echo " EMap...................: ${have_elementary_emap}" echo " Ethumb.................: ${have_elementary_ethumb}" echo " Quick Launch...........: ${have_fork}" echo " eio....................: ${have_eio}" diff --git a/legacy/elementary/src/bin/test_map.c b/legacy/elementary/src/bin/test_map.c index 2cddf060d3..33ba6984b5 100644 --- a/legacy/elementary/src/bin/test_map.c +++ b/legacy/elementary/src/bin/test_map.c @@ -59,7 +59,12 @@ my_map_gpx_fileselector_done(void *data, Evas_Object *obj __UNUSED__, void *even if (selected) { printf("Selected file: %s\n", selected); - track = elm_map_track_add(data, selected); +#ifdef HAVE_ELEMENTARY_EMAP + EMap_Route *emap = emap_route_gpx_new(selected); + track = elm_map_track_add(data, emap); +#else + printf("libEMap is required !\n"); +#endif } evas_object_del(fs_win); } diff --git a/legacy/elementary/src/lib/Elementary.h.in b/legacy/elementary/src/lib/Elementary.h.in index c734d33e10..cecc357d5d 100644 --- a/legacy/elementary/src/lib/Elementary.h.in +++ b/legacy/elementary/src/lib/Elementary.h.in @@ -98,6 +98,10 @@ Pants @ELM_ALLOCA_H_DEF@ ELM_ALLOCA_H @ELM_LIBINTL_H_DEF@ ELM_LIBINTL_H +#ifdef HAVE_CONFIG_H +# include "elementary_config.h" +#endif + /* Standard headers for standard system calls etc. */ #include #include @@ -164,6 +168,10 @@ Pants # include #endif +#ifdef HAVE_ELEMENTARY_EMAP +# include +#endif + #ifdef EAPI # undef EAPI #endif @@ -4161,7 +4169,9 @@ EAPI Elm_Genlist_Item *elm_genlist_item_sorted_insert(Evas_Object *obj, const El EAPI void elm_map_rotate_get(const Evas_Object *obj, double *degree, Evas_Coord *cx, Evas_Coord *cy) EINA_ARG_NONNULL(1, 2, 3, 4); EAPI void elm_map_wheel_disabled_set(Evas_Object *obj, Eina_Bool disabled) EINA_ARG_NONNULL(1); EAPI Eina_Bool elm_map_wheel_disabled_get(const Evas_Object *obj) EINA_ARG_NONNULL(1); - EAPI Elm_Map_Track *elm_map_track_add(Evas_Object *obj, const char *gpx_file) EINA_ARG_NONNULL(1); +#ifdef HAVE_ELEMENTARY_EMAP + EAPI Elm_Map_Track *elm_map_track_add(Evas_Object *obj, EMap_Route *emap) EINA_ARG_NONNULL(1); +#endif EAPI void elm_map_track_remove(Elm_Map_Track *track) EINA_ARG_NONNULL(1); EAPI void elm_map_track_color_set(Elm_Map_Track *track, int r, int g , int b, int a) EINA_ARG_NONNULL(1); EAPI void elm_map_track_color_get(const Elm_Map_Track *track, int *r, int *g , int *b, int *a) EINA_ARG_NONNULL(1); diff --git a/legacy/elementary/src/lib/Makefile.am b/legacy/elementary/src/lib/Makefile.am index dbfee077de..879373131a 100644 --- a/legacy/elementary/src/lib/Makefile.am +++ b/legacy/elementary/src/lib/Makefile.am @@ -21,6 +21,7 @@ AM_CPPFLAGS = \ @ELEMENTARY_EDBUS_CFLAGS@ \ @ELEMENTARY_EFREET_CFLAGS@ \ @ELEMENTARY_ETHUMB_CFLAGS@ \ +@ELEMENTARY_EMAP_CFLAGS@ \ @EVIL_CFLAGS@ \ @EFL_PTHREAD_CFLAGS@ @@ -130,6 +131,7 @@ libelementary_la_LIBADD = \ @ELEMENTARY_EDBUS_LIBS@ \ @ELEMENTARY_EFREET_LIBS@ \ @ELEMENTARY_ETHUMB_LIBS@ \ +@ELEMENTARY_EMAP_LIBS@ \ @EVIL_LIBS@ \ @EFL_PTHREAD_LIBS@ libelementary_la_LDFLAGS = \ diff --git a/legacy/elementary/src/lib/elm_main.c b/legacy/elementary/src/lib/elm_main.c index 0ce5f0ca20..ebdbeb5969 100644 --- a/legacy/elementary/src/lib/elm_main.c +++ b/legacy/elementary/src/lib/elm_main.c @@ -608,6 +608,10 @@ elm_quicklaunch_init(int argc, eet_init(); ecore_init(); + +#ifdef HAVE_ELEMENTARY_EMAP + emap_init(); +#endif ecore_app_args_set(argc, (const char **)argv); memset(_elm_policies, 0, sizeof(_elm_policies)); @@ -745,6 +749,11 @@ elm_quicklaunch_shutdown(void) _elm_unneed_e_dbus(); _elm_unneed_ethumb(); ecore_file_shutdown(); + +#ifdef HAVE_ELEMENTARY_EMAP + emap_shutdown(); +#endif + ecore_shutdown(); eet_shutdown(); diff --git a/legacy/elementary/src/lib/elm_map.c b/legacy/elementary/src/lib/elm_map.c index 69cd7941af..8b50c547ff 100644 --- a/legacy/elementary/src/lib/elm_map.c +++ b/legacy/elementary/src/lib/elm_map.c @@ -291,22 +291,13 @@ struct _Elm_Map_Track { Widget_Data *wd; - Path_Node *n; - Path_Waypoint *w; +#ifdef HAVE_ELEMENTARY_EMAP + EMap_Route *emap; +#endif int x, y; - double flon, flat, tlon, tlat; Eina_List *nodes, *path; - Eina_List *waypoint; - - struct { - int node_count; - int waypoint_count; - const char *nodes; - const char *waypoints; - double distance; /* unit : km */ - } info; struct { int r; @@ -840,15 +831,15 @@ obj_rotate_zoom(void *data, Evas_Object *obj) static void track_place(Evas_Object *obj, Grid *g __UNUSED__, Evas_Coord px, Evas_Coord py, Evas_Coord ox __UNUSED__, Evas_Coord oy __UNUSED__, Evas_Coord ow, Evas_Coord oh) { +#ifdef HAVE_ELEMENTARY_EMAP ELM_CHECK_WIDTYPE(obj, widtype); Widget_Data *wd = elm_widget_data_get(obj); Eina_List *lr, *lp, *ln; - Path_Node *n; + EMap_Route_Node *n; Evas_Object *p; Elm_Map_Track *t; int nodes; int x, y, rx, ry; - double a; if (!wd) return; Evas_Coord size = pow(2.0, wd->zoom)*wd->tsize; @@ -861,35 +852,29 @@ track_place(Evas_Object *obj, Grid *g __UNUSED__, Evas_Coord px, Evas_Coord py, } evas_object_geometry_get(wd->rect, &rx, &ry, NULL, NULL); - nodes = eina_list_count(t->nodes); + nodes = eina_list_count(emap_route_nodes_get(t->emap)); - EINA_LIST_FOREACH(t->nodes, ln, n) + int i = 0; + EINA_LIST_FOREACH(emap_route_nodes_get(t->emap), ln, n) { if (t->inbound) { - elm_map_utils_convert_geo_into_coord(wd->obj, n->pos.lon, n->pos.lat, size, &x, &y); + elm_map_utils_convert_geo_into_coord(wd->obj, emap_route_node_lon_get(n), emap_route_node_lat_get(n), size, &x, &y); if ((x >= px - ow) && (x <= (px + ow*2)) && (y >= py - oh) && (y <= (py + oh*2))) { x = x - px + rx; y = y - py + ry; - p = eina_list_nth(t->path, n->idx); - a = (double)(y - t->y) / (double)(x - t->x); - if ((abs(a) >= 1) || (t->x == x)) - { - evas_object_polygon_point_add(p, t->x - 3, t->y); - evas_object_polygon_point_add(p, t->x + 3, t->y); - evas_object_polygon_point_add(p, x + 3, y); - evas_object_polygon_point_add(p, x - 3, y); - } - else - { - evas_object_polygon_point_add(p, t->x, t->y - 3); - evas_object_polygon_point_add(p, t->x, t->y + 3); - evas_object_polygon_point_add(p, x, y + 3); - evas_object_polygon_point_add(p, x, y - 3); - } + p = eina_list_nth(t->path, i); + if(!p) + { + p = evas_object_line_add(evas_object_evas_get(t->wd->obj)); + evas_object_smart_member_add(p, t->wd->pan_smart); + t->path = eina_list_append(t->path, p); + } + + evas_object_line_xy_set(p, t->x, t->y, x, y); evas_object_color_set(p, t->color.r, t->color.g, t->color.b, t->color.a); evas_object_raise(p); @@ -902,7 +887,7 @@ track_place(Evas_Object *obj, Grid *g __UNUSED__, Evas_Coord px, Evas_Coord py, } else { - elm_map_utils_convert_geo_into_coord(wd->obj, n->pos.lon, n->pos.lat, size, &x, &y); + elm_map_utils_convert_geo_into_coord(wd->obj, emap_route_node_lon_get(n), emap_route_node_lat_get(n), size, &x, &y); if ((x >= px - ow) && (x <= (px + ow*2)) && (y >= py - oh) && (y <= (py + oh*2))) { @@ -912,9 +897,11 @@ track_place(Evas_Object *obj, Grid *g __UNUSED__, Evas_Coord px, Evas_Coord py, } else t->inbound = EINA_FALSE; } + i++; } t->inbound = EINA_FALSE; } +#endif } static void route_place(Evas_Object *obj, Grid *g __UNUSED__, Evas_Coord px, Evas_Coord py, Evas_Coord ox __UNUSED__, Evas_Coord oy __UNUSED__, Evas_Coord ow, Evas_Coord oh) @@ -3211,66 +3198,6 @@ _utils_convert_name(const Evas_Object *obj, int method, char *address, double lo } -static Eina_Bool -cb_dump_track_attr(void *data, const char *key, const char *value) -{ - Track_Dump *dump = data; - Evas_Object *path; - double d; - - if (!dump) return EINA_FALSE; - if (!strcmp(GPX_LON, key)) - { - sscanf(value, "%lf", &d); - dump->lon = d; - } - else if (!strcmp(GPX_LAT, key)) - { - sscanf(value, "%lf", &d); - dump->lat = d; - } - - if ((dump->lon) && (dump->lat)) - { - Path_Node *n = ELM_NEW(Path_Node); - if (n) - { - n->wd = dump->track->wd; - n->pos.lon = dump->lon; - n->pos.lat = dump->lat; - n->idx = dump->idx++; - INF("[%d] %lf:%lf", n->idx, dump->lon, dump->lat); - n->pos.address = NULL; - dump->track->nodes = eina_list_append(dump->track->nodes, n); - - path = evas_object_polygon_add(evas_object_evas_get(dump->track->wd->obj)); - evas_object_smart_member_add(path, dump->track->wd->pan_smart); - dump->track->path = eina_list_append(dump->track->path, path); - dump->lon = 0.0; - dump->lat = 0.0; - } - } - - return EINA_TRUE; -} - -static Eina_Bool -cb_track_dump(void *data, Eina_Simple_XML_Type type, const char *content, unsigned offset __UNUSED__, unsigned length __UNUSED__) -{ - Track_Dump *d = data; - - if (!d) return EINA_FALSE; - if (type == EINA_SIMPLE_XML_OPEN) - { - if (!strncmp(GPX_COORDINATES, content, strlen(GPX_COORDINATES))) - { - const char *tags = eina_simple_xml_tag_attributes_find(content, length); - eina_simple_xml_attributes_parse(tags, length - (tags - content), cb_dump_track_attr, d); - } - } - return EINA_TRUE; -} - static int idnum = 1; /** @@ -5042,6 +4969,7 @@ elm_map_route_add(Evas_Object *obj, return route; } + /** * Remove a route from the map * @@ -5329,18 +5257,19 @@ elm_map_wheel_disabled_get(const Evas_Object *obj) return wd->wheel_disabled; } +#ifdef HAVE_ELEMENTARY_EMAP /** * Add a track on the map * * @param obj The map object - * @param gpx_file the name of the gpx file + * @param emap the emap object * * @return The Track object * * @ingroup Map */ EAPI Elm_Map_Track * -elm_map_track_add(Evas_Object *obj, const char *gpx_file) +elm_map_track_add(Evas_Object *obj, EMap_Route *emap) { ELM_CHECK_WIDTYPE(obj, widtype) NULL; Widget_Data *wd = elm_widget_data_get(obj); @@ -5356,52 +5285,13 @@ elm_map_track_add(Evas_Object *obj, const char *gpx_file) track->color.g = 0; track->color.b = 255; track->color.a = 255; - - Track_Dump dump = {track, 0, 0.0, 0.0}; - if (!wd->gpx_file) wd->gpx_file = eina_stringshare_add(gpx_file); - else eina_stringshare_replace(&wd->gpx_file, gpx_file); - - f = fopen(gpx_file, "rb"); - if (f) - { - long sz; - - fseek(f, 0, SEEK_END); - sz = ftell(f); - if (sz > 0) - { - char *buf; - - fseek(f, 0, SEEK_SET); - buf = malloc(sz); - if (buf) - { - if (fread(buf, 1, sz, f)) - { - eina_simple_xml_parse(buf, sz, EINA_TRUE, cb_track_dump, &dump); - free(buf); - } - } - } - fclose(f); - } - else - { - ERR("can't open the file %s", gpx_file); - return NULL; - } - DBG("[Done] Load GPX file %s", gpx_file); + track->emap = emap; wd->track = eina_list_append(wd->track, track); - if (wd->grids) - { - Evas_Coord ox, oy, ow, oh; - evas_object_geometry_get(wd->obj, &ox, &oy, &ow, &oh); - track_place(wd->obj, eina_list_data_get(wd->grids), wd->pan_x, wd->pan_y, ox, oy, ow, oh); - } return track; } +#endif /** * Remove a track from the map