diff options
author | rowanbeentje <rowan@beent.je> | 2013-06-13 18:38:33 +0000 |
---|---|---|
committer | rowanbeentje <rowan@beent.je> | 2013-06-13 18:38:33 +0000 |
commit | 33dbe8d35c3e681c5a8cfd223be50ae7c769cf15 (patch) | |
tree | cfc51a04f989bbb7db3555c5243b4f6b4cc5e483 /Frameworks/PSMTabBar/PSMTabBarControl.m | |
parent | 08036ae8c5e62d843831b43447f12ad6613e728b (diff) | |
download | sequelpro-33dbe8d35c3e681c5a8cfd223be50ae7c769cf15.tar.gz sequelpro-33dbe8d35c3e681c5a8cfd223be50ae7c769cf15.tar.bz2 sequelpro-33dbe8d35c3e681c5a8cfd223be50ae7c769cf15.zip |
- Fix window update notification action within PSMTabBar, only redrawing the tab bar if the window state has changed. This significantly reduces CPU usage when mousing around the window by avoiding needless draws, and also addresses graphics corruption/artefacts when drawing above a blurred background, addressing Issue #1678
Diffstat (limited to 'Frameworks/PSMTabBar/PSMTabBarControl.m')
-rw-r--r-- | Frameworks/PSMTabBar/PSMTabBarControl.m | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/Frameworks/PSMTabBar/PSMTabBarControl.m b/Frameworks/PSMTabBar/PSMTabBarControl.m index ffac0255..2cc9334a 100644 --- a/Frameworks/PSMTabBar/PSMTabBarControl.m +++ b/Frameworks/PSMTabBar/PSMTabBarControl.m @@ -118,6 +118,10 @@ _cells = [[NSMutableArray alloc] initWithCapacity:10]; _controller = [[PSMTabBarController alloc] initWithTabBarControl:self]; _animationTimer = nil; + _lastWindowIsMainCheck = NO; + _lastAttachedWindowIsMainCheck = NO; + _lastAppIsActiveCheck = NO; + _lastMouseDownEvent = nil; // default config _currentStep = kPSMIsNotBeingResized; @@ -1805,13 +1809,23 @@ if ([[self delegate] respondsToSelector:@selector(tabView:tabBarDidHide:)]) { [[self delegate] tabView:[self tabView] tabBarDidHide:self]; } - } - // The above tasks only needs to be run once, so set a flag to ensure that - _awakenedFromNib = YES; + // The above tasks only needs to be run once, so set a flag to ensure that + _awakenedFromNib = YES; + } - // Allow the tab bar to redraw itself in result to window ordering/sheet/etc changes - [self setNeedsDisplay:YES]; + // Determine whether a draw update in response to window state change might be required + BOOL isMainWindow = [[self window] isMainWindow]; + BOOL attachedWindowIsMainWindow = [[[self window] attachedSheet] isMainWindow]; + BOOL isActiveApplication = [NSApp isActive]; + if (_lastWindowIsMainCheck != isMainWindow || _lastAttachedWindowIsMainCheck != attachedWindowIsMainWindow || _lastAppIsActiveCheck != isActiveApplication) { + _lastWindowIsMainCheck = isMainWindow; + _lastAttachedWindowIsMainCheck = attachedWindowIsMainWindow; + _lastAppIsActiveCheck = isActiveApplication; + + // Allow the tab bar to redraw itself in result to window ordering/sheet/etc changes + [self setNeedsDisplay:YES]; + } } #pragma mark - |