[libchamplain/libchamplain-0-4] Safe memory usage by using a clone instead of creating (and drawing) a new error tile)
- From: Pierre-Luc Beaudoin <plbeaudoin src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [libchamplain/libchamplain-0-4] Safe memory usage by using a clone instead of creating (and drawing) a new error tile)
- Date: Tue, 5 Jan 2010 19:03:06 +0000 (UTC)
commit ff13c87a172229be168887450f79c470a0b0a808
Author: Pierre-Luc Beaudoin <pierre-luc pierlux com>
Date: Tue Jan 5 01:15:10 2010 -0500
Safe memory usage by using a clone instead of creating (and drawing) a new error tile)
champlain/champlain-network-map-source.c | 78 +++++++++++++++++-------------
1 files changed, 45 insertions(+), 33 deletions(-)
---
diff --git a/champlain/champlain-network-map-source.c b/champlain/champlain-network-map-source.c
index 883d296..a2c1cfc 100644
--- a/champlain/champlain-network-map-source.c
+++ b/champlain/champlain-network-map-source.c
@@ -385,43 +385,55 @@ get_filename (ChamplainNetworkMapSource *source,
champlain_tile_get_x (tile), champlain_tile_get_y (tile));
}
+static ClutterActor *error_actor = NULL;
+
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_texture_new (size, size);
- cr = clutter_cairo_texture_create (CLUTTER_CAIRO_TEXTURE (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);
+ ClutterActor *clone;
- champlain_tile_set_content (tile, actor, TRUE);
- clutter_actor_show (actor);
+ if (!error_actor)
+ {
+ guint size;
+ ClutterActor *actor;
+ cairo_t *cr;
+ cairo_pattern_t *pat;
+ ClutterActor *stage;
+
+ size = champlain_tile_get_size (tile);
+ actor = clutter_cairo_texture_new (size, size);
+ cr = clutter_cairo_texture_create (CLUTTER_CAIRO_TEXTURE (actor));
+ stage = clutter_stage_get_default ();
+
+ /* 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);
+
+ clutter_actor_show (actor);
+ clutter_container_add_actor (CLUTTER_CONTAINER (stage), actor);
+ error_actor = actor;
+ }
+ clone = clutter_clone_new (error_actor);
+ champlain_tile_set_content (tile, clone, TRUE);
champlain_tile_set_state (tile, CHAMPLAIN_STATE_DONE);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]