forked from enlightenment/efl
elm_map: add copyright_cb for osm tile source.
Summary: - According to Copyright and license in Openstreetmap (https://www.openstreetmap.org/copyright/en) credit has to be in the corner of map. - Add copyright_cb which returns an object to show copyright. Test Plan: 1. Excecute elementary_test->map 2. Right click->source->set any tile source 3. Observe copyright is added. Reviewers: cedric, Hermet, jpeg Subscribers: conr2d Differential Revision: https://phab.enlightenment.org/D4449
This commit is contained in:
parent
6262cbfb62
commit
32635ad7bd
|
@ -264,14 +264,27 @@ _scale_cb(const Evas_Object *obj EINA_UNUSED,
|
||||||
return _osm_scale_meter[zoom] * cos(lat * ELM_PI / 180.0);
|
return _osm_scale_meter[zoom] * cos(lat * ELM_PI / 180.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Evas_Object *
|
||||||
|
_osm_copyright_cb(Evas_Object *obj)
|
||||||
|
{
|
||||||
|
Evas_Object *label;
|
||||||
|
|
||||||
|
label = elm_label_add(obj);
|
||||||
|
elm_object_text_set(label, "<color=#000000FF><backing=on><backing_color=#FCFCFBFF><shadow_color=#00000000>"
|
||||||
|
"openstreetmap.org opendatacommons.org creativecommons.org"
|
||||||
|
"</shadow_color></backing_color></backing></color>");
|
||||||
|
|
||||||
|
return label;
|
||||||
|
}
|
||||||
|
|
||||||
static const Source_Tile src_tiles[] =
|
static const Source_Tile src_tiles[] =
|
||||||
{
|
{
|
||||||
{"Mapnik", 0, 18, _mapnik_url_cb, NULL, NULL, _scale_cb},
|
{"Mapnik", 0, 18, _mapnik_url_cb, NULL, NULL, _scale_cb, _osm_copyright_cb},
|
||||||
{"Osmarender", 0, 17, _osmarender_url_cb, NULL, NULL, _scale_cb},
|
{"Osmarender", 0, 17, _osmarender_url_cb, NULL, NULL, _scale_cb, _osm_copyright_cb},
|
||||||
{"CycleMap", 0, 16, _cyclemap_url_cb, NULL, NULL, _scale_cb},
|
{"CycleMap", 0, 16, _cyclemap_url_cb, NULL, NULL, _scale_cb, _osm_copyright_cb},
|
||||||
{"MapQuest", 0, 18, _mapquest_url_cb, NULL, NULL, _scale_cb},
|
{"MapQuest", 0, 18, _mapquest_url_cb, NULL, NULL, _scale_cb, _osm_copyright_cb},
|
||||||
{"MapQuest Open Aerial", 0, 11, _mapquest_aerial_url_cb, NULL, NULL,
|
{"MapQuest Open Aerial", 0, 11, _mapquest_aerial_url_cb, NULL, NULL,
|
||||||
_scale_cb}
|
_scale_cb, _osm_copyright_cb}
|
||||||
};
|
};
|
||||||
|
|
||||||
static void _kml_parse(Elm_Map_Route *r);
|
static void _kml_parse(Elm_Map_Route *r);
|
||||||
|
@ -2650,6 +2663,18 @@ _overlay_show(Elm_Map_Overlay *overlay)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_copyright_place(Elm_Map_Data *sd)
|
||||||
|
{
|
||||||
|
Evas_Coord w, h;
|
||||||
|
Evas_Coord vw, vx, vy, vh;
|
||||||
|
|
||||||
|
_viewport_coord_get(sd, &vx, &vy, &vw, &vh);
|
||||||
|
_coord_to_canvas_no_rotation(sd, vx, vy, &vx, &vy);
|
||||||
|
evas_object_size_hint_min_get(sd->copyright, &w, &h);
|
||||||
|
_obj_place(sd->copyright, vx + vw - w, vy + vh - h, w, h);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_overlay_place(Elm_Map_Data *sd)
|
_overlay_place(Elm_Map_Data *sd)
|
||||||
{
|
{
|
||||||
|
@ -3406,6 +3431,17 @@ _source_tile_set(Elm_Map_Data *sd,
|
||||||
if (sd->src_tile->zoom_min > sd->zoom_min)
|
if (sd->src_tile->zoom_min > sd->zoom_min)
|
||||||
sd->zoom_min = sd->src_tile->zoom_min;
|
sd->zoom_min = sd->src_tile->zoom_min;
|
||||||
|
|
||||||
|
ELM_SAFE_FREE(sd->copyright, evas_object_del);
|
||||||
|
if (sd->src_tile->copyright_cb)
|
||||||
|
{
|
||||||
|
sd->copyright = sd->src_tile->copyright_cb(sd->obj);
|
||||||
|
if (sd->copyright)
|
||||||
|
{
|
||||||
|
evas_object_smart_member_add(sd->copyright, sd->pan_obj);
|
||||||
|
evas_object_stack_above(sd->copyright, sd->sep_maps_overlays);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
_grid_all_clear(sd);
|
_grid_all_clear(sd);
|
||||||
_grid_all_create(sd);
|
_grid_all_create(sd);
|
||||||
_zoom_do(sd, sd->zoom);
|
_zoom_do(sd, sd->zoom);
|
||||||
|
@ -3477,6 +3513,7 @@ _source_mod_cb(Eina_Module *m,
|
||||||
Elm_Map_Module_Source_Name_Func name_cb;
|
Elm_Map_Module_Source_Name_Func name_cb;
|
||||||
Elm_Map_Module_Tile_Url_Func tile_url_cb;
|
Elm_Map_Module_Tile_Url_Func tile_url_cb;
|
||||||
Elm_Map_Module_Tile_Scale_Func scale_cb;
|
Elm_Map_Module_Tile_Scale_Func scale_cb;
|
||||||
|
Elm_Map_Module_Tile_Copyright_Func copyright_cb;
|
||||||
Elm_Map_Module_Tile_Zoom_Min_Func zoom_min;
|
Elm_Map_Module_Tile_Zoom_Min_Func zoom_min;
|
||||||
Elm_Map_Module_Tile_Zoom_Max_Func zoom_max;
|
Elm_Map_Module_Tile_Zoom_Max_Func zoom_max;
|
||||||
Elm_Map_Module_Tile_Geo_to_Coord_Func geo_to_coord;
|
Elm_Map_Module_Tile_Geo_to_Coord_Func geo_to_coord;
|
||||||
|
@ -3503,7 +3540,6 @@ _source_mod_cb(Eina_Module *m,
|
||||||
return EINA_FALSE;
|
return EINA_FALSE;
|
||||||
}
|
}
|
||||||
free(dir);
|
free(dir);
|
||||||
|
|
||||||
if (!eina_module_load(m)) return EINA_FALSE;
|
if (!eina_module_load(m)) return EINA_FALSE;
|
||||||
|
|
||||||
name_cb = eina_module_symbol_get(m, "map_module_source_name_get");
|
name_cb = eina_module_symbol_get(m, "map_module_source_name_get");
|
||||||
|
@ -3520,6 +3556,7 @@ _source_mod_cb(Eina_Module *m,
|
||||||
geo_to_coord = eina_module_symbol_get(m, "map_module_tile_geo_to_coord");
|
geo_to_coord = eina_module_symbol_get(m, "map_module_tile_geo_to_coord");
|
||||||
coord_to_geo = eina_module_symbol_get(m, "map_module_tile_coord_to_geo");
|
coord_to_geo = eina_module_symbol_get(m, "map_module_tile_coord_to_geo");
|
||||||
scale_cb = eina_module_symbol_get(m, "map_module_tile_scale_get");
|
scale_cb = eina_module_symbol_get(m, "map_module_tile_scale_get");
|
||||||
|
copyright_cb = eina_module_symbol_get(m, "map_module_tile_copyright_get");
|
||||||
if (tile_url_cb && zoom_min && zoom_max && geo_to_coord && coord_to_geo &&
|
if (tile_url_cb && zoom_min && zoom_max && geo_to_coord && coord_to_geo &&
|
||||||
scale_cb)
|
scale_cb)
|
||||||
{
|
{
|
||||||
|
@ -3533,6 +3570,7 @@ _source_mod_cb(Eina_Module *m,
|
||||||
s->geo_to_coord = geo_to_coord;
|
s->geo_to_coord = geo_to_coord;
|
||||||
s->coord_to_geo = coord_to_geo;
|
s->coord_to_geo = coord_to_geo;
|
||||||
s->scale_cb = scale_cb;
|
s->scale_cb = scale_cb;
|
||||||
|
s->copyright_cb = copyright_cb;
|
||||||
sd->src_tiles = eina_list_append(sd->src_tiles, s);
|
sd->src_tiles = eina_list_append(sd->src_tiles, s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3629,6 +3667,7 @@ _source_all_load(Elm_Map_Data *sd)
|
||||||
src_tile->geo_to_coord = src_tiles[idx].geo_to_coord;
|
src_tile->geo_to_coord = src_tiles[idx].geo_to_coord;
|
||||||
src_tile->coord_to_geo = src_tiles[idx].coord_to_geo;
|
src_tile->coord_to_geo = src_tiles[idx].coord_to_geo;
|
||||||
src_tile->scale_cb = src_tiles[idx].scale_cb;
|
src_tile->scale_cb = src_tiles[idx].scale_cb;
|
||||||
|
src_tile->copyright_cb = src_tiles[idx].copyright_cb;
|
||||||
sd->src_tiles = eina_list_append(sd->src_tiles, src_tile);
|
sd->src_tiles = eina_list_append(sd->src_tiles, src_tile);
|
||||||
}
|
}
|
||||||
// Load hard coded ROUTE source
|
// Load hard coded ROUTE source
|
||||||
|
@ -3885,6 +3924,8 @@ _elm_map_pan_efl_canvas_group_group_calculate(Eo *obj, Elm_Map_Pan_Data *psd)
|
||||||
if (w <= 0 || h <= 0) return;
|
if (w <= 0 || h <= 0) return;
|
||||||
|
|
||||||
_grid_place(psd->wsd);
|
_grid_place(psd->wsd);
|
||||||
|
if (psd->wsd->copyright)
|
||||||
|
_copyright_place(psd->wsd);
|
||||||
_overlay_place(psd->wsd);
|
_overlay_place(psd->wsd);
|
||||||
_track_place(psd->wsd);
|
_track_place(psd->wsd);
|
||||||
_calc_job(psd->wsd);
|
_calc_job(psd->wsd);
|
||||||
|
@ -4150,6 +4191,16 @@ _elm_map_efl_canvas_group_group_add(Eo *obj, Elm_Map_Data *priv)
|
||||||
|
|
||||||
if (!ecore_file_download_protocol_available("http://"))
|
if (!ecore_file_download_protocol_available("http://"))
|
||||||
ERR("Ecore must be built with curl support for the map widget!");
|
ERR("Ecore must be built with curl support for the map widget!");
|
||||||
|
|
||||||
|
if (priv->src_tile->copyright_cb)
|
||||||
|
{
|
||||||
|
priv->copyright = priv->src_tile->copyright_cb(obj);
|
||||||
|
if (priv->copyright)
|
||||||
|
{
|
||||||
|
evas_object_smart_member_add(priv->copyright, priv->pan_obj);
|
||||||
|
evas_object_stack_above(priv->copyright, priv->sep_maps_overlays);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
EOLIAN static void
|
EOLIAN static void
|
||||||
|
@ -4209,6 +4260,7 @@ _elm_map_efl_canvas_group_group_del(Eo *obj, Elm_Map_Data *sd)
|
||||||
evas_object_del(sd->pan_obj);
|
evas_object_del(sd->pan_obj);
|
||||||
sd->pan_obj = NULL;
|
sd->pan_obj = NULL;
|
||||||
|
|
||||||
|
ELM_SAFE_FREE(sd->copyright, evas_object_del);
|
||||||
efl_canvas_group_del(efl_super(obj, MY_CLASS));
|
efl_canvas_group_del(efl_super(obj, MY_CLASS));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -51,6 +51,7 @@ typedef double (*Elm_Map_Module_Tile_Scale_Func)(const Evas_Object *,
|
||||||
double,
|
double,
|
||||||
double,
|
double,
|
||||||
int);
|
int);
|
||||||
|
typedef Evas_Object *(*Elm_Map_Module_Tile_Copyright_Func)(Evas_Object *);
|
||||||
typedef char *(*Elm_Map_Module_Route_Url_Func)(const Evas_Object *,
|
typedef char *(*Elm_Map_Module_Route_Url_Func)(const Evas_Object *,
|
||||||
const char *,
|
const char *,
|
||||||
int,
|
int,
|
||||||
|
@ -79,6 +80,7 @@ struct _Source_Tile
|
||||||
Elm_Map_Module_Tile_Geo_to_Coord_Func geo_to_coord;
|
Elm_Map_Module_Tile_Geo_to_Coord_Func geo_to_coord;
|
||||||
Elm_Map_Module_Tile_Coord_to_Geo_Func coord_to_geo;
|
Elm_Map_Module_Tile_Coord_to_Geo_Func coord_to_geo;
|
||||||
Elm_Map_Module_Tile_Scale_Func scale_cb;
|
Elm_Map_Module_Tile_Scale_Func scale_cb;
|
||||||
|
Elm_Map_Module_Tile_Copyright_Func copyright_cb;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct _Source_Route Source_Route;
|
typedef struct _Source_Route Source_Route;
|
||||||
|
@ -490,6 +492,7 @@ struct _Elm_Map_Data
|
||||||
Eina_Bool zoom_animator : 1;
|
Eina_Bool zoom_animator : 1;
|
||||||
|
|
||||||
Calc_Job calc_job;
|
Calc_Job calc_job;
|
||||||
|
Evas_Object *copyright;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct _Elm_Map_Pan_Data Elm_Map_Pan_Data;
|
typedef struct _Elm_Map_Pan_Data Elm_Map_Pan_Data;
|
||||||
|
|
|
@ -87,6 +87,12 @@ map_module_tile_scale_get(const Evas_Object *obj EINA_UNUSED, double lon EINA_UN
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EAPI Evas_Object *
|
||||||
|
map_module_tile_copyright_get(Evas_Object *obj EINA_UNUSED)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
static Eina_Bool
|
static Eina_Bool
|
||||||
_module_init(void)
|
_module_init(void)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue