winemac: Extract a new class, WineBaseView, to be the superclass of WineContentView and future view classes.

Signed-off-by: Ken Thomases <ken@codeweavers.com>
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Ken Thomases 2018-07-13 09:27:00 -05:00 committed by Alexandre Julliard
parent 90518ebd2c
commit e27abb0a3a
1 changed files with 55 additions and 41 deletions

View File

@ -299,7 +299,11 @@ static CVReturn WineDisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTi
@end
@interface WineContentView : NSView <NSTextInputClient>
@interface WineBaseView : NSView
@end
@interface WineContentView : WineBaseView <NSTextInputClient>
{
NSMutableArray* glContexts;
NSMutableArray* pendingGlContexts;
@ -366,6 +370,52 @@ - (void) windowDidDrawContent;
@end
@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;
}
@end
@implementation WineContentView
@synthesize everHadGLContext = _everHadGLContext;
@ -537,7 +587,7 @@ - (BOOL) _hasGLDescendant
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 @@ - (void) setRetinaMode:(int)mode
[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 @@ - (void) completeText:(NSString*)text
[[self inputContext] discardMarkedText];
}
- (NSFocusRingType) focusRingType
{
return NSFocusRingTypeNone;
}
- (void) didAddSubview:(NSView*)subview
{
if ([subview isKindOfClass:[WineContentView class]])
@ -2537,9 +2551,9 @@ - (void) setRetinaMode:(int)mode
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];
}