The method above gives me an icon with an emblem on top, but the emblem is smaller than expected and not positioned with an offset like most file browsers. It's very difficult to see at this size compared to other apps. Larger sizes aren't as much a problem, but most people will be seeing the icons at the 16x16 size.
Can't seem to find a way to specify the emblem size or offset.
And can't figure out why it's different than Xfdesktop or Thunar, which I believe use the same method.
If anyone could give me some ideas I'd really appreciate it.
Attached image is a comparison of my method (Top icon) and Thunar (Bottom icon) using two different themes.
Thanks very much for the help!
I kind of used the Xfdesktop method, and it seems to have worked nicely! I guess the Gio.EmblemedIcon method doesn't allow for scaling or positioning the emblem. And on top of that, Thunar and Xfdesktop have the emblem on an offset which you can't do without expanding the image size. So to do that I had to use GdkPixbuf composite.
I made a new slightly larger empty/transparent icon, overlayed the regular icon, then scaling and offsetting the emblem then overlaying the emblem. The extra room let me have the emblem off to the side like Thunar and Xfdesktop.
That means that instead of a 16x16px icon I have a 22x22px icon but the Gtk CellRendererPixbuf doesn't seem to care and it looks just the same.
So thanks again very much! I was having a hard time figuring that out!
Here's what I came up with. Maybe it can help someone else out. And if anyone else has any input or ways I could make it better I'd really appreciate that too!
import gi gi.require_version("Gtk", "3.0") # noqa from gi.repository import Gtk, Gio, GLib, GdkPixbuf theme = Gtk.IconTheme.get_default() new_icon = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace(0), True, 8, 22, 22) new_icon.fill(0) icon_pixbuf = theme.load_icon('audio-x-wav', 16, 0) GdkPixbuf.Pixbuf.composite(icon_pixbuf, new_icon, 3, 3, 16, 16, 3.0, 3.0, 1.0, 1.0, GdkPixbuf.InterpType.NEAREST, 255) emblem_pixbuf = theme.load_icon('emblem-symbolic-link', 16, 0) scaled = GdkPixbuf.Pixbuf.scale_simple(emblem_pixbuf, 12, 12, GdkPixbuf.InterpType.BILINEAR) GdkPixbuf.Pixbuf.composite(scaled, new_icon, 10, 10, 12, 12, 10.0, 10.0, 1.0, 1.0, GdkPixbuf.InterpType.NEAREST, 255) img = Gtk.Image.new_from_pixbuf(new_icon) loc = '/home/new_icon16.png' GdkPixbuf.Pixbuf.savev(new_icon, loc, 'png', , ) win = Gtk.Window() win.add(img) win.set_size_request(150, 150) win.connect("destroy", Gtk.main_quit) win.show_all() Gtk.main()
First is OP Emblemed method, Second is Thunar, Third is this new Composite method