Ken Thomases : winemac: Extract a new class, WineBaseView, to be the superclass of WineContentView and future view classes.
Module: wine Branch: master Commit: e27abb0a3a3a5d43a12622fb99452f40c8b340ff URL: https://source.winehq.org/git/wine.git/?a=commit;h=e27abb0a3a3a5d43a12622fb9... Author: Ken Thomases <ken(a)codeweavers.com> Date: Fri Jul 13 09:27:00 2018 -0500 winemac: Extract a new class, WineBaseView, to be the superclass of WineContentView and future view classes. Signed-off-by: Ken Thomases <ken(a)codeweavers.com> Signed-off-by: Andrew Eikum <aeikum(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/winemac.drv/cocoa_window.m | 96 +++++++++++++++++++++++------------------ 1 file changed, 55 insertions(+), 41 deletions(-) diff --git a/dlls/winemac.drv/cocoa_window.m b/dlls/winemac.drv/cocoa_window.m index e37e071..1e10c27 100644 --- a/dlls/winemac.drv/cocoa_window.m +++ b/dlls/winemac.drv/cocoa_window.m @@ -299,7 +299,11 @@ static CVReturn WineDisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTi @end -(a)interface WineContentView : NSView <NSTextInputClient> +(a)interface WineBaseView : NSView +(a)end + + +(a)interface WineContentView : WineBaseView <NSTextInputClient> { NSMutableArray* glContexts; NSMutableArray* pendingGlContexts; @@ -366,6 +370,52 @@ static CVReturn WineDisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTi @end +(a)implementation WineBaseView + + - (void) setRetinaMode:(int)mode + { + for (WineBaseView* subview in [self subviews]) + { + if ([subview isKindOfClass:[WineBaseView class]]) + [subview setRetinaMode:mode]; + } + } + + - (BOOL) acceptsFirstMouse:(NSEvent*)theEvent + { + return YES; + } + + - (BOOL) preservesContentDuringLiveResize + { + // Returning YES from this tells Cocoa to keep our view's content during + // a Cocoa-driven resize. In theory, we're also supposed to override + // -setFrameSize: to mark exposed sections as needing redisplay, but + // user32 will take care of that in a roundabout way. This way, we don't + // redraw until the window surface is flushed. + // + // This doesn't do anything when we resize the window ourselves. + return YES; + } + + - (BOOL)acceptsFirstResponder + { + return [[self window] contentView] == self; + } + + - (BOOL) mouseDownCanMoveWindow + { + return NO; + } + + - (NSFocusRingType) focusRingType + { + return NSFocusRingTypeNone; + } + +(a)end + + @implementation WineContentView @synthesize everHadGLContext = _everHadGLContext; @@ -537,7 +587,7 @@ static CVReturn WineDisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTi return YES; for (WineContentView* view in [self subviews]) { - if ([view hasGLDescendant]) + if ([view isKindOfClass:[WineContentView class]] && [view hasGLDescendant]) return YES; } return NO; @@ -589,38 +639,7 @@ static CVReturn WineDisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTi [self setFrame:frame]; [self updateGLContexts]; - for (WineContentView* subview in [self subviews]) - { - if ([subview isKindOfClass:[WineContentView class]]) - [subview setRetinaMode:mode]; - } - } - - - (BOOL) acceptsFirstMouse:(NSEvent*)theEvent - { - return YES; - } - - - (BOOL) preservesContentDuringLiveResize - { - // Returning YES from this tells Cocoa to keep our view's content during - // a Cocoa-driven resize. In theory, we're also supposed to override - // -setFrameSize: to mark exposed sections as needing redisplay, but - // user32 will take care of that in a roundabout way. This way, we don't - // redraw until the window surface is flushed. - // - // This doesn't do anything when we resize the window ourselves. - return YES; - } - - - (BOOL)acceptsFirstResponder - { - return [[self window] contentView] == self; - } - - - (BOOL) mouseDownCanMoveWindow - { - return NO; + [super setRetinaMode:mode]; } - (void) viewDidHide @@ -655,11 +674,6 @@ static CVReturn WineDisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTi [[self inputContext] discardMarkedText]; } - - (NSFocusRingType) focusRingType - { - return NSFocusRingTypeNone; - } - - (void) didAddSubview:(NSView*)subview { if ([subview isKindOfClass:[WineContentView class]]) @@ -2537,9 +2551,9 @@ static CVReturn WineDisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTi if (shape) [shape transformUsingAffineTransform:transform]; - for (WineContentView* subview in [self.contentView subviews]) + for (WineBaseView* subview in [self.contentView subviews]) { - if ([subview isKindOfClass:[WineContentView class]]) + if ([subview isKindOfClass:[WineBaseView class]]) [subview setRetinaMode:mode]; }
participants (1)
-
Alexandre Julliard