Commit 0e8b3050 authored by Ken Thomases's avatar Ken Thomases Committed by Alexandre Julliard

winemac: Draw surface region rects separately instead of clipping one big draw.

parent f7406e74
......@@ -186,51 +186,55 @@ static inline void fix_generic_modifiers_by_device(NSUInteger* modifiers)
if (window.surface && window.surface_mutex &&
!pthread_mutex_lock(window.surface_mutex))
{
CGRect bounds;
const CGRect* rects;
int count;
if (!get_surface_region_rects(window.surface, &rects, &count) || count)
if (!get_surface_region_rects(window.surface, &rects, &count))
{
CGRect imageRect;
CGImageRef image;
bounds = NSRectToCGRect([self bounds]);
rects = &bounds;
count = 1;
}
imageRect = NSRectToCGRect(rect);
image = create_surface_image(window.surface, &imageRect, FALSE);
if (count)
{
CGContextRef context;
int i;
if (image)
{
CGContextRef context;
[window.shape addClip];
if (rects && count)
{
NSBezierPath* surfaceClip = [NSBezierPath bezierPath];
int i;
for (i = 0; i < count; i++)
[surfaceClip appendBezierPathWithRect:NSRectFromCGRect(rects[i])];
[surfaceClip addClip];
}
context = (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort];
CGContextSetBlendMode(context, kCGBlendModeCopy);
[window.shape addClip];
for (i = 0; i < count; i++)
{
CGRect imageRect;
CGImageRef image;
imageRect = CGRectIntersection(rects[i], NSRectToCGRect(rect));
image = create_surface_image(window.surface, &imageRect, FALSE);
if (window.colorKeyed)
if (image)
{
CGImageRef maskedImage;
CGFloat components[] = { window.colorKeyRed - 0.5, window.colorKeyRed + 0.5,
window.colorKeyGreen - 0.5, window.colorKeyGreen + 0.5,
window.colorKeyBlue - 0.5, window.colorKeyBlue + 0.5 };
maskedImage = CGImageCreateWithMaskingColors(image, components);
if (maskedImage)
if (window.colorKeyed)
{
CGImageRelease(image);
image = maskedImage;
CGImageRef maskedImage;
CGFloat components[] = { window.colorKeyRed - 0.5, window.colorKeyRed + 0.5,
window.colorKeyGreen - 0.5, window.colorKeyGreen + 0.5,
window.colorKeyBlue - 0.5, window.colorKeyBlue + 0.5 };
maskedImage = CGImageCreateWithMaskingColors(image, components);
if (maskedImage)
{
CGImageRelease(image);
image = maskedImage;
}
}
}
context = (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort];
CGContextSetBlendMode(context, kCGBlendModeCopy);
CGContextDrawImage(context, imageRect, image);
CGContextDrawImage(context, imageRect, image);
CGImageRelease(image);
CGImageRelease(image);
}
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment