src/video/cocoa/SDL_cocoashape.m
changeset 4811 d79939f20c45
parent 4810 7a602fd2121f
child 4827 5660aac926e9
child 4838 1f9915666afd
--- a/src/video/cocoa/SDL_cocoashape.m	Mon Jul 26 20:41:45 2010 -0400
+++ b/src/video/cocoa/SDL_cocoashape.m	Mon Jul 26 21:48:53 2010 -0400
@@ -20,6 +20,7 @@
     eligottlieb@gmail.com
 */
 
+#include "SDL_cocoavideo.h"
 #include "SDL_shape.h"
 #include "SDL_cocoashape.h"
 
@@ -27,16 +28,44 @@
 	SDL_WindowData* data = (SDL_WindowData*)window->driverdata;
 	[data->nswindow setAlpha:1.0];
 	[data->nswindow setOpaque:YES];
+	[data->nswindow setStyleMask:NSBorderlessWindowMask];
 	SDL_Shaper* result = result = malloc(sizeof(SDL_WindowShaper));
 	result->window = window;
 	result->mode.mode = ShapeModeDefault;
 	result->mode.parameters.binarizationCutoff = 1;
 	result->usershownflag = 0;
 	window->shaper = result;
+	
+	SDL_ShapeData* data = malloc(sizeof(SDL_ShapeData));
+	result->driverdata = data;
+	data->context = [data->nswindow graphicsContext];
+	data->saved = SDL_False;
+	data->rects = NULL;
+	data->count = 0;
+	
 	int resized_properly = Cocoa_ResizeWindowShape(window);
 	assert(resized_properly == 0);
 	return result;
 }
 
-extern int Cocoa_SetWindowShape(SDL_WindowShaper *shaper,SDL_Surface *shape,SDL_WindowShapeMode *shapeMode);
-extern int Cocoa_ResizeWindowShape(SDL_Window *window);
+int Cocoa_SetWindowShape(SDL_WindowShaper *shaper,SDL_Surface *shape,SDL_WindowShapeMode *shapeMode) {
+	SDL_WindowData* data = (SDL_WindowData*)shaper->window->driverdata;
+	if(data->saved == SDL_True) {
+		[data->context restoreGraphicsState];
+		data->saved = SDL_False;
+	}
+		
+	[data->context saveGraphicsState];
+	data->saved = SDL_True;
+	
+	[[NSColor clearColor] set];
+	NSRectFill([[data->nswindow contentView] frame]);
+	/* TODO: It looks like Cocoa can set a clipping path based on a list of rectangles.  That's what we get from the
+           Windoze shape-calculation code: a list of rectangles.  This will work... I think. */
+}
+
+int Cocoa_ResizeWindowShape(SDL_Window *window) {
+	SDL_ShapeData* data = window->shaper->driverdata;
+	assert(data != NULL);
+	return 0;
+}