X-Git-Url: http://git.ithinksw.org/ITKit.git/blobdiff_plain/2589c16f443dd6fe9df554eb533df464b5bb919b..079b33aed3d1c849f1f46022040813d6394100f2:/ITTransientStatusWindow.m diff --git a/ITTransientStatusWindow.m b/ITTransientStatusWindow.m index 004396a..f2ed917 100755 --- a/ITTransientStatusWindow.m +++ b/ITTransientStatusWindow.m @@ -1,23 +1,13 @@ #import "ITTransientStatusWindow.h" +#import "ITWindowEffect.h" #import #import "ITCoreGraphicsHacks.h" #import "ITTextField.h" #import "ITGrayRoundedView.h" - #define EFFECT_FPS 30.0 -/*************************************************************************/ -#pragma mark - -#pragma mark EVIL HACKERY -/*************************************************************************/ - -@interface NSApplication (HACKHACKHACKHACK) -- (CGSConnectionID)contextID; -@end - - /*************************************************************************/ #pragma mark - #pragma mark PRIVATE METHOD DECLARATIONS @@ -28,14 +18,7 @@ exitMode:(ITTransientStatusWindowExitMode)exitMode backgroundType:(ITTransientStatusWindowBackgroundType)backgroundType; - (void)rebuildWindow; -- (void)performEffect; -- (void)dissolveEffect; -- (void)slideVerticalEffect; -- (void)slideHorizontalEffect; -- (void)pivotEffect; -- (void)pivotStep; -- (void)pivotFinish; -- (void)setPivot:(float)angle; +- (void)startVanishTimer; @end @@ -94,16 +77,14 @@ static ITTransientStatusWindow *staticWindow = nil; _exitMode = exitMode; _exitDelay = DEFAULT_EXIT_DELAY; _backgroundType = backgroundType; - _verticalPosition = ITTransientStatusWindowPositionBottom; - _horizontalPosition = ITTransientStatusWindowPositionLeft; + _verticalPosition = ITWindowPositionBottom; + _horizontalPosition = ITWindowPositionLeft; _screenPadding = 32.0; - _entryEffect = ITTransientStatusWindowEffectNone; - _exitEffect = ITTransientStatusWindowEffectDissolve; - _effectTime = DEFAULT_EFFECT_TIME; - _effectProgress = 0.00; + _screenNumber = 0; + _entryEffect = nil; + _exitEffect = nil; _reallyIgnoresEvents = YES; _delayTimer = nil; - _effectTimer = nil; // if ( _backgroundType == ITTransientStatusWindowRounded ) { // _contentSubView = contentView; @@ -144,48 +125,6 @@ static ITTransientStatusWindow *staticWindow = nil; _reallyIgnoresEvents = flag; } -- (void)orderFront:(id)sender -{ - if ( _entryEffect == ITTransientStatusWindowEffectNone ) { - [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 == ITTransientStatusWindowEffectNone ) { - [super makeKeyAndOrderFront:sender]; - _visibilityState = ITTransientStatusWindowVisibleState; - } else { - [self performEffect]; - [self makeKeyWindow]; - } -} - -- (void)orderOut:(id)sender -{ - if ( _entryEffect == ITTransientStatusWindowEffectNone ) { - [super orderOut:sender]; - _visibilityState = ITTransientStatusWindowHiddenState; - } else { - [self performEffect]; - } -} - -- (NSTimeInterval)animationResizeTime:(NSRect)newFrame -{ - return _effectTime; -} /* @@ -213,11 +152,76 @@ static ITTransientStatusWindow *staticWindow = nil; */ -- (ITTransientStatusWindowVisibilityState)visibilityState + - (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]; + } + } + +- (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. + } +} + +- (ITWindowVisibilityState)visibilityState { return _visibilityState; } +- (void)setVisibilityState:(ITWindowVisibilityState)newState +{ + _visibilityState = newState; +} + - (ITTransientStatusWindowExitMode)exitMode { return _exitMode; @@ -251,26 +255,46 @@ static ITTransientStatusWindow *staticWindow = nil; _backgroundType = ITTransientStatusWindowRounded; } -- (ITTransientStatusWindowPosition)verticalPosition; +- (ITVerticalWindowPosition)verticalPosition; { return _verticalPosition; } -- (void)setVerticalPosition:(ITTransientStatusWindowPosition)newPosition; +- (void)setVerticalPosition:(ITVerticalWindowPosition)newPosition; { _verticalPosition = newPosition; } -- (ITTransientStatusWindowPosition)horizontalPosition; +- (ITHorizontalWindowPosition)horizontalPosition; { return _horizontalPosition; } -- (void)setHorizontalPosition:(ITTransientStatusWindowPosition)newPosition; +- (void)setHorizontalPosition:(ITHorizontalWindowPosition)newPosition; { _horizontalPosition = newPosition; } +- (float)screenPadding +{ + return _screenPadding; +} + +- (void)setScreenPadding:(float)newPadding +{ + _screenPadding = newPadding; +} + +- (int)screenNumber +{ + return _screenNumber; +} + +- (void)setScreenNumber:(int)newNumber +{ + _screenNumber = newNumber; +} + - (ITWindowEffect *)entryEffect { return _entryEffect; @@ -317,122 +341,9 @@ static ITTransientStatusWindow *staticWindow = nil; } } -- (void)performEffect -{ - 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]; - } -} - -- (void)dissolveEffect -{ - if ( _visibilityState == ITTransientStatusWindowEnteringState ) { - [super orderFront:self]; - _visibilityState = ITTransientStatusWindowVisibleState; - } else { - [super orderOut:self]; - _visibilityState = ITTransientStatusWindowHiddenState; - } -} - -- (void)slideVerticalEffect -{ - if ( _visibilityState == ITTransientStatusWindowEnteringState ) { - [super orderFront:self]; - _visibilityState = ITTransientStatusWindowVisibleState; - } else { - [super orderOut:self]; - _visibilityState = ITTransientStatusWindowHiddenState; - } -} - -- (void)slideHorizontalEffect +- (void)startVanishTimer { - if ( _visibilityState == ITTransientStatusWindowEnteringState ) { - [super orderFront:self]; - _visibilityState = ITTransientStatusWindowVisibleState; - } else { - [super orderOut:self]; - _visibilityState = ITTransientStatusWindowHiddenState; - } -} -- (void)pivotEffect -{ - if ( _visibilityState == ITTransientStatusWindowEnteringState ) { - [self setPivot:315.0]; - _effectProgress = 0.0; - [self setAlphaValue:0.0]; - [super orderFront:self]; - _effectTimer = [NSTimer scheduledTimerWithTimeInterval:(1.0 / EFFECT_FPS) - target:self - selector:@selector(pivotStep) - userInfo:nil - repeats:YES]; - } else { - [super orderOut:self]; - _visibilityState = ITTransientStatusWindowHiddenState; - } -} - -- (void)pivotStep -{ - if ( _visibilityState == ITTransientStatusWindowEnteringState ) { - 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)]; - [self setAlphaValue:interPivot]; - if ( _effectProgress >= 1.0 ) { - [self pivotFinish]; - } - } else { - //backwards - } -} - -- (void)pivotFinish -{ - if ( _visibilityState == ITTransientStatusWindowEnteringState ) { - [_effectTimer invalidate]; - _effectTimer = nil; - _effectProgress = 0.0; - _visibilityState = ITTransientStatusWindowVisibleState; - } else { - //backwards - } -} - - -- (void)setPivot:(float)angle -{ - float degAngle = (angle * (pi / 180)); - CGAffineTransform transform = CGAffineTransformMakeRotation(degAngle); - - // Set pivot point - transform.tx = -32.0; - transform.ty = [self frame].size.height + 32.0; - - CGSSetWindowTransform([NSApp contextID], - (CGSWindowID)[self windowNumber], - CGAffineTransformTranslate(transform, - (([self frame].origin.x - 32.0) * -1), - (([[self screen] frame].size.height - ([self frame].origin.y) + 32.0) * -1) )); } @end