pygtk2 implements a function called gtk.gdk.get_pixels_array(), which returns the pixel contents of a GDK pixbuf as a numpy array. Fine and dandy, but this means it links against numpy (7 megs) which is itself linked against atlas (12 megs). Kind of a lot for a single function, especially on a live image.
Especially for a function that's basically unused! gnome-applet-music uses it to implement a poor-man's Porter-Duff blend, and that's the only caller currently packaged in Fedora, at least according to package deps. I have a patch (attached) that fixes that [1], which means we could compile our pygtk2 without numpy support and not break anything in Fedora proper. However, google codesearch does turn up what look like a few other users of that function, some of which we may actually want to ship someday. So we've got options: a) remove the explicit Requires: numpy from pygtk2, require apps that actually want this function to Require it themselves b) fake the numpy data type ABI in pygtk2 itself by cult-and-pasting it from numpy c) declare that get_pixels_array() just doesn't work in Fedora (historically true, back in like FC3) d) leave things as they are I lean towards a). I think b) is icky but doable, since that ABI is effectively unbreakable anyway (inherited from the older python-numeric module). The other two are way lame. Thoughts? [1] - Readers are invited to count the wtf's in the code being replaced, as well as in its callers. Don't treat it as a drinking game though. - ajax
diff -up ./music-applet-2.5.1/src/musicapplet/applet.py.jx ./music-applet-2.5.1/src/musicapplet/applet.py
--- ./music-applet-2.5.1/src/musicapplet/applet.py.jx 2009-08-10 15:03:29.000000000 -0400
+++ ./music-applet-2.5.1/src/musicapplet/applet.py 2009-08-10 15:03:36.000000000 -0400
@@ -831,22 +831,11 @@ class Rating (gtk.EventBox):
def create_colorized_pixbuf (self, stock_pixbuf, color):
- pixbuf = stock_pixbuf.copy ()
- red_scale = color.red / 65535.0
- green_scale = color.green / 65535.0
- blue_scale = color.blue / 65535.0
- for row in pixbuf.get_pixels_array ():
- for pixel in row:
- # Yay API changes!
- if str (type (pixel[0])) == "<type 'array'>":
- pixel[0][0] *= red_scale
- pixel[1][0] *= green_scale
- pixel[2][0] *= blue_scale
- else:
- pixel[0] *= red_scale
- pixel[1] *= green_scale
- pixel[2] *= blue_scale
- return pixbuf
+ pixbuf = stock_pixbuf.composite_color_simple(stock_pixbuf.get_width(),
+ stock_pixbuf.get_height(),
+ gtk.gdk.INTERP_NEAREST,
+ 255, 1, color, color)
+ return pixbuf
signature.asc
Description: This is a digitally signed message part
-- fedora-devel-list mailing list [email protected] https://www.redhat.com/mailman/listinfo/fedora-devel-list
