From: Axel S. <si...@co...> - 2010-05-20 15:18:57
|
diffing dir... Sat Feb 20 13:13:59 EST 2010 ar...@rp... * Add pixbufRenderThresholdAlpha Ignore-this: f7c25ecfc1aba9f8437d7b49bda903be { hunk ./gtk/Graphics/UI/Gtk/Gdk/Pixbuf.chs 113 - pixbufGetFromDrawable + pixbufGetFromDrawable, + + pixbufRenderThresholdAlpha, + pixbufRenderPixmapAndMaskForColormap hunk ./gtk/Graphics/UI/Gtk/Gdk/Pixbuf.chs 130 +import Graphics.UI.Gtk.Gdk.Pixmap (Bitmap, Pixmap) hunk ./gtk/Graphics/UI/Gtk/Gdk/Pixbuf.chs 717 + + + +-- | Takes the opacity values in a rectangular portion of a pixbuf and +-- thresholds them to produce a bi-level alpha mask that can be used +-- as a clipping mask for a drawable. +pixbufRenderThresholdAlpha :: + Pixbuf -- ^ A pixbuf. + -> Bitmap -- ^ Bitmap where the bilevel mask will be painted to. + -> Int -- ^ Source X coordinate. + -> Int -- ^ source Y coordinate. + -> Int -- ^ Destination X coordinate. + -> Int -- ^ Destination Y coordinate. + -> Int -- ^ Width of region to threshold, or -1 to use pixbuf width + -> Int -- ^ Height of region to threshold, or -1 to use pixbuf height + -> Int -- ^ Opacity values below this will be painted as zero; all other values will be painted as one. + -> IO () +pixbufRenderThresholdAlpha src dest srcX srcY destX destY w h at = + withForeignPtr (unPixmap dest) $ \destPtr -> + {#call unsafe pixbuf_render_threshold_alpha#} src + (castPtr destPtr) + (fromIntegral srcX) + (fromIntegral srcY) + (fromIntegral destX) + (fromIntegral destY) + (fromIntegral w) + (fromIntegral h) + (fromIntegral at) + + + + + +-- | Creates a pixmap and a mask bitmap which are returned and renders +-- a pixbuf and its corresponding thresholded alpha mask to them. This +-- is merely a convenience function; applications that need to render +-- pixbufs with dither offsets or to given drawables should use +-- 'Graphics.UI.Gtk.Gdk.Drawable.drawPixbuf', and +-- 'pixbufRenderThresholdAlpha'. +-- +-- The pixmap that is created uses the 'Colormap' specified by +-- colormap. This colormap must match the colormap of the window where +-- the pixmap will eventually be used or an error will result. +-- +-- If the pixbuf does not have an alpha channel, then the returned +-- mask will be @Nothing@. +-- +pixbufRenderPixmapAndMaskForColormap :: + Pixbuf -- ^ A pixbuf. + -> Colormap -- ^ A Colormap + -> Int -- ^ Threshold value for opacity values + -> IO (Pixmap, Maybe Bitmap) -- ^ (Created pixmap, created mask) +pixbufRenderPixmapAndMaskForColormap pixbuf colormap threshold = + alloca $ \pmRetPtr -> + alloca $ \bmRetPtr -> do + {#call unsafe pixbuf_render_pixmap_and_mask_for_colormap#} pixbuf + colormap + (castPtr pmRetPtr) -- seems to reject Pixmap**, so cast + (castPtr bmRetPtr) + (fromIntegral threshold) + pm <- constructNewGObject mkPixmap (peek pmRetPtr :: IO (Ptr Pixmap)) + bm <- maybeNull (constructNewGObject mkPixmap) (peek bmRetPtr :: IO (Ptr Bitmap)) + return (pm, bm) + + } |