[gtk+] iconhelper: Add a scale argument to gtk_icon_helper_load_surface()



commit 482d71d680d1ba07524867c82f2b1c0fdd460dbf
Author: Benjamin Otte <otte redhat com>
Date:   Mon Nov 30 01:33:14 2015 +0100

    iconhelper: Add a scale argument to gtk_icon_helper_load_surface()
    
    It will be used in the next patch.

 gtk/gtkdnd.c               |    9 +++++++--
 gtk/gtkiconhelper.c        |   33 ++++++++++++++++++++-------------
 gtk/gtkiconhelperprivate.h |    3 ++-
 3 files changed, 29 insertions(+), 16 deletions(-)
---
diff --git a/gtk/gtkdnd.c b/gtk/gtkdnd.c
index a91c787..e23c400 100644
--- a/gtk/gtkdnd.c
+++ b/gtk/gtkdnd.c
@@ -885,7 +885,8 @@ gtk_drag_get_cursor (GtkWidget         *widget,
                                  gtk_widget_get_style_context (widget),
                                  &icon_width, &icon_height);
       icon_surface = gtk_icon_helper_load_surface (info->icon_helper,
-                                                   gtk_widget_get_style_context (widget));
+                                                   gtk_widget_get_style_context (widget),
+                                                   scale);
 
       icon_x = info->hot_x;
       icon_y = info->hot_y;
@@ -2787,11 +2788,15 @@ set_icon_helper (GdkDragContext *context,
     {
       cairo_surface_t *source, *surface;
       cairo_pattern_t *pattern;
+      GdkWindow *root;
       cairo_t *cr;
 
       gtk_widget_set_size_request (window, width, height);
 
-      source = gtk_icon_helper_load_surface (helper, gtk_widget_get_style_context (window));
+      root = gdk_screen_get_root_window (screen);
+      source = gtk_icon_helper_load_surface (helper,
+                                             gtk_widget_get_style_context (window),
+                                             gdk_window_get_scale_factor (root));
       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 0deeaaa..d9a1f3d 100644
--- a/gtk/gtkiconhelper.c
+++ b/gtk/gtkiconhelper.c
@@ -550,6 +550,7 @@ ensure_surface_from_surface (GtkIconHelper   *self,
 static gboolean
 get_pixbuf_size (GtkIconHelper   *self,
                  GtkStyleContext *context,
+                 gint             scale,
                  GdkPixbuf       *orig_pixbuf,
                  gint             orig_scale,
                  gint *width_out,
@@ -558,9 +559,7 @@ get_pixbuf_size (GtkIconHelper   *self,
 {
   gboolean scale_pixmap;
   gint width, height;
-  int scale;
 
-  scale = get_scale_factor (self, context);
   scale_pixmap = FALSE;
 
   if (self->priv->force_scale_pixbuf &&
@@ -602,16 +601,17 @@ get_pixbuf_size (GtkIconHelper   *self,
 static cairo_surface_t *
 ensure_surface_from_pixbuf (GtkIconHelper   *self,
                            GtkStyleContext *context,
+                            gint             scale,
                             GdkPixbuf       *orig_pixbuf,
                             gint             orig_scale)
 {
   gint width, height;
   cairo_surface_t *surface;
   GdkPixbuf *pixbuf, *stated;
-  int scale;
 
   if (get_pixbuf_size (self,
                        context,
+                       scale,
                        orig_pixbuf,
                        orig_scale,
                        &width, &height, &scale))
@@ -634,12 +634,13 @@ ensure_surface_from_pixbuf (GtkIconHelper   *self,
 static cairo_surface_t *
 ensure_surface_for_icon_set (GtkIconHelper *self,
                             GtkStyleContext *context,
+                             gint scale,
                             GtkIconSet *icon_set)
 {
 G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
   return gtk_icon_set_render_icon_surface (icon_set, context, 
                                           self->priv->icon_size,
-                                          get_scale_factor (self, context),
+                                          scale,
                                            self->priv->window);
 G_GNUC_END_IGNORE_DEPRECATIONS;
 }
@@ -699,10 +700,11 @@ ensure_stated_surface_from_info (GtkIconHelper *self,
 static cairo_surface_t *
 ensure_surface_for_gicon (GtkIconHelper   *self,
                           GtkStyleContext *context,
+                          gint             scale,
                           GIcon           *gicon)
 {
   GtkIconTheme *icon_theme;
-  gint width, height, scale;
+  gint width, height;
   GtkIconInfo *info;
   GtkIconLookupFlags flags;
   cairo_surface_t *surface;
@@ -711,7 +713,6 @@ ensure_surface_for_gicon (GtkIconHelper   *self,
   flags = get_icon_lookup_flags (self, context);
 
   ensure_icon_size (self, &width, &height);
-  scale = get_scale_factor (self, context);
 
   info = gtk_icon_theme_lookup_by_gicon_for_scale (icon_theme,
                                                    gicon,
@@ -728,7 +729,8 @@ ensure_surface_for_gicon (GtkIconHelper   *self,
 
 cairo_surface_t *
 gtk_icon_helper_load_surface (GtkIconHelper   *self,
-                              GtkStyleContext *context)
+                              GtkStyleContext *context,
+                              int              scale)
 {
   cairo_surface_t *surface;
   GtkIconSet *icon_set;
@@ -741,7 +743,7 @@ gtk_icon_helper_load_surface (GtkIconHelper   *self,
       break;
 
     case GTK_IMAGE_PIXBUF:
-      surface = ensure_surface_from_pixbuf (self, context,
+      surface = ensure_surface_from_pixbuf (self, context, scale,
                                             gtk_image_definition_get_pixbuf (self->priv->def),
                                             gtk_image_definition_get_scale (self->priv->def));
       break;
@@ -750,7 +752,7 @@ gtk_icon_helper_load_surface (GtkIconHelper   *self,
       G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
       icon_set = gtk_icon_factory_lookup_default (gtk_image_definition_get_stock (self->priv->def));
       if (icon_set != NULL)
-       surface = ensure_surface_for_icon_set (self, context, icon_set);
+       surface = ensure_surface_for_icon_set (self, context, scale, icon_set);
       else
        surface = NULL;
       G_GNUC_END_IGNORE_DEPRECATIONS;
@@ -758,7 +760,7 @@ gtk_icon_helper_load_surface (GtkIconHelper   *self,
 
     case GTK_IMAGE_ICON_SET:
       icon_set = gtk_image_definition_get_icon_set (self->priv->def);
-      surface = ensure_surface_for_icon_set (self, context, icon_set);
+      surface = ensure_surface_for_icon_set (self, context, scale, icon_set);
       break;
 
     case GTK_IMAGE_ICON_NAME:
@@ -766,12 +768,12 @@ gtk_icon_helper_load_surface (GtkIconHelper   *self,
         gicon = g_themed_icon_new_with_default_fallbacks (gtk_image_definition_get_icon_name 
(self->priv->def));
       else
         gicon = g_themed_icon_new (gtk_image_definition_get_icon_name (self->priv->def));
-      surface = ensure_surface_for_gicon (self, context, gicon);
+      surface = ensure_surface_for_gicon (self, context, scale, gicon);
       g_object_unref (gicon);
       break;
 
     case GTK_IMAGE_GICON:
-      surface = ensure_surface_for_gicon (self, context, gtk_image_definition_get_gicon (self->priv->def));
+      surface = ensure_surface_for_gicon (self, context, scale, gtk_image_definition_get_gicon 
(self->priv->def));
       break;
 
     case GTK_IMAGE_ANIMATION:
@@ -789,10 +791,14 @@ static void
 gtk_icon_helper_ensure_surface (GtkIconHelper   *self,
                                GtkStyleContext *context)
 {
+  int scale;
+
   if (!check_invalidate_surface (self, context))
     return;
 
-  self->priv->rendered_surface = gtk_icon_helper_load_surface (self, context);
+  scale = get_scale_factor (self, context);
+
+  self->priv->rendered_surface = gtk_icon_helper_load_surface (self, context, scale);
 }
 
 void
@@ -819,6 +825,7 @@ _gtk_icon_helper_get_size (GtkIconHelper *self,
 
     case GTK_IMAGE_PIXBUF:
       get_pixbuf_size (self, context,
+                       get_scale_factor (self, context),
                        gtk_image_definition_get_pixbuf (self->priv->def),
                        gtk_image_definition_get_scale (self->priv->def),
                        &width, &height, &scale);
diff --git a/gtk/gtkiconhelperprivate.h b/gtk/gtkiconhelperprivate.h
index ffb178f..b9a34bd 100644
--- a/gtk/gtkiconhelperprivate.h
+++ b/gtk/gtkiconhelperprivate.h
@@ -122,7 +122,8 @@ 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_load_surface (GtkIconHelper *self,
-                                              GtkStyleContext *context);
+                                              GtkStyleContext *context,
+                                               int              scale);
 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]