From ae53954e8d951923cac226f0c576449072480e84 Mon Sep 17 00:00:00 2001 From: Andy Spencer Date: Wed, 10 Feb 2010 13:13:50 +0000 Subject: [PATCH] Add outline to markers --- src/objects/gis-marker.c | 31 +++++++++++++++++++++++++------ src/plugins/map.c | 2 +- src/plugins/test.c | 2 +- 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/src/objects/gis-marker.c b/src/objects/gis-marker.c index fc4beb1..33caab0 100644 --- a/src/objects/gis-marker.c +++ b/src/objects/gis-marker.c @@ -47,21 +47,40 @@ GisMarker *gis_marker_new(const gchar *label) { //g_debug("GisMarker: new - %s", label); - static const int RADIUS = 4; - static const int WIDTH = 100; - static const int HEIGHT = 20; + static const gint OUTLINE = 2; + static const gint RADIUS = 4; + static const gint WIDTH = 120; + static const gint HEIGHT = 40; GisMarker *marker = g_object_new(GIS_TYPE_MARKER, NULL); - marker->xoff = RADIUS; - marker->yoff = HEIGHT-RADIUS; + marker->xoff = RADIUS+OUTLINE; + marker->yoff = HEIGHT-(RADIUS+OUTLINE); marker->label = g_strdup(label); marker->cairo = cairo_create(cairo_image_surface_create( CAIRO_FORMAT_ARGB32, WIDTH, HEIGHT)); + + cairo_select_font_face(marker->cairo, "sans-serif", + CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD); + cairo_set_font_size(marker->cairo, 14); + + /* Draw outline */ + cairo_set_source_rgba(marker->cairo, 0, 0, 0, 1); + cairo_set_line_width(marker->cairo, OUTLINE*2); + + cairo_arc(marker->cairo, marker->xoff, marker->yoff, RADIUS, 0, 2*G_PI); + cairo_stroke(marker->cairo); + + cairo_move_to(marker->cairo, marker->xoff+4, marker->yoff-8); + cairo_text_path(marker->cairo, marker->label); + cairo_stroke(marker->cairo); + + /* Draw filler */ cairo_set_source_rgba(marker->cairo, 1, 1, 1, 1); + cairo_arc(marker->cairo, marker->xoff, marker->yoff, RADIUS, 0, 2*G_PI); cairo_fill(marker->cairo); + cairo_move_to(marker->cairo, marker->xoff+4, marker->yoff-8); - cairo_set_font_size(marker->cairo, 10); cairo_show_text(marker->cairo, marker->label); return marker; } diff --git a/src/plugins/map.c b/src/plugins/map.c index 0ae8ef6..a0f28dc 100644 --- a/src/plugins/map.c +++ b/src/plugins/map.c @@ -188,7 +188,7 @@ GisPluginMap *gis_plugin_map_new(GisViewer *viewer) G_CALLBACK(_on_location_changed), map); /* Add renderers */ - gis_viewer_add(viewer, GIS_OBJECT(map->tiles), GIS_LEVEL_OVERLAY, 0); + gis_viewer_add(viewer, GIS_OBJECT(map->tiles), GIS_LEVEL_OVERLAY-1, 0); return map; } diff --git a/src/plugins/test.c b/src/plugins/test.c index 47eadd5..4dbc838 100644 --- a/src/plugins/test.c +++ b/src/plugins/test.c @@ -50,7 +50,7 @@ GisPluginTest *gis_plugin_test_new(GisViewer *viewer) GisMarker *marker = gis_marker_new("St. Charles"); gis_point_set_lle(gis_object_center(marker), 38.841847, -90.491982, 0); - GIS_OBJECT(marker)->lod = EARTH_R/4; + GIS_OBJECT(marker)->lod = EARTH_R; test->marker = gis_viewer_add(test->viewer, GIS_OBJECT(marker), GIS_LEVEL_OVERLAY, 0); return test; -- 2.43.2