aboutsummaryrefslogtreecommitdiffstats
path: root/Frameworks/PSMTabBar
diff options
context:
space:
mode:
authorrowanbeentje <rowan@beent.je>2012-04-02 00:23:52 +0000
committerrowanbeentje <rowan@beent.je>2012-04-02 00:23:52 +0000
commit09ed4be7e668dc10e0c4ca9178f8e1c414997b57 (patch)
treebe27a884f60f33fe2eb6cabd1270983900d2ebe4 /Frameworks/PSMTabBar
parent389b86985d977f81f840112249da5e3e278921e2 (diff)
downloadsequelpro-09ed4be7e668dc10e0c4ca9178f8e1c414997b57.tar.gz
sequelpro-09ed4be7e668dc10e0c4ca9178f8e1c414997b57.tar.bz2
sequelpro-09ed4be7e668dc10e0c4ca9178f8e1c414997b57.zip
PSMTabBar improvements:
- Add a new -destroyAnimations method to the tab bar and call it when tearing down the parent SPWindowController; this prevents animations redrawing the document after window close, fixing a number of crashes. - Improve the logic for collapsing and uncollapsing the tab bar as tabs are added and removed, fixing height calculation errors leading to Issue #1082 - Improve tab bar draw when animating in the Sequel Pro tab style
Diffstat (limited to 'Frameworks/PSMTabBar')
-rw-r--r--Frameworks/PSMTabBar/PSMTabBarControl.h2
-rw-r--r--Frameworks/PSMTabBar/PSMTabBarControl.m94
-rw-r--r--Frameworks/PSMTabBar/Styles/PSMSequelProTabStyle.m4
3 files changed, 44 insertions, 56 deletions
diff --git a/Frameworks/PSMTabBar/PSMTabBarControl.h b/Frameworks/PSMTabBar/PSMTabBarControl.h
index 481bb3b8..d2cbc534 100644
--- a/Frameworks/PSMTabBar/PSMTabBarControl.h
+++ b/Frameworks/PSMTabBar/PSMTabBarControl.h
@@ -16,6 +16,7 @@
#define PSMTabDragDidBeginNotification @"PSMTabDragDidBeginNotification"
#define kPSMTabBarControlHeight 22
+#define kPSMTabBarControlHeightCollapsed 1
// internal cell border
#define MARGIN_X 6
#define MARGIN_Y 3
@@ -205,6 +206,7 @@ enum {
- (void)hideTabBar:(BOOL)hide animate:(BOOL)animate;
- (BOOL)isTabBarHidden;
- (BOOL)isAnimating;
+- (void)destroyAnimations;
// internal bindings methods also used by the tab drag assistant
- (void)bindPropertiesForCell:(PSMTabBarCell *)cell andTabViewItem:(NSTabViewItem *)item;
diff --git a/Frameworks/PSMTabBar/PSMTabBarControl.m b/Frameworks/PSMTabBar/PSMTabBarControl.m
index a38c50b0..416b10d8 100644
--- a/Frameworks/PSMTabBar/PSMTabBarControl.m
+++ b/Frameworks/PSMTabBar/PSMTabBarControl.m
@@ -202,17 +202,8 @@
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
-
- //stop any animations that may be running
- [_animationTimer invalidate];
- [_animationTimer release]; _animationTimer = nil;
-
- [_showHideAnimationTimer invalidate];
- [_showHideAnimationTimer release]; _showHideAnimationTimer = nil;
- //Also unwind the spring, if it's wound.
- [_springTimer invalidate];
- [_springTimer release]; _springTimer = nil;
+ [self destroyAnimations];
//unbind all the items to prevent crashing
//not sure if this is necessary or not
@@ -796,7 +787,7 @@
- (void)hideTabBar:(BOOL)hide animate:(BOOL)animate
{
- if (!_awakenedFromNib || (_isHidden && hide) || (!_isHidden && !hide) || (_currentStep != kPSMIsNotBeingResized)) {
+ if (!_awakenedFromNib || (_isHidden && hide) || (!_isHidden && !hide)) {
return;
}
@@ -830,55 +821,35 @@
partnerOriginalSize = [[self window] frame].size.height;
partnerOriginalOrigin = [[self window] frame].origin.y;
}
-
+
+ // Determine the target sizes
+ if (_isHidden) {
+ myTargetSize = kPSMTabBarControlHeightCollapsed;
+ } else {
+ myTargetSize = kPSMTabBarControlHeight;
+ }
+
if (partnerView) {
+ partnerTargetSize = partnerOriginalSize + myOriginalSize - myTargetSize;
+
// above or below me?
- if ((myOriginalOrigin - 22) > partnerOriginalOrigin) {
- // partner is below me
- if (_isHidden) {
- // I'm shrinking
- myTargetOrigin = myOriginalOrigin + 21;
- myTargetSize = myOriginalSize - 21;
- partnerTargetOrigin = partnerOriginalOrigin;
- partnerTargetSize = partnerOriginalSize + 21;
- } else {
- // I'm growing
- myTargetOrigin = myOriginalOrigin - 21;
- myTargetSize = myOriginalSize + 21;
- partnerTargetOrigin = partnerOriginalOrigin;
- partnerTargetSize = partnerOriginalSize - 21;
- }
+ if ((myOriginalOrigin - kPSMTabBarControlHeight) > partnerOriginalOrigin) {
+
+ // partner is below me, keeps its origin
+ partnerTargetOrigin = partnerOriginalOrigin;
+ myTargetOrigin = myOriginalOrigin + myOriginalSize - myTargetSize;
} else {
- // partner is above me
- if (_isHidden) {
- // I'm shrinking
- myTargetOrigin = myOriginalOrigin;
- myTargetSize = myOriginalSize - 21;
- partnerTargetOrigin = partnerOriginalOrigin - 21;
- partnerTargetSize = partnerOriginalSize + 21;
- } else {
- // I'm growing
- myTargetOrigin = myOriginalOrigin;
- myTargetSize = myOriginalSize + 21;
- partnerTargetOrigin = partnerOriginalOrigin + 21;
- partnerTargetSize = partnerOriginalSize - 21;
- }
+
+ // partner is above me, I keep my origin
+ myTargetOrigin = myOriginalOrigin;
+ partnerTargetOrigin = partnerOriginalOrigin + myOriginalSize - myTargetSize;
}
} else {
+
// for window movement
- if (_isHidden) {
- // I'm shrinking
- myTargetOrigin = myOriginalOrigin;
- myTargetSize = myOriginalSize - 21;
- partnerTargetOrigin = partnerOriginalOrigin + 21;
- partnerTargetSize = partnerOriginalSize - 21;
- } else {
- // I'm growing
- myTargetOrigin = myOriginalOrigin;
- myTargetSize = myOriginalSize + 21;
- partnerTargetOrigin = partnerOriginalOrigin - 21;
- partnerTargetSize = partnerOriginalSize + 21;
- }
+ myTargetOrigin = myOriginalOrigin;
+ partnerTargetOrigin = partnerOriginalOrigin + myOriginalSize - myTargetSize;
+ partnerTargetSize = partnerOriginalSize - myOriginalSize + myTargetSize;
}
} else /* vertical */ {
// current (original) values
@@ -1046,6 +1017,21 @@
partnerView = view;
}
+- (void)destroyAnimations
+{
+ // Stop any animations that may be running
+
+ [_animationTimer invalidate];
+ [_animationTimer release]; _animationTimer = nil;
+
+ [_showHideAnimationTimer invalidate];
+ [_showHideAnimationTimer release]; _showHideAnimationTimer = nil;
+
+ // Also unwind the spring, if it's wound.
+ [_springTimer invalidate];
+ [_springTimer release]; _springTimer = nil;
+}
+
#pragma mark -
#pragma mark Drawing
diff --git a/Frameworks/PSMTabBar/Styles/PSMSequelProTabStyle.m b/Frameworks/PSMTabBar/Styles/PSMSequelProTabStyle.m
index 05c4ada2..b28fbbf8 100644
--- a/Frameworks/PSMTabBar/Styles/PSMSequelProTabStyle.m
+++ b/Frameworks/PSMTabBar/Styles/PSMSequelProTabStyle.m
@@ -364,7 +364,7 @@
}
[self drawBackgroundInRect:rect];
-
+
// no tab view == not connected
if (![bar tabView]) {
NSRect labelRect = rect;
@@ -530,7 +530,7 @@
NSRect aRect = NSMakeRect(cellFrame.origin.x, cellFrame.origin.y, cellFrame.size.width, cellFrame.size.height);
// If the tab bar is hidden, don't draw the top pixel
- if ([tabBar isTabBarHidden]) {
+ if ([tabBar isTabBarHidden] && [tabBar frame].size.height == kPSMTabBarControlHeightCollapsed) {
aRect.origin.y++;
aRect.size.height--;
}