This reverts commit 3f845b34deada0dd58e3674119af47ce85851c24.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52354 Signed-off-by: Tim Clem tclem@codeweavers.com --- There's more discussion on the bug, but in short, it seems that layer-backed views have some insurmountable issues on High Sierra and earlier.
dlls/winemac.drv/cocoa_window.m | 64 +++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+)
diff --git a/dlls/winemac.drv/cocoa_window.m b/dlls/winemac.drv/cocoa_window.m index bfa7e2fe8cc..2ee3b862456 100644 --- a/dlls/winemac.drv/cocoa_window.m +++ b/dlls/winemac.drv/cocoa_window.m @@ -556,6 +556,70 @@ - (void) viewWillDraw [pendingGlContexts removeAllObjects]; }
+ - (void) drawRect:(NSRect)rect + { + WineWindow* window = (WineWindow*)[self window]; + + if ([window contentView] != self) + return; + + if (window.surface && window.surface_mutex && + !pthread_mutex_lock(window.surface_mutex)) + { + const CGRect* rects; + int count; + + if (get_surface_blit_rects(window.surface, &rects, &count)) + { + CGRect dirtyRect = cgrect_win_from_mac(NSRectToCGRect(rect)); + NSAffineTransform* xform = [NSAffineTransform transform]; + CGContextRef context; + int i; + + [xform translateXBy:0.0 yBy:self.bounds.size.height]; + [xform scaleXBy:1.0 yBy:-1.0]; + [xform concat]; + + context = (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort]; + CGContextSetBlendMode(context, kCGBlendModeCopy); + CGContextSetInterpolationQuality(context, retina_on ? kCGInterpolationHigh : kCGInterpolationNone); + + for (i = 0; i < count; i++) + { + CGRect imageRect; + CGImageRef image; + + imageRect = CGRectIntersection(rects[i], dirtyRect); + image = create_surface_image(window.surface, &imageRect, FALSE, window.colorKeyed, + window.colorKeyRed, window.colorKeyGreen, window.colorKeyBlue); + + if (image) + { + // Account for the flipped coordinate system. + imageRect = cgrect_mac_from_win(imageRect); + imageRect.origin.y = self.bounds.size.height - imageRect.origin.y - imageRect.size.height; + CGContextDrawImage(context, imageRect, image); + + CGImageRelease(image); + } + } + + [window windowDidDrawContent]; + } + + pthread_mutex_unlock(window.surface_mutex); + } + + // If the window may be transparent, then we have to invalidate the + // shadow every time we draw. Also, if this is the first time we've + // drawn since changing from transparent to opaque. + if (window.drawnSinceShown && (window.colorKeyed || window.usePerPixelAlpha || window.shapeChangedSinceLastDraw)) + { + window.shapeChangedSinceLastDraw = FALSE; + [window invalidateShadow]; + } + } + - (void) addGLContext:(WineOpenGLContext*)context { BOOL hadContext = _everHadGLContext;
This reverts commit 9e599a89e30c9ae403f5c7861e0f7690a03c4e22.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52354 Signed-off-by: Tim Clem tclem@codeweavers.com --- This catches part of 6bb537c8b0c as collateral damage. I restore it in the final patch in this series.
dlls/winemac.drv/cocoa_window.m | 86 +++++++-------------------------- dlls/winemac.drv/macdrv_cocoa.h | 3 +- dlls/winemac.drv/surface.c | 42 +++++----------- 3 files changed, 30 insertions(+), 101 deletions(-)
diff --git a/dlls/winemac.drv/cocoa_window.m b/dlls/winemac.drv/cocoa_window.m index 2ee3b862456..ba7eaf2ad78 100644 --- a/dlls/winemac.drv/cocoa_window.m +++ b/dlls/winemac.drv/cocoa_window.m @@ -491,54 +491,6 @@ - (BOOL) isFlipped return YES; }
- - (BOOL) wantsUpdateLayer - { - return YES /*!_everHadGLContext*/; - } - - - (void) updateLayer - { - WineWindow* window = (WineWindow*)[self window]; - CGImageRef image = NULL; - CGRect imageRect; - CALayer* layer = [self layer]; - - if ([window contentView] != self) - return; - - if (window.closing || !window.surface || !window.surface_mutex) - return; - - pthread_mutex_lock(window.surface_mutex); - if (get_surface_blit_rects(window.surface, NULL, NULL)) - { - imageRect = layer.bounds; - imageRect.origin.x *= layer.contentsScale; - imageRect.origin.y *= layer.contentsScale; - imageRect.size.width *= layer.contentsScale; - imageRect.size.height *= layer.contentsScale; - image = create_surface_image(window.surface, &imageRect, FALSE, window.colorKeyed, - window.colorKeyRed, window.colorKeyGreen, window.colorKeyBlue); - } - pthread_mutex_unlock(window.surface_mutex); - - if (image) - { - layer.contents = (id)image; - CFRelease(image); - [window windowDidDrawContent]; - - // If the window may be transparent, then we have to invalidate the - // shadow every time we draw. Also, if this is the first time we've - // drawn since changing from transparent to opaque. - if (window.colorKeyed || window.usePerPixelAlpha || window.shapeChangedSinceLastDraw) - { - window.shapeChangedSinceLastDraw = FALSE; - [window invalidateShadow]; - } - } - } - - (void) viewWillDraw { [super viewWillDraw]; @@ -569,17 +521,12 @@ - (void) drawRect:(NSRect)rect const CGRect* rects; int count;
- if (get_surface_blit_rects(window.surface, &rects, &count)) + if (get_surface_blit_rects(window.surface, &rects, &count) && count) { CGRect dirtyRect = cgrect_win_from_mac(NSRectToCGRect(rect)); - NSAffineTransform* xform = [NSAffineTransform transform]; CGContextRef context; int i;
- [xform translateXBy:0.0 yBy:self.bounds.size.height]; - [xform scaleXBy:1.0 yBy:-1.0]; - [xform concat]; - context = (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort]; CGContextSetBlendMode(context, kCGBlendModeCopy); CGContextSetInterpolationQuality(context, retina_on ? kCGInterpolationHigh : kCGInterpolationNone); @@ -590,15 +537,25 @@ - (void) drawRect:(NSRect)rect CGImageRef image;
imageRect = CGRectIntersection(rects[i], dirtyRect); - image = create_surface_image(window.surface, &imageRect, FALSE, window.colorKeyed, - window.colorKeyRed, window.colorKeyGreen, window.colorKeyBlue); + image = create_surface_image(window.surface, &imageRect, FALSE);
if (image) { - // Account for the flipped coordinate system. - imageRect = cgrect_mac_from_win(imageRect); - imageRect.origin.y = self.bounds.size.height - imageRect.origin.y - imageRect.size.height; - CGContextDrawImage(context, imageRect, image); + if (window.colorKeyed) + { + 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; + } + } + + CGContextDrawImage(context, cgrect_mac_from_win(imageRect), image);
CGImageRelease(image); } @@ -751,9 +708,6 @@ - (void) setRetinaMode:(int)mode [self updateGLContexts];
_retinaMode = !!mode; - [self layer].contentsScale = mode ? 2.0 : 1.0; - [self layer].minificationFilter = mode ? kCAFilterLinear : kCAFilterNearest; - [self layer].magnificationFilter = mode ? kCAFilterLinear : kCAFilterNearest; [super setRetinaMode:mode]; }
@@ -1074,9 +1028,6 @@ + (WineWindow*) createWindowWithFeatures:(const struct macdrv_window_features*)w if (!contentView) return nil; [contentView setWantsLayer:YES]; - [contentView layer].minificationFilter = retina_on ? kCAFilterLinear : kCAFilterNearest; - [contentView layer].magnificationFilter = retina_on ? kCAFilterLinear : kCAFilterNearest; - [contentView layer].contentsScale = retina_on ? 2.0 : 1.0; [contentView setAutoresizesSubviews:NO];
/* We use tracking areas in addition to setAcceptsMouseMovedEvents:YES @@ -3668,9 +3619,6 @@ macdrv_view macdrv_create_view(CGRect rect)
view = [[WineContentView alloc] initWithFrame:NSRectFromCGRect(cgrect_mac_from_win(rect))]; [view setWantsLayer:YES]; - [view layer].minificationFilter = retina_on ? kCAFilterLinear : kCAFilterNearest; - [view layer].magnificationFilter = retina_on ? kCAFilterLinear : kCAFilterNearest; - [view layer].contentsScale = retina_on ? 2.0 : 1.0; [view setAutoresizesSubviews:NO]; [view setAutoresizingMask:NSViewNotSizable]; [view setHidden:YES]; diff --git a/dlls/winemac.drv/macdrv_cocoa.h b/dlls/winemac.drv/macdrv_cocoa.h index 94f9fbcfa17..c7bda0c89cf 100644 --- a/dlls/winemac.drv/macdrv_cocoa.h +++ b/dlls/winemac.drv/macdrv_cocoa.h @@ -570,8 +570,7 @@ extern void macdrv_order_cocoa_window(macdrv_window w, macdrv_window prev, extern void macdrv_get_cocoa_window_frame(macdrv_window w, CGRect* out_frame) DECLSPEC_HIDDEN; extern void macdrv_set_cocoa_parent_window(macdrv_window w, macdrv_window parent) DECLSPEC_HIDDEN; extern void macdrv_set_window_surface(macdrv_window w, void *surface, pthread_mutex_t *mutex) DECLSPEC_HIDDEN; -extern CGImageRef create_surface_image(void *window_surface, CGRect *rect, int copy_data, int color_keyed, - CGFloat key_red, CGFloat key_green, CGFloat key_blue) DECLSPEC_HIDDEN; +extern CGImageRef create_surface_image(void *window_surface, CGRect *rect, int copy_data) DECLSPEC_HIDDEN; extern int get_surface_blit_rects(void *window_surface, const CGRect **rects, int *count) DECLSPEC_HIDDEN; extern void macdrv_window_needs_display(macdrv_window w, CGRect rect) DECLSPEC_HIDDEN; extern void macdrv_set_window_shape(macdrv_window w, const CGRect *rects, int count) DECLSPEC_HIDDEN; diff --git a/dlls/winemac.drv/surface.c b/dlls/winemac.drv/surface.c index 6b0abb10780..cc13ae40c3b 100644 --- a/dlls/winemac.drv/surface.c +++ b/dlls/winemac.drv/surface.c @@ -264,7 +264,7 @@ struct window_surface *create_surface(macdrv_window window, const RECT *rect,
surface->info.bmiHeader.biSize = sizeof(surface->info.bmiHeader); surface->info.bmiHeader.biWidth = width; - surface->info.bmiHeader.biHeight = -height; /* top-down */ + surface->info.bmiHeader.biHeight = height; /* bottom-up */ surface->info.bmiHeader.biPlanes = 1; surface->info.bmiHeader.biBitCount = 32; surface->info.bmiHeader.biSizeImage = get_dib_image_size(&surface->info); @@ -342,21 +342,18 @@ int get_surface_blit_rects(void *window_surface, const CGRect **rects, int *coun { struct macdrv_window_surface *surface = get_mac_surface(window_surface);
- if (rects && count) + if (surface->blit_data) { - if (surface->blit_data) - { - *rects = (const CGRect*)surface->blit_data->Buffer; - *count = surface->blit_data->rdh.nCount; - } - else - { - *rects = NULL; - *count = 0; - } + *rects = (const CGRect*)surface->blit_data->Buffer; + *count = surface->blit_data->rdh.nCount; + } + else + { + *rects = NULL; + *count = 0; }
- return (surface->blit_data != NULL && surface->blit_data->rdh.nCount > 0); + return (surface->blit_data != NULL); }
/*********************************************************************** @@ -374,8 +371,7 @@ int get_surface_blit_rects(void *window_surface, const CGRect **rects, int *coun * must not use Win32 or Wine functions, including debug * logging. */ -CGImageRef create_surface_image(void *window_surface, CGRect *rect, int copy_data, int color_keyed, - CGFloat key_red, CGFloat key_green, CGFloat key_blue) +CGImageRef create_surface_image(void *window_surface, CGRect *rect, int copy_data) { CGImageRef cgimage = NULL; struct macdrv_window_surface *surface = get_mac_surface(window_surface); @@ -396,7 +392,7 @@ CGImageRef create_surface_image(void *window_surface, CGRect *rect, int copy_dat
colorspace = CGColorSpaceCreateWithName(kCGColorSpaceSRGB); bytes_per_row = get_dib_stride(width, 32); - offset = CGRectGetMinX(visrect) * 4 + CGRectGetMinY(visrect) * bytes_per_row; + offset = CGRectGetMinX(visrect) * 4 + (height - CGRectGetMaxY(visrect)) * bytes_per_row; size = min(CGRectGetHeight(visrect) * bytes_per_row, surface->info.bmiHeader.biSizeImage - offset);
@@ -416,20 +412,6 @@ CGImageRef create_surface_image(void *window_surface, CGRect *rect, int copy_dat provider, NULL, retina_on, kCGRenderingIntentDefault); CGDataProviderRelease(provider); CGColorSpaceRelease(colorspace); - - if (color_keyed) - { - CGImageRef maskedImage; - CGFloat components[] = { key_red - 0.5, key_red + 0.5, - key_green - 0.5, key_green + 0.5, - key_blue - 0.5, key_blue + 0.5 }; - maskedImage = CGImageCreateWithMaskingColors(cgimage, components); - if (maskedImage) - { - CGImageRelease(cgimage); - cgimage = maskedImage; - } - } }
return cgimage;
This reverts commit cad2a7c8e1ad97eaf8bbb7479f8c5ad8dca8a10d.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52354 Signed-off-by: Tim Clem tclem@codeweavers.com --- dlls/winemac.drv/cocoa_window.m | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-)
diff --git a/dlls/winemac.drv/cocoa_window.m b/dlls/winemac.drv/cocoa_window.m index ba7eaf2ad78..2014027d2cc 100644 --- a/dlls/winemac.drv/cocoa_window.m +++ b/dlls/winemac.drv/cocoa_window.m @@ -491,9 +491,9 @@ - (BOOL) isFlipped return YES; }
- - (void) viewWillDraw + - (void) drawRect:(NSRect)rect { - [super viewWillDraw]; + WineWindow* window = (WineWindow*)[self window];
for (WineOpenGLContext* context in pendingGlContexts) { @@ -506,11 +506,6 @@ - (void) viewWillDraw } [glContexts addObjectsFromArray:pendingGlContexts]; [pendingGlContexts removeAllObjects]; - } - - - (void) drawRect:(NSRect)rect - { - WineWindow* window = (WineWindow*)[self window];
if ([window contentView] != self) return;
This reverts commit 01f027b2db3196a8fe43be3d6718227794362985.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52354 Signed-off-by: Tim Clem tclem@codeweavers.com --- dlls/winemac.drv/cocoa_window.h | 2 + dlls/winemac.drv/cocoa_window.m | 90 ++++++++++++++++----------------- 2 files changed, 47 insertions(+), 45 deletions(-)
diff --git a/dlls/winemac.drv/cocoa_window.h b/dlls/winemac.drv/cocoa_window.h index a83f2aa803b..df02f1f6522 100644 --- a/dlls/winemac.drv/cocoa_window.h +++ b/dlls/winemac.drv/cocoa_window.h @@ -53,6 +53,8 @@ @interface WineWindow : NSPanel <NSWindowDelegate> NSRect wineFrame; NSRect roundedWineFrame;
+ NSBezierPath* shape; + NSData* shapeData; BOOL shapeChangedSinceLastDraw;
BOOL colorKeyed; diff --git a/dlls/winemac.drv/cocoa_window.m b/dlls/winemac.drv/cocoa_window.m index 2014027d2cc..6ccda75ac9f 100644 --- a/dlls/winemac.drv/cocoa_window.m +++ b/dlls/winemac.drv/cocoa_window.m @@ -319,22 +319,6 @@ - (BOOL) layer:(CALayer*)layer shouldInheritContentsScale:(CGFloat)newScale from #endif
-@interface CAShapeLayer (WineShapeMaskExtensions) - -@property(readonly, nonatomic, getter=isEmptyShaped) BOOL emptyShaped; - -@end - -@implementation CAShapeLayer (WineShapeMaskExtensions) - - - (BOOL) isEmptyShaped - { - return CGRectEqualToRect(CGPathGetBoundingBox(self.path), CGRectZero); - } - -@end - - @interface WineBaseView : NSView @end
@@ -404,6 +388,8 @@ @interface WineWindow () @property (nonatomic) void* surface; @property (nonatomic) pthread_mutex_t* surface_mutex;
+@property (copy, nonatomic) NSBezierPath* shape; +@property (copy, nonatomic) NSData* shapeData; @property (nonatomic) BOOL shapeChangedSinceLastDraw; @property (readonly, nonatomic) BOOL needsTransparency;
@@ -416,8 +402,6 @@ @interface WineWindow ()
@property (readonly, copy, nonatomic) NSArray* childWineWindows;
- - (void) setShape:(CGPathRef)newShape; - - (void) updateForGLSubviews;
- (BOOL) becameEligibleParentOrChild; @@ -510,6 +494,17 @@ - (void) drawRect:(NSRect)rect if ([window contentView] != self) return;
+ if (window.drawnSinceShown && window.shapeChangedSinceLastDraw && window.shape && !window.colorKeyed && !window.usePerPixelAlpha) + { + [[NSColor clearColor] setFill]; + NSRectFill(rect); + + [window.shape addClip]; + + [[NSColor windowBackgroundColor] setFill]; + NSRectFill(rect); + } + if (window.surface && window.surface_mutex && !pthread_mutex_lock(window.surface_mutex)) { @@ -522,6 +517,8 @@ - (void) drawRect:(NSRect)rect CGContextRef context; int i;
+ [window.shape addClip]; + context = (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort]; CGContextSetBlendMode(context, kCGBlendModeCopy); CGContextSetInterpolationQuality(context, retina_on ? kCGInterpolationHigh : kCGInterpolationNone); @@ -971,7 +968,7 @@ @implementation WineWindow @synthesize disabled, noForeground, preventsAppActivation, floating, fullscreen, fakingClose, closing, latentParentWindow, hwnd, queue; @synthesize drawnSinceShown; @synthesize surface, surface_mutex; - @synthesize shapeChangedSinceLastDraw; + @synthesize shape, shapeData, shapeChangedSinceLastDraw; @synthesize colorKeyed, colorKeyRed, colorKeyGreen, colorKeyBlue; @synthesize usePerPixelAlpha; @synthesize imeData, commandDone; @@ -1072,6 +1069,8 @@ - (void) dealloc [queue release]; [latentChildWindows release]; [latentParentWindow release]; + [shape release]; + [shapeData release]; [super dealloc]; }
@@ -2020,7 +2019,7 @@ - (void) setDisabled:(BOOL)newValue
- (BOOL) needsTransparency { - return self.contentView.layer.mask || self.colorKeyed || self.usePerPixelAlpha || + return self.shape || self.colorKeyed || self.usePerPixelAlpha || (gl_surface_mode == GL_SURFACE_BEHIND && [(WineContentView*)self.contentView hasGLDescendant]); }
@@ -2042,27 +2041,22 @@ - (void) checkTransparency } }
- - (void) setShape:(CGPathRef)newShape + - (void) setShape:(NSBezierPath*)newShape { - CALayer* layer = [[self contentView] layer]; - CAShapeLayer* mask = (CAShapeLayer*)layer.mask; - if (CGPathEqualToPath(newShape, mask.path)) return; - - if (newShape && !layer.mask) - layer.mask = mask = [CAShapeLayer layer]; - else if (!newShape) - layer.mask = mask = nil; + if (shape == newShape) return;
- if (mask.path) - [[self contentView] setNeedsDisplayInRect:NSRectFromCGRect(CGPathGetBoundingBox(mask.path))]; + if (shape) + { + [[self contentView] setNeedsDisplayInRect:[shape bounds]]; + [shape release]; + } if (newShape) - [[self contentView] setNeedsDisplayInRect:NSRectFromCGRect(CGPathGetBoundingBox(newShape))]; + [[self contentView] setNeedsDisplayInRect:[newShape bounds]];
- mask.path = newShape; + shape = [newShape copy]; self.shapeChangedSinceLastDraw = TRUE;
[self checkTransparency]; - [self checkEmptyShaped]; }
- (void) makeFocused:(BOOL)activate @@ -2260,8 +2254,7 @@ - (void) checkWineDisplayLink
- (BOOL) isEmptyShaped { - CAShapeLayer* mask = (CAShapeLayer*)[[self contentView] layer].mask; - return ([mask isEmptyShaped]); + return (self.shapeData.length == sizeof(CGRectZero) && !memcmp(self.shapeData.bytes, &CGRectZero, sizeof(CGRectZero))); }
- (BOOL) canProvideSnapshot @@ -2663,7 +2656,8 @@ - (void) setRetinaMode:(int)mode
[transform scaleBy:scale];
- [[self contentView] layer].mask.contentsScale = mode ? 2.0 : 1.0; + if (shape) + [shape transformUsingAffineTransform:transform];
for (WineBaseView* subview in [self.contentView subviews]) { @@ -3481,19 +3475,25 @@ void macdrv_set_window_shape(macdrv_window w, const CGRect *rects, int count) OnMainThread(^{ if (!rects || !count) { - [window setShape:NULL]; + window.shape = nil; + window.shapeData = nil; [window checkEmptyShaped]; } else { - CGMutablePathRef path; - unsigned int i; + size_t length = sizeof(*rects) * count; + if (window.shapeData.length != length || memcmp(window.shapeData.bytes, rects, length)) + { + NSBezierPath* path; + unsigned int i;
- path = CGPathCreateMutable(); - for (i = 0; i < count; i++) - CGPathAddRect(path, NULL, cgrect_mac_from_win(rects[i])); - [window setShape:path]; - CGPathRelease(path); + path = [NSBezierPath bezierPath]; + for (i = 0; i < count; i++) + [path appendBezierPathWithRect:NSRectFromCGRect(cgrect_mac_from_win(rects[i]))]; + window.shape = path; + window.shapeData = [NSData dataWithBytes:rects length:length]; + [window checkEmptyShaped]; + } } });
This reverts commit a5cf847aa45c38bae1500ef19a9bac38bbd8d5ba.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52354 Signed-off-by: Tim Clem tclem@codeweavers.com --- dlls/winemac.drv/cocoa_window.m | 21 +-------------------- 1 file changed, 1 insertion(+), 20 deletions(-)
diff --git a/dlls/winemac.drv/cocoa_window.m b/dlls/winemac.drv/cocoa_window.m index 6ccda75ac9f..5cf2ae6bc25 100644 --- a/dlls/winemac.drv/cocoa_window.m +++ b/dlls/winemac.drv/cocoa_window.m @@ -309,16 +309,6 @@ static CVReturn WineDisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTi @end
-#ifndef MAC_OS_X_VERSION_10_14 -@protocol NSViewLayerContentScaleDelegate <NSObject> -@optional - - - (BOOL) layer:(CALayer*)layer shouldInheritContentsScale:(CGFloat)newScale fromWindow:(NSWindow*)window; - -@end -#endif - - @interface WineBaseView : NSView @end
@@ -335,7 +325,7 @@ - (id) initWithFrame:(NSRect)frame device:(id<MTLDevice>)device; #endif
-@interface WineContentView : WineBaseView <NSTextInputClient, NSViewLayerContentScaleDelegate> +@interface WineContentView : WineBaseView <NSTextInputClient> { NSMutableArray* glContexts; NSMutableArray* pendingGlContexts; @@ -347,7 +337,6 @@ @interface WineContentView : WineBaseView <NSTextInputClient, NSViewLayerContent NSMutableAttributedString* markedText; NSRange markedTextSelection;
- BOOL _retinaMode; int backingSize[2];
#ifdef HAVE_METAL_METAL_H @@ -699,15 +688,9 @@ - (void) setRetinaMode:(int)mode [self setWantsBestResolutionOpenGLSurface:mode]; [self updateGLContexts];
- _retinaMode = !!mode; [super setRetinaMode:mode]; }
- - (BOOL) layer:(CALayer*)layer shouldInheritContentsScale:(CGFloat)newScale fromWindow:(NSWindow*)window - { - return (_retinaMode || newScale == 1.0); - } - - (void) viewDidHide { [super viewDidHide]; @@ -1019,7 +1002,6 @@ + (WineWindow*) createWindowWithFeatures:(const struct macdrv_window_features*)w contentView = [[[WineContentView alloc] initWithFrame:NSZeroRect] autorelease]; if (!contentView) return nil; - [contentView setWantsLayer:YES]; [contentView setAutoresizesSubviews:NO];
/* We use tracking areas in addition to setAcceptsMouseMovedEvents:YES @@ -3613,7 +3595,6 @@ macdrv_view macdrv_create_view(CGRect rect) NSNotificationCenter* nc = [NSNotificationCenter defaultCenter];
view = [[WineContentView alloc] initWithFrame:NSRectFromCGRect(cgrect_mac_from_win(rect))]; - [view setWantsLayer:YES]; [view setAutoresizesSubviews:NO]; [view setAutoresizingMask:NSViewNotSizable]; [view setHidden:YES];
This restores the check from 6bb537c8b0c that was partially reverted along with 9e599a89e30.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52231 Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52354 Signed-off-by: Tim Clem tclem@codeweavers.com --- dlls/winemac.drv/cocoa_window.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/winemac.drv/cocoa_window.m b/dlls/winemac.drv/cocoa_window.m index 5cf2ae6bc25..54189c251d4 100644 --- a/dlls/winemac.drv/cocoa_window.m +++ b/dlls/winemac.drv/cocoa_window.m @@ -494,7 +494,7 @@ - (void) drawRect:(NSRect)rect NSRectFill(rect); }
- if (window.surface && window.surface_mutex && + if (!window.closing && window.surface && window.surface_mutex && !pthread_mutex_lock(window.surface_mutex)) { const CGRect* rects;
Consider this withdrawn for now.
Discussion on this series continues on the Bugzilla bug. I'm exploring the possibilities other than a full revert. If we end up going this route, I'll resubmit.
Thanks! --Tim
April 21, 2022 1:05 PM, "Tim Clem" tclem@codeweavers.com wrote:
This restores the check from 6bb537c8b0c that was partially reverted along with 9e599a89e30.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52231 Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52354 Signed-off-by: Tim Clem tclem@codeweavers.com
dlls/winemac.drv/cocoa_window.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/winemac.drv/cocoa_window.m b/dlls/winemac.drv/cocoa_window.m index 5cf2ae6bc25..54189c251d4 100644 --- a/dlls/winemac.drv/cocoa_window.m +++ b/dlls/winemac.drv/cocoa_window.m @@ -494,7 +494,7 @@ - (void) drawRect:(NSRect)rect NSRectFill(rect); }
- if (window.surface && window.surface_mutex &&
- if (!window.closing && window.surface && window.surface_mutex &&
!pthread_mutex_lock(window.surface_mutex)) { const CGRect* rects; -- 2.34.1