From a796ad5ed8d06c6ac2edb67242e00b646bf1e6ca Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Thu, 29 Nov 2012 17:59:59 +0100 Subject: [PATCH] gdi32: Avoid creating a copy of the pattern bits for the R2_COPYPEN case. --- dlls/gdi32/dibdrv/objects.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/dlls/gdi32/dibdrv/objects.c b/dlls/gdi32/dibdrv/objects.c index b658af64c72..8dee8e83ed5 100644 --- a/dlls/gdi32/dibdrv/objects.c +++ b/dlls/gdi32/dibdrv/objects.c @@ -1782,7 +1782,7 @@ static BOOL alloc_brush_mask_bits( dib_brush *brush ) static void free_brush_mask_bits( dib_brush *brush ) { - HeapFree(GetProcessHeap(), 0, brush->masks.and); + if (brush->masks.xor != brush->dib.bits.ptr) HeapFree(GetProcessHeap(), 0, brush->masks.xor); brush->masks.and = brush->masks.xor = NULL; } @@ -1798,6 +1798,12 @@ static BOOL create_pattern_brush_bits( dib_brush *brush ) DWORD *brush_bits = brush->dib.bits.ptr; DWORD *and_bits, *xor_bits; + if (brush->rop == R2_COPYPEN) + { + brush->masks.xor = brush_bits; /* use the pattern bits directly */ + return TRUE; + } + if (!alloc_brush_mask_bits( brush )) return FALSE; and_bits = brush->masks.and;