Re: gtk_icon_theme_load_icon and GDK_SCALE=2 results in blurry icon
- From: Alexander Shaduri <ashaduri gmail com>
- To: infirit <infirit gmail com>, gtk-list gnome org
- Subject: Re: gtk_icon_theme_load_icon and GDK_SCALE=2 results in blurry icon
- Date: Thu, 05 Oct 2017 00:26:22 +0400
Hi,
On Tue, 2017-10-03 at 20:13 +0200, infirit wrote:
See bug 765167 [1] it has an example in python how you can still use a
surface in the GtkIconView. You should be able to translate this pretty
easily to C/C++.
~infirit
[1] https://bugzilla.gnome.org/show_bug.cgi?id=765167#c5.
Thanks a lot for the pointer. I was able to translate this into Gtkmm.
This fixes my issue, although I wish GTK would implement a proper
method for doing this.
This is the code, if anyone is interested:
class MainWindowIconView : public Gtk::IconView {
public:
Gtk::CellRendererPixbuf cell_renderer_pixbuf; ///< Cell renderer for icons.
Gtk::TreeModelColumn<Glib::RefPtr<Gdk::Pixbuf> > col_pixbuf; ///< Model column
// ...
MainWindowIconView()
{
// ...
columns.add(col_pixbuf);
// For high quality rendering with GDK_SCALE=2
this->pack_start(cell_renderer_pixbuf, false);
this->set_cell_data_func(cell_renderer_pixbuf,
sigc::mem_fun(this, &MainWindowIconView::on_cell_data_render));
// ...
}
/// Cell data renderer (needed for high quality icons in GDK_SCALE=2).
/// We have to use Cairo surfaces, because pixbufs are scaled by GtkIconView.
void on_cell_data_render(const Gtk::TreeModel::const_iterator& iter)
{
Gtk::TreeRow row = *iter;
Glib::RefPtr<Gdk::Pixbuf> pixbuf = row[col_pixbuf];
// Gtkmm property_surface() doesn't work, so use plain C.
cairo_surface_t* surface = gdk_cairo_surface_create_from_pixbuf(
pixbuf->gobj(), get_scale_factor(), get_window()->gobj());
g_object_set(G_OBJECT(cell_renderer_pixbuf.gobj()), "surface", surface, NULL);
cairo_surface_destroy(surface);
}
// ...
};
Thanks,
Alexander
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]