icon_size and pixel_size are gtk.Image properties, so they can also set with icon.props.icon_size =. What about handling this in _sync_image_properties? It seems like we are already calculating width/height from the properties there, and only there.

If we want a default_pixel size, I suspect the best way is to pass it to the GObject __init__ so that it's handled like a normal gobject property.