src/video/cocoa/SDL_cocoashape.m
changeset 4827 5660aac926e9
parent 4811 d79939f20c45
child 4829 7160e833c4ac
--- a/src/video/cocoa/SDL_cocoashape.m	Mon Aug 02 23:58:22 2010 -0400
+++ b/src/video/cocoa/SDL_cocoashape.m	Tue Aug 03 00:47:33 2010 -0400
@@ -20,28 +20,29 @@
     eligottlieb@gmail.com
 */
 
+#include "SDL_stdinc.h"
 #include "SDL_cocoavideo.h"
 #include "SDL_shape.h"
 #include "SDL_cocoashape.h"
+#include "SDL_sysvideo.h"
 
 SDL_WindowShaper* Cocoa_CreateShaper(SDL_Window* window) {
 	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));
+	SDL_WindowShaper* result = SDL_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;
+	SDL_ShapeData* shape_data = SDL_malloc(sizeof(SDL_ShapeData));
+	result->driverdata = shape_data;
+	shape_data->context = [data->nswindow graphicsContext];
+	shape_data->saved = SDL_FALSE;
+	shape_data->shape = NULL;
 	
 	int resized_properly = Cocoa_ResizeWindowShape(window);
 	assert(resized_properly == 0);
@@ -49,17 +50,17 @@
 }
 
 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) {
+	SDL_ShapeData* data = (SDL_ShapeData*)shaper->driverdata;
+	if(data->saved == SDL_TRUE) {
 		[data->context restoreGraphicsState];
-		data->saved = SDL_False;
+		data->saved = SDL_FALSE;
 	}
 		
 	[data->context saveGraphicsState];
-	data->saved = SDL_True;
+	data->saved = SDL_TRUE;
 	
 	[[NSColor clearColor] set];
-	NSRectFill([[data->nswindow contentView] frame]);
+	NSRectFill([[((SDL_WindowData*)shaper->window->driverdata)->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. */
 }
@@ -67,5 +68,9 @@
 int Cocoa_ResizeWindowShape(SDL_Window *window) {
 	SDL_ShapeData* data = window->shaper->driverdata;
 	assert(data != NULL);
+	
+	if(data->shape != NULL)
+		SDL_FreeShapeTree(&data->shape);
+	
 	return 0;
 }