From f2f4fa1b98f625fab2dddd0c1e5b5c9b3ce6c64e Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 23 Sep 2015 15:00:40 -0700 Subject: [PATCH] Fixed: readded _viewClassFlags. We only displayRect the view if drawRect: or viewWillDraw is implemented. layoutSubviews is still called even if the subclass does not implement it --- AppKit/CPView.j | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/AppKit/CPView.j b/AppKit/CPView.j index e1b0fcaa2..2821a8147 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -231,6 +231,8 @@ var CPViewHighDPIDrawingEnabled = YES; CPView _nextKeyView; CPView _previousKeyView; + unsigned _viewClassFlags; + // ToolTips CPString _toolTip @accessors(getter=toolTip); Function _toolTipFunctionIn; @@ -308,6 +310,24 @@ var CPViewHighDPIDrawingEnabled = YES; return nil; } +- (void)_setupViewFlags +{ + var theClass = [self class], + classUID = [theClass UID]; + + if (CPViewFlags[classUID] === undefined) + { + var flags = 0; + + if ([theClass instanceMethodForSelector:@selector(drawRect:)] !== [CPView instanceMethodForSelector:@selector(drawRect:)] + || [theClass instanceMethodForSelector:@selector(viewWillDraw)] !== [CPView instanceMethodForSelector:@selector(viewWillDraw)]) + flags |= CPViewHasCustomDrawRect; + + CPViewFlags[classUID] = flags; + } + + _viewClassFlags = CPViewFlags[classUID]; +} - (id)init { @@ -362,6 +382,7 @@ var CPViewHighDPIDrawingEnabled = YES; _DOMImageSizes = []; #endif + [self _setupViewFlags]; [self _loadThemeAttributes]; } @@ -2457,6 +2478,9 @@ setBoundsOrigin: */ - (void)setNeedsDisplayInRect:(CGRect)aRect { + if (!(_viewClassFlags & CPViewHasCustomDrawRect)) + return; + if (CGRectIsEmpty(aRect)) return;