[gtk+] iconhelper: Refactor ensure_surface()



commit afad393b15631b18f76708599deb2ea0f097620c
Author: Benjamin Otte <otte redhat com>
Date:   Mon Nov 30 00:55:43 2015 +0100

    iconhelper: Refactor ensure_surface()
    
    Make gtk_icon_helper_ensure_surface() a private function that just
    ensures the surface was loaded.
    
    Add gtk_icon_helper_load_surface() that is called by the above function
    and the dnd code to actually load the surface.

 gtk/gtkdnd.c               |    6 +++---
 gtk/gtkiconhelper.c        |   38 +++++++++++++++++++++-----------------
 gtk/gtkiconhelperprivate.h |    4 ++--
 3 files changed, 26 insertions(+), 22 deletions(-)
---
diff --git a/gtk/gtkdnd.c b/gtk/gtkdnd.c
index 396f14b..a91c787 100644
--- a/gtk/gtkdnd.c
+++ b/gtk/gtkdnd.c
@@ -884,8 +884,8 @@ gtk_drag_get_cursor (GtkWidget         *widget,
       _gtk_icon_helper_get_size (info->icon_helper,
                                  gtk_widget_get_style_context (widget),
                                  &icon_width, &icon_height);
-      icon_surface = _gtk_icon_helper_ensure_surface (info->icon_helper,
-                                                      gtk_widget_get_style_context (widget));
+      icon_surface = gtk_icon_helper_load_surface (info->icon_helper,
+                                                   gtk_widget_get_style_context (widget));
 
       icon_x = info->hot_x;
       icon_y = info->hot_y;
@@ -2791,7 +2791,7 @@ set_icon_helper (GdkDragContext *context,
 
       gtk_widget_set_size_request (window, width, height);
 
-      source = _gtk_icon_helper_ensure_surface (helper, gtk_widget_get_style_context (window));
+      source = gtk_icon_helper_load_surface (helper, gtk_widget_get_style_context (window));
       surface = gdk_window_create_similar_surface (gdk_screen_get_root_window (screen),
                                                    CAIRO_CONTENT_COLOR,
                                                    width, height);
diff --git a/gtk/gtkiconhelper.c b/gtk/gtkiconhelper.c
index 799017c..0deeaaa 100644
--- a/gtk/gtkiconhelper.c
+++ b/gtk/gtkiconhelper.c
@@ -727,16 +727,13 @@ ensure_surface_for_gicon (GtkIconHelper   *self,
 }
 
 cairo_surface_t *
-_gtk_icon_helper_ensure_surface (GtkIconHelper *self,
-                                GtkStyleContext *context)
+gtk_icon_helper_load_surface (GtkIconHelper   *self,
+                              GtkStyleContext *context)
 {
   cairo_surface_t *surface;
   GtkIconSet *icon_set;
   GIcon *gicon;
 
-  if (!check_invalidate_surface (self, context))
-    return self->priv->rendered_surface;
-
   switch (gtk_image_definition_get_storage_type (self->priv->def))
     {
     case GTK_IMAGE_SURFACE:
@@ -784,9 +781,18 @@ _gtk_icon_helper_ensure_surface (GtkIconHelper *self,
       break;
     }
 
-  self->priv->rendered_surface = surface;
+  return surface;
 
-  return cairo_surface_reference (surface);
+}
+
+static void
+gtk_icon_helper_ensure_surface (GtkIconHelper   *self,
+                               GtkStyleContext *context)
+{
+  if (!check_invalidate_surface (self, context))
+    return;
+
+  self->priv->rendered_surface = gtk_icon_helper_load_surface (self, context);
 }
 
 void
@@ -795,7 +801,6 @@ _gtk_icon_helper_get_size (GtkIconHelper *self,
                            gint *width_out,
                            gint *height_out)
 {
-  cairo_surface_t *surface;
   gint width, height, scale;
 
   width = height = 0;
@@ -846,12 +851,11 @@ _gtk_icon_helper_get_size (GtkIconHelper *self,
   /* Otherwise we load the surface to guarantee we get a size */
   if (width == 0)
     {
-      surface = _gtk_icon_helper_ensure_surface (self, context);
+      gtk_icon_helper_ensure_surface (self, context);
 
-      if (surface != NULL)
+      if (self->priv->rendered_surface != NULL)
         {
-          get_surface_size (self, surface, &width, &height);
-          cairo_surface_destroy (surface);
+          get_surface_size (self, self->priv->rendered_surface, &width, &height);
         }
       else if (self->priv->icon_size != GTK_ICON_SIZE_INVALID)
         {
@@ -1046,13 +1050,13 @@ _gtk_icon_helper_draw (GtkIconHelper *self,
                        gdouble x,
                        gdouble y)
 {
-  cairo_surface_t *surface;
+  gtk_icon_helper_ensure_surface (self, context);
 
-  surface = _gtk_icon_helper_ensure_surface (self, context);
-  if (surface != NULL)
+  if (self->priv->rendered_surface != NULL)
     {
-      gtk_render_icon_surface (context, cr, surface, x, y);
-      cairo_surface_destroy (surface);
+      gtk_render_icon_surface (context, cr, 
+                               self->priv->rendered_surface,
+                               x, y);
     }
 }
 
diff --git a/gtk/gtkiconhelperprivate.h b/gtk/gtkiconhelperprivate.h
index 1e98f29..ffb178f 100644
--- a/gtk/gtkiconhelperprivate.h
+++ b/gtk/gtkiconhelperprivate.h
@@ -121,8 +121,8 @@ cairo_surface_t *_gtk_icon_helper_peek_surface (GtkIconHelper *self);
 const gchar *_gtk_icon_helper_get_stock_id (GtkIconHelper *self);
 const gchar *_gtk_icon_helper_get_icon_name (GtkIconHelper *self);
 
-cairo_surface_t *_gtk_icon_helper_ensure_surface (GtkIconHelper *self,
-                                                 GtkStyleContext *context);
+cairo_surface_t *gtk_icon_helper_load_surface (GtkIconHelper *self,
+                                              GtkStyleContext *context);
 GdkPixbuf *_gtk_icon_helper_ensure_pixbuf (GtkIconHelper *self,
                                            GtkStyleContext *context);
 void _gtk_icon_helper_get_size (GtkIconHelper *self,


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]