From: Matthew Judy Date: Sun, 13 Apr 2003 09:58:59 +0000 (+0000) Subject: Adding a better cancel job to the Pivot effect. Also redoing the showcase interface... X-Git-Tag: v0.1~48 X-Git-Url: http://git.ithinksw.org/ITKit.git/commitdiff_plain/f9ac1766dbe420e477be299e49b2d8f69cafe5ec Adding a better cancel job to the Pivot effect. Also redoing the showcase interface to ITTSW for simplicity and stress testing. --- diff --git a/ITPivotWindowEffect.m b/ITPivotWindowEffect.m index 85b5f50..2c87f68 100755 --- a/ITPivotWindowEffect.m +++ b/ITPivotWindowEffect.m @@ -5,6 +5,8 @@ @interface ITPivotWindowEffect (Private) - (void)setPivot:(float)angle; +- (void)performAppearFromProgress:(float)progress effectTime:(float)time; +- (void)performVanishFromProgress:(float)progress effectTime:(float)time; - (void)appearFinish; - (void)vanishFinish; @end @@ -15,9 +17,19 @@ - (void)performAppear { [self setWindowVisibility:ITTransientStatusWindowAppearingState]; - [self setPivot:315.0]; - _effectProgress = 0.0; - [_window setAlphaValue:0.0]; + [self performAppearFromProgress:0.0 effectTime:_effectTime]; +} + +- (void)performAppearFromProgress:(float)progress effectTime:(float)time +{ + _effectProgress = progress; + _effectSpeed = (1.0 / (EFFECT_FPS * time)); + + if ( progress == 0.0 ) { + [self setPivot:315.0]; + [_window setAlphaValue:0.0]; + } + [_window orderFront:self]; _effectTimer = [NSTimer scheduledTimerWithTimeInterval:(1.0 / EFFECT_FPS) target:self @@ -29,9 +41,18 @@ - (void)performVanish { [self setWindowVisibility:ITTransientStatusWindowVanishingState]; - [self setPivot:0.0]; - _effectProgress = 1.0; - [_window setAlphaValue:1.0]; + [self performVanishFromProgress:1.0 effectTime:_effectTime]; +} + +- (void)performVanishFromProgress:(float)progress effectTime:(float)time +{ + _effectProgress = progress; + _effectSpeed = (1.0 / (EFFECT_FPS * time)); + if ( progress == 1.0 ) { + [self setPivot:0.0]; + [_window setAlphaValue:1.0]; + } + [_window orderFront:self]; _effectTimer = [NSTimer scheduledTimerWithTimeInterval:(1.0 / EFFECT_FPS) target:self @@ -42,27 +63,28 @@ - (void)cancelAppear { - [self appearFinish]; - [_window orderOut:self]; - [self setPivot:0.0]; - [_window setAlphaValue:1.0]; - [self setWindowVisibility:ITTransientStatusWindowHiddenState]; + [self setWindowVisibility:ITTransientStatusWindowVanishingState]; + + [_effectTimer invalidate]; + _effectTimer = nil; + + [self performVanishFromProgress:_effectProgress effectTime:(_effectTime / 3.5)]; } - (void)cancelVanish { - [self vanishFinish]; - [self setPivot:0.0]; - [_window setAlphaValue:1.0]; - [_window orderFront:self]; - [_window display]; - [self setWindowVisibility:ITTransientStatusWindowVisibleState]; + [self setWindowVisibility:ITTransientStatusWindowAppearingState]; + + [_effectTimer invalidate]; + _effectTimer = nil; + + [self performAppearFromProgress:_effectProgress effectTime:(_effectTime / 3.5)]; } - (void)appearStep { float interPivot = 0.0; - _effectProgress += (1.0 / (EFFECT_FPS * _effectTime)); + _effectProgress += _effectSpeed; _effectProgress = (_effectProgress < 1.0 ? _effectProgress : 1.0); interPivot = (( sin((_effectProgress * pi) - (pi / 2)) + 1 ) / 2); [self setPivot:((interPivot * 45) + 315)]; @@ -76,7 +98,7 @@ - (void)vanishStep { float interPivot = 1.0; - _effectProgress -= (1.0 / (EFFECT_FPS * _effectTime)); + _effectProgress -= _effectSpeed; _effectProgress = (_effectProgress > 0.0 ? _effectProgress : 0.0); interPivot = (( sin((_effectProgress * pi) - (pi / 2)) + 1 ) / 2); [self setPivot:((interPivot * 45) + 315)]; @@ -104,6 +126,7 @@ - (void)setPivot:(float)angle { float degAngle = (angle * (pi / 180)); + CGAffineTransform transform = CGAffineTransformMakeRotation(degAngle); // Set pivot rotation point diff --git a/ITWindowEffect.h b/ITWindowEffect.h index 907a39a..2cc6c45 100755 --- a/ITWindowEffect.h +++ b/ITWindowEffect.h @@ -46,6 +46,7 @@ typedef enum { { NSWindow *_window; float _effectTime; + float _effectSpeed; double _effectProgress; ITVerticalWindowPosition _verticalPosition; ITHorizontalWindowPosition _horizontalPosition; diff --git a/Showcase/Controller.h b/Showcase/Controller.h index 4b6d72e..8f96266 100755 --- a/Showcase/Controller.h +++ b/Showcase/Controller.h @@ -39,8 +39,7 @@ // ITTransientStatusWindow Support - (IBAction)buildStatusWindow:(id)sender; -- (IBAction)showStatusWindow:(id)sender; -- (IBAction)hideStatusWindow:(id)sender; +- (IBAction)toggleStatusWindow:(id)sender; - (IBAction)changeWindowSetting:(id)sender; // ITTabView support diff --git a/Showcase/Controller.m b/Showcase/Controller.m index a8914aa..16b5c0b 100755 --- a/Showcase/Controller.m +++ b/Showcase/Controller.m @@ -204,15 +204,15 @@ [statusWindow setExitEffect:[[ITPivotWindowEffect alloc] initWithWindow:statusWindow]]; } -- (IBAction)showStatusWindow:(id)sender +- (IBAction)toggleStatusWindow:(id)sender { - [[statusWindow contentView] setNeedsDisplay:YES]; - [statusWindow appear:self]; -} - -- (IBAction)hideStatusWindow:(id)sender -{ - [statusWindow vanish:self]; + if ( ([statusWindow visibilityState] == ITTransientStatusWindowHiddenState) || + ([statusWindow visibilityState] == ITTransientStatusWindowVanishingState) ) { + [[statusWindow contentView] setNeedsDisplay:YES]; + [statusWindow appear:self]; + } else { + [statusWindow vanish:self]; + } } - (IBAction)changeWindowSetting:(id)sender @@ -279,6 +279,7 @@ { } + /*************************************************************************/ #pragma mark - #pragma mark NSWindow DELEGATE METHODS diff --git a/Showcase/English.lproj/MainMenu.nib/classes.nib b/Showcase/English.lproj/MainMenu.nib/classes.nib index 89dc17d..a953fe1 100755 --- a/Showcase/English.lproj/MainMenu.nib/classes.nib +++ b/Showcase/English.lproj/MainMenu.nib/classes.nib @@ -4,8 +4,6 @@ ACTIONS = { buildStatusWindow = id; changeWindowSetting = id; - hideStatusWindow = id; - showStatusWindow = id; toggleCastsShadow = id; toggleCommandDragging = id; toggleControlDragging = id; @@ -14,6 +12,7 @@ toggleOptionDragging = id; toggleShiftDragging = id; toggleStatusItem = id; + toggleStatusWindow = id; toggleTabDragging = id; toggleTitle = id; }; diff --git a/Showcase/English.lproj/MainMenu.nib/keyedobjects.nib b/Showcase/English.lproj/MainMenu.nib/keyedobjects.nib index a831893..276577d 100755 Binary files a/Showcase/English.lproj/MainMenu.nib/keyedobjects.nib and b/Showcase/English.lproj/MainMenu.nib/keyedobjects.nib differ