Removing the use of private CoreGraphics APIs to draw shadows, and replacing with...
[ITKit.git] / ITWindowEffect.m
old mode 100755 (executable)
new mode 100644 (file)
index 2b1d4fe..a99f54a
 #import "ITWindowEffect.h"
 #import "ITTransientStatusWindow.h"
-
+#import <OpenGL/gl.h>
+#import <OpenGL/glu.h>
+#import <OpenGL/glext.h>
 
 @implementation ITWindowEffect
 
-+ (NSArray *)effectsInfo
++ (NSArray *)effectClasses
 {
-    int ce;
-    NSMutableArray *finalArray = [[[NSMutableArray alloc] initWithCapacity:5] autorelease];
-
-    NSArray *effectKeys = [NSArray arrayWithObjects:
-        @"Name",
-        @"Class",
-        @"Positions",
-        nil];
-    
-    NSArray *effectNames = [NSArray arrayWithObjects:
-        @"Cut",
-        @"Dissolve",
-        @"Slide Horizontally",
-        @"Slide Vertically",
-        @"Pivot",
-        nil];
-        
-    NSArray *classNames = [NSArray arrayWithObjects:
-        @"ITCutWindowEffect",
-        @"ITDissolveWindowEffect",
-        @"ITSlideHorizontallyWindowEffect",
-        @"ITSlideVerticallyWindowEffect",
-        @"ITPivotWindowEffect",
-        nil];
-        
-    NSArray *positionKeys = [NSArray arrayWithObjects:
-        @"TopLeft",
-        @"TopCenter",
-        @"TopRight",
-        @"MiddleLeft",
-        @"MiddleCenter",
-        @"MiddleRight",
-        @"BottomLeft",
-        @"BottomCenter",
-        @"BottomRight",
-        nil];
-        
-    NSArray *cutPositionValues = [NSArray arrayWithObjects:
-        [NSNumber numberWithBool:YES],
-        [NSNumber numberWithBool:YES],
-        [NSNumber numberWithBool:YES],
-        [NSNumber numberWithBool:YES],
-        [NSNumber numberWithBool:YES],
-        [NSNumber numberWithBool:YES],
-        [NSNumber numberWithBool:YES],
-        [NSNumber numberWithBool:YES],
-        [NSNumber numberWithBool:YES],
-        nil];
-    
-    NSArray *dissolvePositionValues = [NSArray arrayWithObjects:
-        [NSNumber numberWithBool:YES],
-        [NSNumber numberWithBool:YES],
-        [NSNumber numberWithBool:YES],
-        [NSNumber numberWithBool:YES],
-        [NSNumber numberWithBool:YES],
-        [NSNumber numberWithBool:YES],
-        [NSNumber numberWithBool:YES],
-        [NSNumber numberWithBool:YES],
-        [NSNumber numberWithBool:YES],
-        nil];
-    
-    NSArray *slideVerticallyPositionValues = [NSArray arrayWithObjects:
-        [NSNumber numberWithBool:YES],
-        [NSNumber numberWithBool:YES],
-        [NSNumber numberWithBool:YES],
-        [NSNumber numberWithBool:NO],
-        [NSNumber numberWithBool:NO],
-        [NSNumber numberWithBool:NO],
-        [NSNumber numberWithBool:YES],
-        [NSNumber numberWithBool:YES],
-        [NSNumber numberWithBool:YES],
-        nil];
-    
-    NSArray *slideHorizontallyPositionValues = [NSArray arrayWithObjects:
-        [NSNumber numberWithBool:YES],
-        [NSNumber numberWithBool:NO],
-        [NSNumber numberWithBool:YES],
-        [NSNumber numberWithBool:YES],
-        [NSNumber numberWithBool:NO],
-        [NSNumber numberWithBool:YES],
-        [NSNumber numberWithBool:YES],
-        [NSNumber numberWithBool:NO],
-        [NSNumber numberWithBool:YES],
-        nil];
-    
-    NSArray *pivotPositionValues = [NSArray arrayWithObjects:
-        [NSNumber numberWithBool:YES],
-        [NSNumber numberWithBool:NO],
-        [NSNumber numberWithBool:YES],
-        [NSNumber numberWithBool:NO],
-        [NSNumber numberWithBool:NO],
-        [NSNumber numberWithBool:NO],
-        [NSNumber numberWithBool:YES],
-        [NSNumber numberWithBool:NO],
-        [NSNumber numberWithBool:YES],
-        nil];
-    
-    NSArray *positionDicts = [NSArray arrayWithObjects:
-        [NSDictionary dictionaryWithObjects:cutPositionValues
-                                    forKeys:positionKeys],
-        [NSDictionary dictionaryWithObjects:dissolvePositionValues
-                                    forKeys:positionKeys],
-        [NSDictionary dictionaryWithObjects:slideVerticallyPositionValues
-                                    forKeys:positionKeys],
-        [NSDictionary dictionaryWithObjects:slideHorizontallyPositionValues
-                                    forKeys:positionKeys],
-        [NSDictionary dictionaryWithObjects:pivotPositionValues
-                                    forKeys:positionKeys],
-        nil];
-        
-    for ( ce = 0 ; ce < [effectNames count] ; ce++ ) {
-        
-        NSArray *entryValues = [NSArray arrayWithObjects:
-            [effectNames   objectAtIndex:ce],
-            [classNames    objectAtIndex:ce],
-            [positionDicts objectAtIndex:ce],
-            nil];
-        
-        NSDictionary *entryDict = [NSDictionary dictionaryWithObjects:entryValues
-                                                              forKeys:effectKeys];
-        [finalArray addObject:entryDict];
-    }
-    
-    return finalArray;
+    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;
         __idle                  = YES;
 
         if ( [window conformsToProtocol:@protocol(ITWindowPositioning)] ) {
-                                                           // Casts so the compiler won't gripe
             _verticalPosition   = (ITVerticalWindowPosition)[(ITTransientStatusWindow *)window verticalPosition];
             _horizontalPosition = (ITHorizontalWindowPosition)[(ITTransientStatusWindow *)window horizontalPosition];
         } else {
     _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.");
+    NSLog(@"ITWindowEffect does not implement -performAppear.");
 }
 
 - (void)performVanish
 {
-    NSLog(@"ITWindowEffect does not implement performVanish.");
+    NSLog(@"ITWindowEffect does not implement -performVanish.");
 }
 
 - (void)cancelAppear
 {
-    NSLog(@"ITWindowEffect does not implement cancelAppear.");
+    NSLog(@"ITWindowEffect does not implement -cancelAppear.");
 }
 
 - (void)cancelVanish
 {
-    NSLog(@"ITWindowEffect does not implement cancelVanish.");
+    NSLog(@"ITWindowEffect does not implement -cancelVanish.");
 }
 
 - (void)releaseWhenIdle;