From: Matthew Judy Date: Mon, 31 Mar 2003 00:50:46 +0000 (+0000) Subject: Incremental checkin. X-Git-Tag: v0.1~52 X-Git-Url: http://git.ithinksw.org/ITKit.git/commitdiff_plain/079b33aed3d1c849f1f46022040813d6394100f2 Incremental checkin. --- diff --git a/ITDissolveWindowEffect.m b/ITDissolveWindowEffect.m index 2dda28d..31aed00 100755 --- a/ITDissolveWindowEffect.m +++ b/ITDissolveWindowEffect.m @@ -14,5 +14,15 @@ NSLog(@"ITDissolveWindowEffect does not implement performVanish."); } +- (void)cancelAppear +{ + NSLog(@"ITWindowEffect does not implement cancelAppear."); +} + +- (void)cancelVanish +{ + NSLog(@"ITDissolveWindowEffect does not implement cancelVanish."); +} + @end diff --git a/ITPivotWindowEffect.m b/ITPivotWindowEffect.m index 81fb8ce..299506a 100755 --- a/ITPivotWindowEffect.m +++ b/ITPivotWindowEffect.m @@ -1,62 +1,89 @@ #import "ITPivotWindowEffect.h" #import "ITCoreGraphicsHacks.h" +@interface ITPivotWindowEffect (Private) +- (void)setPivot:(float)angle; +- (void)pivotFinish; +@end + @implementation ITPivotWindowEffect - (void)performAppear { - NSLog(@"ITPivotWindowEffect does not implement performAppear."); + [self setPivot:315.0]; + _effectProgress = 0.0; + [_window setAlphaValue:0.0]; + [_window orderFront:self]; + _effectTimer = [NSTimer scheduledTimerWithTimeInterval:(1.0 / EFFECT_FPS) + target:self + selector:@selector(appearStep) + userInfo:nil + repeats:YES]; } - (void)performVanish { - NSLog(@"ITPivotWindowEffect does not implement performVanish."); + [self setPivot:0.0]; + _effectProgress = 1.0; + [_window setAlphaValue:1.0]; + [_window orderFront:self]; + _effectTimer = [NSTimer scheduledTimerWithTimeInterval:(1.0 / EFFECT_FPS) + target:self + selector:@selector(vanishStep) + userInfo:nil + repeats:YES]; +} + +- (void)cancelAppear +{ + [self pivotFinish]; + [_window orderOut:self]; + [self setPivot:0.0]; + [_window setAlphaValue:1.0]; } -- (void)pivotEffect +- (void)cancelVanish { - if ( YES ) { - [self setPivot:315.0]; - _effectProgress = 0.0; - [_window setAlphaValue:0.0]; - [_window orderFront:self]; - _effectTimer = [NSTimer scheduledTimerWithTimeInterval:(1.0 / EFFECT_FPS) - target:self - selector:@selector(pivotStep) - userInfo:nil - repeats:YES]; - } else { - [_window orderOut:self]; + [self pivotFinish]; + [self setPivot:0.0]; + [_window setAlphaValue:1.0]; + [_window orderFront:self]; + [_window display]; +} + +- (void)appearStep +{ + float interPivot = 0.0; + _effectProgress += (1.0 / (EFFECT_FPS * _effectTime)); + _effectProgress = (_effectProgress < 1.0 ? _effectProgress : 1.0); + interPivot = (( sin((_effectProgress * pi) - (pi / 2)) + 1 ) / 2); + [self setPivot:((interPivot * 45) + 315)]; + [_window setAlphaValue:interPivot]; + + if ( _effectProgress >= 1.0 ) { + [self pivotFinish]; } } -- (void)pivotStep +- (void)vanishStep { - if ( YES ) { - float interPivot = 0.0; - _effectProgress += (1.0 / (EFFECT_FPS * _effectTime)); - _effectProgress = (_effectProgress < 1.0 ? _effectProgress : 1.0); - interPivot = (( sin((_effectProgress * pi) - (pi / 2)) + 1 ) / 2); - [self setPivot:((interPivot * 45) + 315)]; - [_window setAlphaValue:interPivot]; - if ( _effectProgress >= 1.0 ) { - [self pivotFinish]; - } - } else { - //backwards + float interPivot = 1.0; + _effectProgress -= (1.0 / (EFFECT_FPS * _effectTime)); + _effectProgress = (_effectProgress > 0.0 ? _effectProgress : 0.0); + interPivot = (( sin((_effectProgress * pi) - (pi / 2)) + 1 ) / 2); + [self setPivot:((interPivot * 45) + 315)]; + [_window setAlphaValue:interPivot]; + + if ( _effectProgress <= 0.0 ) { + [self pivotFinish]; } } - (void)pivotFinish { - if ( YES ) { - [_effectTimer invalidate]; - _effectTimer = nil; - _effectProgress = 0.0; - } else { - //backwards - } + [_effectTimer invalidate]; + _effectTimer = nil; } @@ -65,7 +92,7 @@ float degAngle = (angle * (pi / 180)); CGAffineTransform transform = CGAffineTransformMakeRotation(degAngle); - // Set pivot point + // Set pivot rotation point transform.tx = -32.0; transform.ty = [_window frame].size.height + 32.0; diff --git a/ITSlideHorizontallyWindowEffect.m b/ITSlideHorizontallyWindowEffect.m index 74673d2..c5f3fba 100755 --- a/ITSlideHorizontallyWindowEffect.m +++ b/ITSlideHorizontallyWindowEffect.m @@ -14,5 +14,15 @@ NSLog(@"ITSlideHorizontallyWindowEffect does not implement performVanish."); } +- (void)cancelAppear +{ + NSLog(@"ITSlideHorizontallyWindowEffect does not implement cancelAppear."); +} + +- (void)cancelVanish +{ + NSLog(@"ITSlideHorizontallyWindowEffect does not implement cancelVanish."); +} + @end diff --git a/ITSlideVerticallyWindowEffect.m b/ITSlideVerticallyWindowEffect.m index 8c27b42..143e079 100755 --- a/ITSlideVerticallyWindowEffect.m +++ b/ITSlideVerticallyWindowEffect.m @@ -14,5 +14,15 @@ NSLog(@"ITSlideVerticallyWindowEffect does not implement performVanish."); } +- (void)cancelAppear +{ + NSLog(@"ITSlideVerticallyWindowEffect does not implement cancelAppear."); +} + +- (void)cancelVanish +{ + NSLog(@"ITSlideVerticallyWindowEffect does not implement cancelVanish."); +} + @end diff --git a/ITTransientStatusWindow.h b/ITTransientStatusWindow.h index 52e96d7..90d74c6 100755 --- a/ITTransientStatusWindow.h +++ b/ITTransientStatusWindow.h @@ -4,10 +4,10 @@ * NSWindow subclass for quick display of status information. * Similar to volume/brightness/eject bezel key windows. * - * Original Author : Kent Sutherland * Original Author : Matt Judy * Responsibility : Matt Judy * Responsibility : Joseph Spiros + * Contributor : Kent Sutherland * * Copyright (c) 2002 - 2003 iThink Software. * All Rights Reserved @@ -17,7 +17,7 @@ #import #import "ITWindowPositioning.h" - +#import "ITWindowEffect.h" #define DEFAULT_EXIT_DELAY 3.0 @@ -28,17 +28,11 @@ typedef enum { - ITTransientStatusWindowHiddenState, - ITTransientStatusWindowAppearingState, - ITTransientStatusWindowVisibleState, - ITTransientStatusWindowVanishingState -} ITTransientStatusWindowVisibilityState; - -typedef enum { - ITTransientStatusWindowExitOnOrderOut, + ITTransientStatusWindowExitOnCommand, ITTransientStatusWindowExitAfterDelay, } ITTransientStatusWindowExitMode; + typedef enum { ITTransientStatusWindowNoBackground, ITTransientStatusWindowRounded, @@ -48,9 +42,10 @@ typedef enum { ITTransientStatusWindowAquaUtility } ITTransientStatusWindowBackgroundType; -@interface ITTransientStatusWindow : NSWindow { - ITTransientStatusWindowVisibilityState _visibilityState; +@interface ITTransientStatusWindow : NSWindow { + + ITWindowVisibilityState _visibilityState; ITTransientStatusWindowExitMode _exitMode; float _exitDelay; ITTransientStatusWindowBackgroundType _backgroundType; @@ -74,7 +69,11 @@ typedef enum { exitMode:(ITTransientStatusWindowExitMode)exitMode backgroundType:(ITTransientStatusWindowBackgroundType)backgroundType; -- (ITTransientStatusWindowVisibilityState)visibilityState; +- (void)appear:(id)sender; +- (void)vanish:(id)sender; + +- (ITWindowVisibilityState)visibilityState; +- (void)setVisibilityState:(ITWindowVisibilityState)newState; - (ITTransientStatusWindowExitMode)exitMode; - (void)setExitMode:(ITTransientStatusWindowExitMode)newMode; diff --git a/ITTransientStatusWindow.m b/ITTransientStatusWindow.m index f749278..f2ed917 100755 --- a/ITTransientStatusWindow.m +++ b/ITTransientStatusWindow.m @@ -18,7 +18,7 @@ exitMode:(ITTransientStatusWindowExitMode)exitMode backgroundType:(ITTransientStatusWindowBackgroundType)backgroundType; - (void)rebuildWindow; -// - (void)performEffect; +- (void)startVanishTimer; @end @@ -125,50 +125,8 @@ static ITTransientStatusWindow *staticWindow = nil; _reallyIgnoresEvents = flag; } -/* - -- (void)orderFront:(id)sender -{ - if ( _entryEffect == nil ) { - [super orderFront:sender]; - _visibilityState = ITTransientStatusWindowVisibleState; - } else { - [self performEffect]; - } - if ( _exitMode == ITTransientStatusWindowExitAfterDelay ) { - // set the timer, and orderOut: when it lapses. - } -} - -- (void)makeKeyAndOrderFront:(id)sender -{ - if ( _exitMode == ITTransientStatusWindowExitAfterDelay ) { - // set the timer, and orderOut: when it lapses. - } - if ( _entryEffect == nil ) { - [super makeKeyAndOrderFront:sender]; - _visibilityState = ITTransientStatusWindowVisibleState; - } else { - [self performEffect]; - [self makeKeyWindow]; - } -} - -- (void)orderOut:(id)sender -{ - if ( _entryEffect == nil ) { - [super orderOut:sender]; - _visibilityState = ITTransientStatusWindowHiddenState; - } else { - [self performEffect]; - } -} - -- (NSTimeInterval)animationResizeTime:(NSRect)newFrame -{ - return _resizeTime; -} +/* - (id)contentView { @@ -194,35 +152,74 @@ static ITTransientStatusWindow *staticWindow = nil; */ -- (void)appear -{ - if ( _entryEffect == nil ) { - [self orderFront:self]; - _visibilityState = ITTransientStatusWindowVisibleState; - } else { - _visibilityState = ITTransientStatusWindowAppearingState; - [_entryEffect performAppear]; - _visibilityState = ITTransientStatusWindowVisibleState; + - (IBAction)appear:(id)sender + { + NSLog(@"%i", _visibilityState); + if ( _visibilityState == ITTransientStatusWindowHiddenState ) { + // Window is hidden. Appear as normal, and start the timer. + if ( _entryEffect == nil ) { + [self orderFront:self]; + _visibilityState = ITTransientStatusWindowVisibleState; + } else { + _visibilityState = ITTransientStatusWindowAppearingState; + [_entryEffect performAppear]; + _visibilityState = ITTransientStatusWindowVisibleState; + } + [self startVanishTimer]; + } else if ( _visibilityState == ITTransientStatusWindowVisibleState ) { + // Window is completely visible. Simply reset the timer. + [self startVanishTimer]; + } else if ( _visibilityState == ITTransientStatusWindowAppearingState ) { + // Window is appearing. Do nothing. + } else if ( _visibilityState == ITTransientStatusWindowVanishingState ) { + NSLog(@"%i", _visibilityState); + if ( _exitEffect == nil ) { + [self orderFront:self]; + _visibilityState = ITTransientStatusWindowVisibleState; + } else { + _visibilityState = ITTransientStatusWindowAppearingState; + [_exitEffect cancelVanish]; + _visibilityState = ITTransientStatusWindowVisibleState; + } + [self startVanishTimer]; } - if ( _exitMode == ITTransientStatusWindowExitAfterDelay ) { - // set the timer, and vanish when it lapses. + } + +- (IBAction)vanish:(id)sender +{ + if ( _visibilityState == ITTransientStatusWindowVisibleState ) { + // Window is totally visible. Perform exit effect. + if ( _exitEffect == nil ) { + [self orderOut:self]; + _visibilityState = ITTransientStatusWindowHiddenState; + } else { + _visibilityState = ITTransientStatusWindowVanishingState; + NSLog(@"%i", _visibilityState); + [_exitEffect performVanish]; + NSLog(@"%i", _visibilityState); + _visibilityState = ITTransientStatusWindowHiddenState; + NSLog(@"%i", _visibilityState); + } + [self startVanishTimer]; + } else if ( _visibilityState == ITTransientStatusWindowHiddenState ) { + // Window is hidden. Do nothing. + } else if ( _visibilityState == ITTransientStatusWindowAppearingState ) { + // Window is on its way in. Cancel appear. + [_entryEffect cancelAppear]; + _visibilityState = ITTransientStatusWindowHiddenState; + } else if ( _visibilityState == ITTransientStatusWindowVanishingState ) { + // Window is on its way out. Do nothing. } } -- (void)vanish +- (ITWindowVisibilityState)visibilityState { - if ( _entryEffect == nil ) { - [self orderOut:self]; - _visibilityState = ITTransientStatusWindowHiddenState; - } else { - [_exitEffect performVanish]; - _visibilityState = ITTransientStatusWindowHiddenState; - } + return _visibilityState; } -- (ITTransientStatusWindowVisibilityState)visibilityState +- (void)setVisibilityState:(ITWindowVisibilityState)newState { - return _visibilityState; + _visibilityState = newState; } - (ITTransientStatusWindowExitMode)exitMode @@ -344,30 +341,9 @@ static ITTransientStatusWindow *staticWindow = nil; } } -/* - -- (void)performEffect +- (void)startVanishTimer { - if ( _visibilityState == ITTransientStatusWindowHiddenState ) { - _visibilityState = ITTransientStatusWindowEnteringState; - } else if ( _visibilityState == ITTransientStatusWindowVisibleState ) { - _visibilityState = ITTransientStatusWindowExitingState; - } else { - return; - } - - if ( _entryEffect == ITTransientStatusWindowEffectDissolve ) { - [self dissolveEffect]; - } else if ( _entryEffect == ITTransientStatusWindowEffectSlideVertically ) { - [self slideVerticalEffect]; - } else if ( _entryEffect == ITTransientStatusWindowEffectSlideHorizontally ) { - [self slideHorizontalEffect]; - } else if ( _entryEffect == ITTransientStatusWindowEffectPivot ) { - [self pivotEffect]; - } -} - -*/ +} @end diff --git a/ITWindowEffect.h b/ITWindowEffect.h index df4578b..1c4e3cb 100755 --- a/ITWindowEffect.h +++ b/ITWindowEffect.h @@ -20,11 +20,25 @@ #define DEFAULT_EFFECT_TIME 0.75 -@protocol ITWindowEffect +typedef enum { + ITTransientStatusWindowHiddenState, + ITTransientStatusWindowAppearingState, + ITTransientStatusWindowVisibleState, + ITTransientStatusWindowVanishingState +} ITWindowVisibilityState; + +@protocol ITWindowEffect - (void)performAppear; - (void)performVanish; +- (void)cancelAppear; +- (void)cancelVanish; +@end + +@protocol ITWindowVisibility +- (ITWindowVisibilityState)visibilityState; +- (void)setVisibilityState:(ITWindowVisibilityState)newState; @end @@ -43,7 +57,8 @@ - (NSWindow *)window; -// setWindow: does not retain or release its window. It simply references it. - (void)setWindow:(NSWindow *)newWindow; +- (void)setWindowVisibility:(ITWindowVisibilityState)visibilityState; + @end diff --git a/ITWindowEffect.m b/ITWindowEffect.m index bb7cfed..9eb75a6 100755 --- a/ITWindowEffect.m +++ b/ITWindowEffect.m @@ -1,4 +1,5 @@ #import "ITWindowEffect.h" +#import "ITTransientStatusWindow.h" @implementation ITWindowEffect @@ -14,8 +15,9 @@ _effectTimer = nil; if ( [window conformsToProtocol:@protocol(ITWindowPositioning)] ) { - _verticalPosition = (ITVerticalWindowPosition)[window verticalPosition]; - _horizontalPosition = (ITHorizontalWindowPosition)[window horizontalPosition]; + // Casts so the compiler won't gripe + _verticalPosition = (ITVerticalWindowPosition)[(ITTransientStatusWindow *)window verticalPosition]; + _horizontalPosition = (ITHorizontalWindowPosition)[(ITTransientStatusWindow *)window horizontalPosition]; } else { NSLog(@"ITWindowEffect - initWithWindow: - window does not conform to ITWindowPositioning."); _verticalPosition = ITWindowPositionBottom; @@ -32,7 +34,18 @@ - (void)setWindow:(NSWindow *)newWindow { - _window = newWindow; + [_window autorelease]; + _window = [newWindow retain]; +} + +- (void)setWindowVisibility:(ITWindowVisibilityState)visibilityState +{ + if ( [_window conformsToProtocol:@protocol(ITWindowVisibility)] ) { + // Cast so the compiler won't gripe + [(ITTransientStatusWindow *)_window setVisibilityState:visibilityState]; + } else { + NSLog(@"ITWindowEffect - setWindowVisibility: - window does not conform to ITWindowVisibility."); + } } - (void)performAppear @@ -45,6 +58,16 @@ NSLog(@"ITWindowEffect does not implement performVanish."); } +- (void)cancelAppear +{ + NSLog(@"ITWindowEffect does not implement cancelAppear."); +} + +- (void)cancelVanish +{ + NSLog(@"ITWindowEffect does not implement cancelVanish."); +} + - (void)dealloc { [_window release]; diff --git a/Showcase/Controller.m b/Showcase/Controller.m index f09bdf7..1a9eab2 100755 --- a/Showcase/Controller.m +++ b/Showcase/Controller.m @@ -1,6 +1,7 @@ #import "Controller.h" #import "ITTransientStatusWindow.h" #import "ITTextField.h" +#import "ITPivotWindowEffect.h" #define SW_PAD 24.0 #define SW_SPACE 24.0 @@ -198,6 +199,9 @@ [[statusWindow contentView] addSubview:textField]; [[statusWindow contentView] setNeedsDisplay:YES]; + + [statusWindow setEntryEffect:[[ITPivotWindowEffect alloc] initWithWindow:statusWindow]]; + [statusWindow setExitEffect:[[ITPivotWindowEffect alloc] initWithWindow:statusWindow]]; } - (IBAction)showStatusWindow:(id)sender @@ -210,7 +214,7 @@ NSHeight([statusWindow frame]) ) display:YES]; */ - [statusWindow orderFront:self]; + [statusWindow appear:self]; /* [statusWindow setFrame:NSMakeRect( SW_BORDER, SW_BORDER, @@ -223,12 +227,12 @@ - (IBAction)hideStatusWindow:(id)sender { - [statusWindow orderOut:self]; + [statusWindow vanish:self]; } - (IBAction)setRotation:(id)sender { - [statusWindow setPivot:[sender floatValue]]; + NSLog(@"no longer supported"); } /*************************************************************************/ diff --git a/Showcase/English.lproj/MainMenu.nib/info.nib b/Showcase/English.lproj/MainMenu.nib/info.nib index a8f0269..ec37e93 100755 --- a/Showcase/English.lproj/MainMenu.nib/info.nib +++ b/Showcase/English.lproj/MainMenu.nib/info.nib @@ -3,22 +3,22 @@ IBDocumentLocation - 3 3 356 240 0 0 1152 746 + 3 3 356 240 0 0 1056 770 IBEditorPositions 197 69 252 75 120 0 0 1056 770 29 - 43 283 349 44 0 0 1152 746 + 38 293 349 44 0 0 1056 770 IBFramework Version - 291.0 + 286.0 IBOpenObjects 21 29 IBSystem Version - 6G30 + 6I32 diff --git a/Showcase/English.lproj/MainMenu.nib/keyedobjects.nib b/Showcase/English.lproj/MainMenu.nib/keyedobjects.nib index 5f366cd..8ed526b 100755 Binary files a/Showcase/English.lproj/MainMenu.nib/keyedobjects.nib and b/Showcase/English.lproj/MainMenu.nib/keyedobjects.nib differ