diff options
Diffstat (limited to 'common/canvas_base.c')
-rw-r--r-- | common/canvas_base.c | 20 |
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; |