aboutsummaryrefslogtreecommitdiff
path: root/xorg-server/fb/fbpict.c
diff options
context:
space:
mode:
authormarha <marha@users.sourceforge.net>2010-08-18 09:35:37 +0000
committermarha <marha@users.sourceforge.net>2010-08-18 09:35:37 +0000
commit2aa7bcf37f00b7884ae166d62db81493ea37934a (patch)
treee7ad3e04c09c56538993c8a42a53adce5743d9a7 /xorg-server/fb/fbpict.c
parent2744e12e38280c4877311f129d5a5db509b75026 (diff)
downloadvcxsrv-2aa7bcf37f00b7884ae166d62db81493ea37934a.tar.gz
vcxsrv-2aa7bcf37f00b7884ae166d62db81493ea37934a.tar.bz2
vcxsrv-2aa7bcf37f00b7884ae166d62db81493ea37934a.zip
libxext libx11 libxcb libXinerama libXau pixman xserver git update 18/10/2010
Diffstat (limited to 'xorg-server/fb/fbpict.c')
-rw-r--r--xorg-server/fb/fbpict.c24
1 files changed, 18 insertions, 6 deletions
diff --git a/xorg-server/fb/fbpict.c b/xorg-server/fb/fbpict.c
index d6dc30d2c..9e2c35c4b 100644
--- a/xorg-server/fb/fbpict.c
+++ b/xorg-server/fb/fbpict.c
@@ -332,8 +332,11 @@ create_bits_picture (PicturePtr pict,
return image;
}
+static pixman_image_t *
+image_from_pict_internal (PicturePtr pict, Bool has_clip, int *xoff, int *yoff, Bool is_alpha_map);
+
static void
-set_image_properties (pixman_image_t *image, PicturePtr pict, Bool has_clip, int *xoff, int *yoff)
+set_image_properties (pixman_image_t *image, PicturePtr pict, Bool has_clip, int *xoff, int *yoff, Bool is_alpha_map)
{
pixman_repeat_t repeat;
pixman_filter_t filter;
@@ -382,10 +385,13 @@ set_image_properties (pixman_image_t *image, PicturePtr pict, Bool has_clip, int
pixman_image_set_repeat (image, repeat);
- if (pict->alphaMap)
+ /* Fetch alpha map unless 'pict' is being used
+ * as the alpha map for this operation
+ */
+ if (pict->alphaMap && !is_alpha_map)
{
int alpha_xoff, alpha_yoff;
- pixman_image_t *alpha_map = image_from_pict (pict->alphaMap, FALSE, &alpha_xoff, &alpha_yoff);
+ pixman_image_t *alpha_map = image_from_pict_internal (pict->alphaMap, FALSE, &alpha_xoff, &alpha_yoff, TRUE);
pixman_image_set_alpha_map (
image, alpha_map, pict->alphaOrigin.x, pict->alphaOrigin.y);
@@ -417,8 +423,8 @@ set_image_properties (pixman_image_t *image, PicturePtr pict, Bool has_clip, int
pixman_image_set_source_clipping (image, TRUE);
}
-pixman_image_t *
-image_from_pict (PicturePtr pict, Bool has_clip, int *xoff, int *yoff)
+static pixman_image_t *
+image_from_pict_internal (PicturePtr pict, Bool has_clip, int *xoff, int *yoff, Bool is_alpha_map)
{
pixman_image_t *image = NULL;
@@ -452,11 +458,17 @@ image_from_pict (PicturePtr pict, Bool has_clip, int *xoff, int *yoff)
}
if (image)
- set_image_properties (image, pict, has_clip, xoff, yoff);
+ set_image_properties (image, pict, has_clip, xoff, yoff, is_alpha_map);
return image;
}
+pixman_image_t *
+image_from_pict (PicturePtr pict, Bool has_clip, int *xoff, int *yoff)
+{
+ return image_from_pict_internal (pict, has_clip, xoff, yoff, FALSE);
+}
+
void
free_pixman_pict (PicturePtr pict, pixman_image_t *image)
{