[gtk+/gtk-3-18] color chooser: Render icons sharp at scale 2



commit 5d70f4bd44131e4923277370be9df7fe091a0369
Author: Matthias Clasen <mclasen redhat com>
Date:   Wed Oct 7 23:19:32 2015 -0400

    color chooser: Render icons sharp at scale 2
    
    We need to load the icons at the right scale, and render them
    to a surface with the right scale too.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=756195

 gtk/gtkcolorswatch.c |   30 ++++++++++++++++++------------
 1 files changed, 18 insertions(+), 12 deletions(-)
---
diff --git a/gtk/gtkcolorswatch.c b/gtk/gtkcolorswatch.c
index 15770ba..472b4f9 100644
--- a/gtk/gtkcolorswatch.c
+++ b/gtk/gtkcolorswatch.c
@@ -118,6 +118,7 @@ swatch_draw (GtkWidget *widget,
   GtkBorder border, padding;
   GdkRectangle rect;
   GtkIconInfo *icon_info = NULL;
+  gint scale;
 
   theme = gtk_icon_theme_get_default ();
   context = gtk_widget_get_style_context (widget);
@@ -168,11 +169,13 @@ swatch_draw (GtkWidget *widget,
 
   gtk_render_frame (context, cr, 0, 0, width, height);
 
+  scale = gtk_widget_get_scale_factor (widget);
   if (swatch->priv->icon)
     {
-      icon_info = gtk_icon_theme_lookup_icon (theme, swatch->priv->icon, PIXBUF_SIZE,
-                                              GTK_ICON_LOOKUP_GENERIC_FALLBACK
-                                              | GTK_ICON_LOOKUP_USE_BUILTIN);
+      icon_info = gtk_icon_theme_lookup_icon_for_scale (theme, swatch->priv->icon, PIXBUF_SIZE,
+                                                        scale,
+                                                        GTK_ICON_LOOKUP_GENERIC_FALLBACK
+                                                        | GTK_ICON_LOOKUP_USE_BUILTIN);
     }
   else if ((state & GTK_STATE_FLAG_SELECTED) != 0)
     {
@@ -182,9 +185,10 @@ swatch_draw (GtkWidget *widget,
       /* fallback for themes that don't have object-select-symbolic */
       g_themed_icon_append_name (G_THEMED_ICON (gicon), "gtk-apply");
 
-      icon_info = gtk_icon_theme_lookup_by_gicon (theme, gicon, PIXBUF_SIZE,
-                                                  GTK_ICON_LOOKUP_GENERIC_FALLBACK
-                                                  | GTK_ICON_LOOKUP_USE_BUILTIN);
+      icon_info = gtk_icon_theme_lookup_by_gicon_for_scale (theme, gicon, PIXBUF_SIZE,
+                                                            scale,
+                                                            GTK_ICON_LOOKUP_GENERIC_FALLBACK
+                                                            | GTK_ICON_LOOKUP_USE_BUILTIN);
       g_object_unref (gicon);
     }
 
@@ -206,14 +210,16 @@ swatch_draw (GtkWidget *widget,
     {
       GdkPixbuf *pixbuf;
 
-      pixbuf = gtk_icon_info_load_symbolic_for_context (icon_info, context,
-                                                        NULL, NULL);
-
+      pixbuf = gtk_icon_info_load_symbolic_for_context (icon_info, context, NULL, NULL);
       if (pixbuf != NULL)
         {
-          gtk_render_icon (context, cr, pixbuf,
-                           rect.x + (rect.width - gdk_pixbuf_get_width (pixbuf)) / 2,
-                           rect.y + (rect.height - gdk_pixbuf_get_height (pixbuf)) / 2);
+          cairo_surface_t *surface;
+
+          surface = gdk_cairo_surface_create_from_pixbuf (pixbuf, scale, gtk_widget_get_window (widget));
+          gtk_render_icon_surface (context, cr, surface,
+                                   rect.x + (rect.width - (gdk_pixbuf_get_width (pixbuf) / scale)) / 2,
+                                   rect.y + (rect.height - (gdk_pixbuf_get_height (pixbuf) / scale)) / 2);
+          cairo_surface_destroy (surface);
           g_object_unref (pixbuf);
         }
 


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