X-Git-Url: http://git.ithinksw.org/ITKit.git/blobdiff_plain/079b33aed3d1c849f1f46022040813d6394100f2..d89a0ca515b4db2cb0f4bbe6b7e4d709c5296eba:/ITTransientStatusWindow.m diff --git a/ITTransientStatusWindow.m b/ITTransientStatusWindow.m old mode 100755 new mode 100644 index f2ed917..029aa79 --- a/ITTransientStatusWindow.m +++ b/ITTransientStatusWindow.m @@ -1,9 +1,9 @@ #import "ITTransientStatusWindow.h" #import "ITWindowEffect.h" -#import +#import #import "ITCoreGraphicsHacks.h" #import "ITTextField.h" -#import "ITGrayRoundedView.h" +#import "ITTSWBackgroundView.h" #define EFFECT_FPS 30.0 @@ -19,6 +19,7 @@ backgroundType:(ITTransientStatusWindowBackgroundType)backgroundType; - (void)rebuildWindow; - (void)startVanishTimer; +- (void)stopVanishTimer; @end @@ -73,18 +74,19 @@ static ITTransientStatusWindow *staticWindow = nil; backing:NSBackingStoreBuffered defer:NO] ) ) { - _visibilityState = ITTransientStatusWindowHiddenState; + _visibilityState = ITWindowHiddenState; _exitMode = exitMode; _exitDelay = DEFAULT_EXIT_DELAY; _backgroundType = backgroundType; _verticalPosition = ITWindowPositionBottom; _horizontalPosition = ITWindowPositionLeft; _screenPadding = 32.0; - _screenNumber = 0; + //_screenNumber = 0; _entryEffect = nil; _exitEffect = nil; _reallyIgnoresEvents = YES; - _delayTimer = nil; + _exitTimer = nil; + [self setScreen:[NSScreen mainScreen]]; // if ( _backgroundType == ITTransientStatusWindowRounded ) { // _contentSubView = contentView; @@ -100,6 +102,11 @@ static ITTransientStatusWindow *staticWindow = nil; return self; } +- (void)dealloc +{ + [_screen release]; + [super dealloc]; +} /*************************************************************************/ #pragma mark - @@ -113,19 +120,29 @@ static ITTransientStatusWindow *staticWindow = nil; - (void)setIgnoresMouseEvents:(BOOL)flag { - CGSValueObj key; - CGSValueObj ignore; + //CGSValueObj key; + //CGSValueObj ignore; + CGSWindowTag tags; - key = CGSCreateCString("IgnoreForEvents"); + /*key = CGSCreateCString("IgnoreForEvents"); ignore = CGSCreateBoolean( (flag ? kCGSTrue : kCGSFalse) ); CGSSetWindowProperty([NSApp contextID], (CGSWindowID)[self windowNumber], key, ignore); CGSReleaseObj(key); - CGSReleaseObj(ignore); + CGSReleaseObj(ignore);*/ + + CGSGetWindowTags([NSApp contextID], (CGSWindowID)[self windowNumber], &tags, 32); + + if (flag) { + tags = tags | CGSTagTransparent; + } else { + tags = tags & CGSTagTransparent; + } + + CGSSetWindowTags([NSApp contextID], (CGSWindowID)[self windowNumber], &tags, 32); _reallyIgnoresEvents = flag; } - /* - (id)contentView @@ -152,66 +169,58 @@ static ITTransientStatusWindow *staticWindow = nil; */ - - (IBAction)appear:(id)sender - { - NSLog(@"%i", _visibilityState); - if ( _visibilityState == ITTransientStatusWindowHiddenState ) { +- (IBAction)appear:(id)sender +{ + if ( _visibilityState == ITWindowHiddenState ) { // 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 ) { + [_entryEffect performAppear]; + } else if ( _visibilityState == ITWindowVisibleState ) { // 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]; + } else if ( _visibilityState == ITWindowAppearingState ) { + // Window is on its way in. Do nothing. + } else if ( _visibilityState == ITWindowVanishingState ) { + // Window is on its way out. Cancel the vanish. + [_exitEffect cancelVanish]; } - } +} - (IBAction)vanish:(id)sender { - if ( _visibilityState == ITTransientStatusWindowVisibleState ) { + if ( _visibilityState == ITWindowVisibleState ) { // 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 ) { + [_exitEffect performVanish]; + } else if ( _visibilityState == ITWindowHiddenState ) { // Window is hidden. Do nothing. - } else if ( _visibilityState == ITTransientStatusWindowAppearingState ) { + } else if ( _visibilityState == ITWindowAppearingState ) { // Window is on its way in. Cancel appear. [_entryEffect cancelAppear]; - _visibilityState = ITTransientStatusWindowHiddenState; - } else if ( _visibilityState == ITTransientStatusWindowVanishingState ) { + } else if ( _visibilityState == ITWindowVanishingState ) { // Window is on its way out. Do nothing. } } +- (void)setScreen:(NSScreen *)newScreen +{ + [_screen release]; + _screen = [newScreen retain]; +} + +- (NSScreen *)screen +{ + return _screen; +} + +- (void)setSizing:(ITTransientStatusWindowSizing)newSizing +{ + _sizing = newSizing; +} + +- (ITTransientStatusWindowSizing)sizing +{ + return _sizing; +} + - (ITWindowVisibilityState)visibilityState { return _visibilityState; @@ -220,6 +229,12 @@ static ITTransientStatusWindow *staticWindow = nil; - (void)setVisibilityState:(ITWindowVisibilityState)newState { _visibilityState = newState; + + if ( _visibilityState == ITWindowVisibleState ) { + [self startVanishTimer]; + } else if ( (_visibilityState == ITWindowVanishingState) || (_visibilityState == ITWindowHiddenState) ) { + [self stopVanishTimer]; + } } - (ITTransientStatusWindowExitMode)exitMode @@ -230,6 +245,14 @@ static ITTransientStatusWindow *staticWindow = nil; - (void)setExitMode:(ITTransientStatusWindowExitMode)newMode { _exitMode = newMode; + + if ( _visibilityState == ITWindowVisibleState ) { + if ( _exitMode == ITTransientStatusWindowExitOnCommand ) { + [self stopVanishTimer]; + } else if ( _exitMode == ITTransientStatusWindowExitAfterDelay ) { + [self startVanishTimer]; + } + } } - (float)exitDelay @@ -275,6 +298,16 @@ static ITTransientStatusWindow *staticWindow = nil; _horizontalPosition = newPosition; } +- (float)effectProgress +{ + return _effectProgress; +} + +- (void)setEffectProgress:(float)newProgress +{ + _effectProgress = newProgress; +} + - (float)screenPadding { return _screenPadding; @@ -285,7 +318,7 @@ static ITTransientStatusWindow *staticWindow = nil; _screenPadding = newPadding; } -- (int)screenNumber +/*- (int)screenNumber { return _screenNumber; } @@ -293,7 +326,7 @@ static ITTransientStatusWindow *staticWindow = nil; - (void)setScreenNumber:(int)newNumber { _screenNumber = newNumber; -} +}*/ - (ITWindowEffect *)entryEffect { @@ -302,7 +335,7 @@ static ITTransientStatusWindow *staticWindow = nil; - (void)setEntryEffect:(ITWindowEffect *)newEffect { - [_entryEffect autorelease]; + [_entryEffect releaseWhenIdle]; _entryEffect = [newEffect retain]; } @@ -313,7 +346,7 @@ static ITTransientStatusWindow *staticWindow = nil; - (void)setExitEffect:(ITWindowEffect *)newEffect { - [_exitEffect autorelease]; + [_exitEffect releaseWhenIdle]; _exitEffect = [newEffect retain]; } @@ -326,7 +359,7 @@ static ITTransientStatusWindow *staticWindow = nil; - (void)rebuildWindow; { if ( _backgroundType == ITTransientStatusWindowRounded ) { - ITGrayRoundedView *roundedView = [[[ITGrayRoundedView alloc] initWithFrame:[self frame]] autorelease]; + ITTSWBackgroundView *roundedView = [[[ITTSWBackgroundView alloc] initWithFrame:[self frame]] autorelease]; [self setBackgroundColor:[NSColor clearColor]]; [self setHasShadow:NO]; @@ -343,7 +376,28 @@ static ITTransientStatusWindow *staticWindow = nil; - (void)startVanishTimer { + if ( _exitMode == ITTransientStatusWindowExitAfterDelay) { + [self stopVanishTimer]; + _exitTimer = [NSTimer scheduledTimerWithTimeInterval:_exitDelay + target:self + selector:@selector(doDelayedExit) + userInfo:nil + repeats:NO]; + } +} +- (void)doDelayedExit +{ + [self vanish:self]; + _exitTimer = nil; +} + +- (void)stopVanishTimer +{ + if ( _exitTimer ) { + [_exitTimer invalidate]; + _exitTimer = nil; + } } @end