X-Git-Url: http://git.ithinksw.org/ITKit.git/blobdiff_plain/f9f1dcb9f4e7bcd6ea0e7a7cbb386bd073a90d47..f9ac1766dbe420e477be299e49b2d8f69cafe5ec:/ITPivotWindowEffect.m 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