[libchamplain] Draw error-tiles if no map data is available
- From: Pierre-Luc Beaudoin <plbeaudoin src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [libchamplain] Draw error-tiles if no map data is available
- Date: Sun, 24 Jan 2010 20:10:55 +0000 (UTC)
commit 3bc469087c5de418a7ad3e2473f3ffca5d6dcfab
Author: Simon Wenner <simon wenner ch>
Date: Thu Jul 16 00:09:06 2009 +0200
Draw error-tiles if no map data is available
champlain/champlain-memphis-map-source.c | 45 +++++++++++++++++++++++++++++-
1 files changed, 44 insertions(+), 1 deletions(-)
---
diff --git a/champlain/champlain-memphis-map-source.c b/champlain/champlain-memphis-map-source.c
index 8d82a44..cee97c0 100644
--- a/champlain/champlain-memphis-map-source.c
+++ b/champlain/champlain-memphis-map-source.c
@@ -182,6 +182,47 @@ map_data_changed_cb (ChamplainMapDataSource *map_data_source,
champlain_memphis_map_source_delete_session_cache (map_source);
}
+// TODO: share this function with ChamplainNetworkMapSource
+static void
+create_error_tile (ChamplainTile* tile)
+{
+ ClutterActor *actor;
+ cairo_t *cr;
+ cairo_pattern_t *pat;
+ guint size;
+
+ size = champlain_tile_get_size (tile);
+ actor = clutter_cairo_new (size, size);
+ cr = clutter_cairo_create (CLUTTER_CAIRO(actor));
+
+ /* draw a linear gray to white pattern */
+ pat = cairo_pattern_create_linear (size / 2.0, 0.0, size, size / 2.0);
+ cairo_pattern_add_color_stop_rgb (pat, 0, 0.686, 0.686, 0.686);
+ cairo_pattern_add_color_stop_rgb (pat, 1, 0.925, 0.925, 0.925);
+ cairo_set_source (cr, pat);
+ cairo_rectangle (cr, 0, 0, size, size);
+ cairo_fill (cr);
+
+ cairo_pattern_destroy (pat);
+
+ /* draw the red cross */
+ cairo_set_source_rgb (cr, 0.424, 0.078, 0.078);
+ cairo_set_line_width (cr, 14.0);
+ cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND);
+ cairo_move_to (cr, 24, 24);
+ cairo_line_to (cr, 50, 50);
+ cairo_move_to (cr, 50, 24);
+ cairo_line_to (cr, 24, 50);
+ cairo_stroke (cr);
+
+ cairo_destroy (cr);
+
+ champlain_tile_set_content (tile, actor, TRUE);
+ clutter_actor_show (actor);
+
+ champlain_tile_set_state (tile, CHAMPLAIN_STATE_DONE);
+}
+
static void
fill_tile (ChamplainMapSource *map_source, ChamplainTile *tile)
{
@@ -215,7 +256,9 @@ fill_tile (ChamplainMapSource *map_source, ChamplainTile *tile)
champlain_tile_get_x (tile),
champlain_tile_get_y (tile),
champlain_tile_get_zoom_level (tile));
- // TODO: draw an error tile
+
+ create_error_tile (tile);
+ g_object_unref (tile);
}
else
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]