Hi, On Tue, 2017-10-03 at 19:32 +0200, infirit wrote: > Op 10/03/2017 om 03:28 PM schreef Alexander Shaduri: > > > > I have a HiDPI Screen with DPI set to 192, GDK_SCALE=2 and GDK_DPI_SCALE=-1. > > > > I need to get an icon as a pixbuf for GtkIconView. > > Short answer, there is no way to do scaling properly with pixbufs. The > only way I found to do this was setting icon names and using cairo surfaces. Unfortunately, GtkIconView expects pixbufs in the model. I don't see a way to pass cairo surfaces to it. > > This is the code in gtkmm: > > Glib::RefPtr<Gtk::IconTheme> default_icon_theme = Gtk::IconTheme::get_default(); > > Glib::RefPtr<Gdk::Pixbuf> icon = default_icon_theme->load_icon("drive-harddisk", 64, Gtk::IconLookupFlags(0)); > > As others have mentioned use the _at_scale() version of the icon theme > functions, it handles all the necessary scaling for you. To get the > scale factor use gtk_widget_get_scale_factor on the window/widget. Yes, tried that, GtkIconView scales the resulting pixbuf. > Another thing to think about is the quality of the icons. I added proper > scaling for a project and found that the a couple of png icons it used > where in only a single size and of low quality. No matter what you do in > this case there is no way to prevent blurry icons. The quality is not an issue here. I can get a sharp 128-size icon when not using GDK_SCALE=2. > Internally Gtk handles this transparently as long as use icon-names > instead of pixbufs. I highly recommend you use icon-names whenever > possible and use cairo surfaces if you need to draw over or transform > the icon. > > I ended up using gtk_icon_theme_lookup_icon_for_scale and then retrieve > the surface at the very last moment with gtk_icon_info_load_surface. > gtk_icon_info_load_surface also sets the correct scaling factor on the > surface so there is no need to change it with > cairo_surface_set_device_scale. Most widgets will accept the surface > these days and you should start using them. Not GtkIconView, it seems. > > Is there a way to get a sharp icon with gtk_icon_theme_load_icon? > > Yes I managed it as described above. I have a silly experiment in python > that uses cairo surfaces at [1], maybe this helps. The moment you write > to png and use it as source on a widget things go blurry. > > ~infirit > > [1] https://gist.github.com/infirit/7434371b93cf727f7517c4601df602b9 I'm at loss here, I guess this can be viewed as a bug in GtkIconView. Thanks _______________________________________________ gtk-list mailing list gtk-list@xxxxxxxxx https://mail.gnome.org/mailman/listinfo/gtk-list