summaryrefslogtreecommitdiffstats
path: root/common/canvas_base.c
diff options
context:
space:
mode:
Diffstat (limited to 'common/canvas_base.c')
-rw-r--r--common/canvas_base.c20
1 files changed, 13 insertions, 7 deletions
diff --git a/common/canvas_base.c b/common/canvas_base.c
index f5a6d336..6659385a 100644
--- a/common/canvas_base.c
+++ b/common/canvas_base.c
@@ -1134,7 +1134,7 @@ static inline pixman_image_t* canvas_handle_inverse_user_data(pixman_image_t* su
return inv_surf;
}
-static pixman_image_t *canvas_get_mask(CanvasBase *canvas, SpiceQMask *mask)
+static pixman_image_t *canvas_get_mask(CanvasBase *canvas, SpiceQMask *mask, int *needs_invert_out)
{
SpiceImageDescriptor *descriptor;
pixman_image_t *surface;
@@ -1142,6 +1142,10 @@ static pixman_image_t *canvas_get_mask(CanvasBase *canvas, SpiceQMask *mask)
int is_invers;
int cache_me;
+ if (needs_invert_out) {
+ *needs_invert_out = 0;
+ }
+
if (!mask->bitmap) {
return NULL;
}
@@ -1180,12 +1184,14 @@ static pixman_image_t *canvas_get_mask(CanvasBase *canvas, SpiceQMask *mask)
}
if (need_invers && !is_invers) { // surface is in cache
- pixman_image_t *inv_surf;
-
- inv_surf = canvas_handle_inverse_user_data(surface);
-
- pixman_image_unref(surface);
- surface = inv_surf;
+ if (needs_invert_out != NULL) {
+ *needs_invert_out = TRUE;
+ } else {
+ pixman_image_t *inv_surf;
+ inv_surf = canvas_handle_inverse_user_data(surface);
+ pixman_image_unref(surface);
+ surface = inv_surf;
+ }
}
#endif
return surface;