renderer: Free temporary surfaces
This commit is contained in:
		@ -198,8 +198,7 @@ static void render_button_in_context(EekRenderer *self,
 | 
				
			|||||||
                                     GtkStyleContext *ctx,
 | 
					                                     GtkStyleContext *ctx,
 | 
				
			||||||
                                     struct button_place *place,
 | 
					                                     struct button_place *place,
 | 
				
			||||||
                                     gboolean active) {
 | 
					                                     gboolean active) {
 | 
				
			||||||
    cairo_surface_t *outline_surface;
 | 
					    cairo_surface_t *outline_surface = NULL;
 | 
				
			||||||
    GHashTable *outline_surface_cache;
 | 
					 | 
				
			||||||
    PangoLayout *layout;
 | 
					    PangoLayout *layout;
 | 
				
			||||||
    PangoRectangle extents = { 0, };
 | 
					    PangoRectangle extents = { 0, };
 | 
				
			||||||
    EekColor foreground;
 | 
					    EekColor foreground;
 | 
				
			||||||
@ -208,9 +207,7 @@ static void render_button_in_context(EekRenderer *self,
 | 
				
			|||||||
    /* render outline */
 | 
					    /* render outline */
 | 
				
			||||||
    EekBounds bounds = squeek_button_get_bounds(place->button);
 | 
					    EekBounds bounds = squeek_button_get_bounds(place->button);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    outline_surface = NULL;
 | 
					    {
 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (!outline_surface) {
 | 
					 | 
				
			||||||
        cairo_t *cr;
 | 
					        cairo_t *cr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Outline will be drawn on the outside of the button, so the
 | 
					        // Outline will be drawn on the outside of the button, so the
 | 
				
			||||||
@ -233,6 +230,7 @@ static void render_button_in_context(EekRenderer *self,
 | 
				
			|||||||
        cairo_destroy (cr);
 | 
					        cairo_destroy (cr);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    cairo_set_source_surface (cr, outline_surface, 0.0, 0.0);
 | 
					    cairo_set_source_surface (cr, outline_surface, 0.0, 0.0);
 | 
				
			||||||
 | 
					    cairo_surface_destroy(outline_surface);
 | 
				
			||||||
    cairo_paint (cr);
 | 
					    cairo_paint (cr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    eek_renderer_get_foreground_color (self, ctx, &foreground);
 | 
					    eek_renderer_get_foreground_color (self, ctx, &foreground);
 | 
				
			||||||
@ -261,7 +259,6 @@ static void render_button_in_context(EekRenderer *self,
 | 
				
			|||||||
                                       foreground.alpha);
 | 
					                                       foreground.alpha);
 | 
				
			||||||
            cairo_mask_surface (cr, icon_surface, 0.0, 0.0);
 | 
					            cairo_mask_surface (cr, icon_surface, 0.0, 0.0);
 | 
				
			||||||
            cairo_fill (cr);
 | 
					            cairo_fill (cr);
 | 
				
			||||||
 | 
					 | 
				
			||||||
            cairo_restore (cr);
 | 
					            cairo_restore (cr);
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@ -285,7 +282,6 @@ static void render_button_in_context(EekRenderer *self,
 | 
				
			|||||||
    pango_cairo_show_layout (cr, layout);
 | 
					    pango_cairo_show_layout (cr, layout);
 | 
				
			||||||
    cairo_restore (cr);
 | 
					    cairo_restore (cr);
 | 
				
			||||||
    g_object_unref (layout);
 | 
					    g_object_unref (layout);
 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
@ -838,6 +834,7 @@ eek_renderer_create_pango_layout (EekRenderer  *renderer)
 | 
				
			|||||||
    return pango_layout_new (priv->pcontext);
 | 
					    return pango_layout_new (priv->pcontext);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Surfaces returned from this are cached and must not be freed
 | 
				
			||||||
cairo_surface_t *
 | 
					cairo_surface_t *
 | 
				
			||||||
eek_renderer_get_icon_surface (EekRenderer *renderer,
 | 
					eek_renderer_get_icon_surface (EekRenderer *renderer,
 | 
				
			||||||
                               const gchar *icon_name,
 | 
					                               const gchar *icon_name,
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user