-
Notifications
You must be signed in to change notification settings - Fork 0
/
ITWindowEffect.m
158 lines (135 loc) · 4.47 KB
/
ITWindowEffect.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
#import "ITWindowEffect.h"
#import "ITTransientStatusWindow.h"
#import <OpenGL/gl.h>
#import <OpenGL/glu.h>
#import <OpenGL/glext.h>
@implementation ITWindowEffect
+ (NSArray *)effectClasses
{
NSMutableArray *classes = [[NSArray arrayWithObjects:
NSClassFromString(@"ITCutWindowEffect"),
NSClassFromString(@"ITDissolveWindowEffect"),
NSClassFromString(@"ITSlideHorizontallyWindowEffect"),
NSClassFromString(@"ITSlideVerticallyWindowEffect"),
NSClassFromString(@"ITPivotWindowEffect"),
NSClassFromString(@"ITZoomWindowEffect"),
NSClassFromString(@"ITSpinWindowEffect"),
NSClassFromString(@"ITSpinAndZoomWindowEffect"),
nil] mutableCopy];
long version;
if ((Gestalt(gestaltSystemVersion, &version) == noErr) && (version >= 4160) && (version < 4166)) {
NSOpenGLView *view = [[NSOpenGLView alloc] initWithFrame:NSMakeRect(0, 0, 1, 1) pixelFormat:[NSOpenGLView defaultPixelFormat]];
if ([view openGLContext]) {
NSString *string = [NSString stringWithCString:glGetString(GL_EXTENSIONS)];
NSRange result = [string rangeOfString:@"ARB_fragment_program"];
if (result.location != NSNotFound) {
[classes addObject:NSClassFromString(@"ITCoreImageWindowEffect")];
}
}
[view release];
}
return [classes autorelease];
}
- (id)initWithWindow:(NSWindow *)window
{
if ( (self = [super init]) ) {
_window = [window retain];
_effectTime = DEFAULT_EFFECT_TIME;
_effectTimer = nil;
__shouldReleaseWhenIdle = NO;
__idle = YES;
if ( [window conformsToProtocol:@protocol(ITWindowPositioning)] ) {
_verticalPosition = (ITVerticalWindowPosition)[(ITTransientStatusWindow *)window verticalPosition];
_horizontalPosition = (ITHorizontalWindowPosition)[(ITTransientStatusWindow *)window horizontalPosition];
} else {
NSLog(@"ITWindowEffect - initWithWindow: - window does not conform to ITWindowPositioning.");
_verticalPosition = ITWindowPositionBottom;
_horizontalPosition = ITWindowPositionLeft;
}
}
return self;
}
- (NSWindow *)window
{
return _window;
}
- (void)setWindow:(NSWindow *)newWindow
{
[_window autorelease];
_window = [newWindow retain];
}
- (void)setWindowVisibility:(ITWindowVisibilityState)visibilityState
{
if ( [_window conformsToProtocol:@protocol(ITWindowMotility)] ) {
// Cast so the compiler won't gripe
[(ITTransientStatusWindow *)_window setVisibilityState:visibilityState];
} else {
NSLog(@"ITWindowEffect - setWindowVisibility: - window does not conform to ITWindowVisibility.");
}
}
- (float)effectTime
{
return _effectTime;
}
- (void)setEffectTime:(float)newTime
{
_effectTime = newTime;
}
+ (NSString *)effectName
{
NSLog(@"ITWindowEffect does not implement +effectName.");
return nil;
}
+ (NSDictionary *)supportedPositions
{
NSLog(@"ITWindowEffect does not implement +supportedPositions.");
// Below is an example dictionary. Modify it appropriately when subclassing.
return [NSDictionary dictionaryWithObjectsAndKeys:
[NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:NO], @"Left",
[NSNumber numberWithBool:NO], @"Center",
[NSNumber numberWithBool:NO], @"Right", nil] , @"Top" ,
[NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:NO], @"Left",
[NSNumber numberWithBool:NO], @"Center",
[NSNumber numberWithBool:NO], @"Right", nil] , @"Middle" ,
[NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:NO], @"Left",
[NSNumber numberWithBool:NO], @"Center",
[NSNumber numberWithBool:NO], @"Right", nil] , @"Bottom" , nil];
}
+ (unsigned int)listOrder
{
NSLog(@"ITWindowEffect does not implement +listOrder.");
return 0;
}
- (void)performAppear
{
NSLog(@"ITWindowEffect does not implement -performAppear.");
}
- (void)performVanish
{
NSLog(@"ITWindowEffect does not implement -performVanish.");
}
- (void)cancelAppear
{
NSLog(@"ITWindowEffect does not implement -cancelAppear.");
}
- (void)cancelVanish
{
NSLog(@"ITWindowEffect does not implement -cancelVanish.");
}
- (void)releaseWhenIdle;
{
if ( __idle ) {
[self release];
} else {
__shouldReleaseWhenIdle = YES;
}
}
- (void)dealloc
{
[_window release];
[super dealloc];
}
@end