X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fthecheat;a=blobdiff_plain;f=FadeView.m;fp=FadeView.m;h=0e9b7ee6a0db455f389a25e9e2652d9ebd9426df;hp=0000000000000000000000000000000000000000;hb=d27548f80fe411fda2ee69c74a24eab4292267e9;hpb=e8d51183acdd2410a38dcf8f0efbf7c30cd6c581 diff --git a/FadeView.m b/FadeView.m new file mode 100644 index 0000000..0e9b7ee --- /dev/null +++ b/FadeView.m @@ -0,0 +1,145 @@ +// +// FadeView.m +// The Cheat +// +// Created by Chaz McGarvey on 12/6/04. +// Copyright 2004 Chaz McGarvey. All rights reserved. +// + +#import "FadeView.h" + + +@interface FadeView ( PrivateAPI ) + +- (void)_fadeTimer:(NSTimer *)timer; + +@end + + +@implementation FadeView + + +- (id)init +{ + if ( self = [super init] ) { + [self setFadeDuration:1.0]; + [self setFadeInterval:5.0/60.0]; + } + return self; +} + +- (id)initWithFrame:(NSRect)frame +{ + if ( self = [super initWithFrame:frame] ) { + [self setFadeDuration:1.0]; + [self setFadeInterval:5.0/60.0]; + } + return self; +} + +- (void)dealloc +{ + [self stopFadeAnimation]; + [_fadeImage release]; + [super dealloc]; +} + + +- (void)drawRect:(NSRect)rect +{ + [_fadeImage dissolveToPoint:NSMakePoint(0,0) fraction:_fadeAlpha]; +} + + +- (NSImage *)image +{ + return _fadeImage; +} + +- (NSTimeInterval)fadeDuration +{ + return _fadeDuration; +} + +- (NSTimeInterval)fadeInterval +{ + return _fadeInterval; +} + +- (double)alpha +{ + return _fadeAlpha; +} + + +- (void)setImage:(NSImage *)image +{ + [image retain]; + [_fadeImage release]; + _fadeImage = image; +} + +- (void)setFadeDuration:(NSTimeInterval)seconds +{ + if ( seconds != 0.0 ) { + _fadeDuration = seconds; + } + else { + _fadeDuration = 1.0; + } +} + +- (void)setFadeInterval:(NSTimeInterval)seconds +{ + _fadeInterval = seconds; +} + +- (void)startFadeAnimation +{ + [self stopFadeAnimation]; + + _fadeAlpha = 1.0; + [self setNeedsDisplay:YES]; + + _fadeTimer = [[NSTimer scheduledTimerWithTimeInterval:_fadeInterval target:self selector:@selector(_fadeTimer:) userInfo:nil repeats:YES] retain]; + [[NSRunLoop currentRunLoop] addTimer:_fadeTimer forMode:NSEventTrackingRunLoopMode]; + [[NSRunLoop currentRunLoop] addTimer:_fadeTimer forMode:NSModalPanelRunLoopMode]; + [self release]; +} + +- (void)stopFadeAnimation +{ + if ( _fadeTimer ) { + [self retain]; + [_fadeTimer invalidate]; + [_fadeTimer release]; + _fadeTimer = nil; + } +} + +- (void)_fadeTimer:(NSTimer *)timer +{ + _fadeAlpha -= [timer timeInterval] / _fadeDuration; + [self setNeedsDisplay:YES]; + + if ( _fadeAlpha <= 0.0 ) { + [self stopFadeAnimation]; + if ( [_delegate respondsToSelector:@selector(fadeViewFinishedAnimation:)] ) { + [_delegate fadeViewFinishedAnimation:self]; + } + } +} + + +- (id)delegate +{ + return _delegate; +} + +- (void)setDelegate:(id)delegate +{ + _delegate = delegate; +} + + +@end