new function to let you create a gdk_pixmap from a gdk_pixbuf.

2000-01-14  Jonathan Blandford  <jrb@redhat.com>

	* gdk-pixbuf/gdk-pixbuf-render.c (gdk_pixbuf_render_pixmap): new
	function to let you create a gdk_pixmap from a gdk_pixbuf.
This commit is contained in:
Jonathan Blandford 2000-01-14 20:59:18 +00:00 committed by Jonathan Blandford
parent 7bfdf70ae1
commit 1f48e45e54
3 changed files with 77 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2000-01-14 Jonathan Blandford <jrb@redhat.com>
* gdk-pixbuf/gdk-pixbuf-render.c (gdk_pixbuf_render_pixmap): new
function to let you create a gdk_pixmap from a gdk_pixbuf.
2000-01-11 Jacob Berkman <jacob@helixcode.com>
* gdk-pixbuf/pixops/Makefile.am (INCLUDES): added

View File

@ -147,6 +147,11 @@ void gdk_pixbuf_render_to_drawable (GdkPixbuf *pixbuf,
GdkRgbDither dither,
int x_dither, int y_dither);
void gdk_pixbuf_render_pixmap (GdkPixbuf *pixbuf,
GdkPixmap **pixmap,
GdkBitmap **mask,
gint alpha_threshold);
void gdk_pixbuf_render_to_drawable_alpha (GdkPixbuf *pixbuf, GdkDrawable *drawable,
int src_x, int src_y,
int dest_x, int dest_y,

View File

@ -320,3 +320,70 @@ gdk_pixbuf_render_to_drawable_alpha (GdkPixbuf *pixbuf, GdkDrawable *drawable,
gdk_gc_unref (gc);
}
/**
* gdk_pixbuf_render_pixmap:
* @pixbuf: A pixbuf
* @pixmap: A pointer to a pixmap to fill in.
* @mask_retval: A pointer to the mask to be filled in.
* @alpha_threshold: Specifies the threshold value for opacity
* values if the pixbuf has opacity.
*
* Generates a #GdkPixmap from a #GdkPixbuf, along with an optional mask. The
* alpha threshold can be used to determine how the mask is created, if the
* pixbuf has an alpha channel. This function is mainly provided for
* compatibility reasons, as you will rarely want a #GdkPixmap.
*
**/
void
gdk_pixbuf_render_pixmap (GdkPixbuf *pixbuf,
GdkPixmap **pixmap,
GdkBitmap **mask_retval,
gint alpha_threshold)
{
GdkBitmap *mask = NULL;
g_return_if_fail(pixbuf != NULL);
/* generate mask */
if (gdk_pixbuf_get_has_alpha(pixbuf)) {
mask = gdk_pixmap_new(NULL,
gdk_pixbuf_get_width(pixbuf),
gdk_pixbuf_get_height(pixbuf),
1);
gdk_pixbuf_render_threshold_alpha(pixbuf, mask,
0, 0, 0, 0,
gdk_pixbuf_get_width(pixbuf),
gdk_pixbuf_get_height(pixbuf),
alpha_threshold);
}
/* Draw to pixmap */
if (pixmap != NULL) {
GdkGC* gc;
*pixmap = gdk_pixmap_new(NULL,
gdk_pixbuf_get_width(pixbuf),
gdk_pixbuf_get_height(pixbuf),
gdk_rgb_get_visual()->depth);
gc = gdk_gc_new(*pixmap);
gdk_gc_set_clip_mask(gc, mask);
gdk_pixbuf_render_to_drawable(pixbuf, *pixmap,
gc,
0, 0, 0, 0,
gdk_pixbuf_get_width(pixbuf),
gdk_pixbuf_get_height(pixbuf),
GDK_RGB_DITHER_NORMAL,
0, 0);
gdk_gc_unref(gc);
}
if (mask_retval)
*mask_retval = mask;
else
gdk_bitmap_unref(mask);
}