From b72231e508104ce75c507d510daf5826a2d57207 Mon Sep 17 00:00:00 2001 From: egottlieb Date: Tue, 17 Aug 2010 01:11:11 -0400 Subject: [PATCH] Create all shaped windows at -1000,-1000 and save the real coordinates. --- src/video/SDL_shape.c | 2 +- src/video/cocoa/SDL_cocoashape.m | 11 +++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/video/SDL_shape.c b/src/video/SDL_shape.c index 32e7de99a..fe5f7fffa 100644 --- a/src/video/SDL_shape.c +++ b/src/video/SDL_shape.c @@ -33,7 +33,7 @@ SDL_Window* SDL_CreateShapedWindow(const char *title,unsigned int x,unsigned int y,unsigned int w,unsigned int h,Uint32 flags) { SDL_Window *result = NULL; - result = SDL_CreateWindow(title,x,y,w,h,(flags | SDL_WINDOW_BORDERLESS) & (~SDL_WINDOW_FULLSCREEN) & (~SDL_WINDOW_RESIZABLE) /*& (~SDL_WINDOW_SHOWN)*/); + result = SDL_CreateWindow(title,-1000,-1000,w,h,(flags | SDL_WINDOW_BORDERLESS) & (~SDL_WINDOW_FULLSCREEN) & (~SDL_WINDOW_RESIZABLE) /*& (~SDL_WINDOW_SHOWN)*/); if(result != NULL) { result->shaper = result->display->device->shape_driver.CreateShaper(result); if(result->shaper != NULL) { diff --git a/src/video/cocoa/SDL_cocoashape.m b/src/video/cocoa/SDL_cocoashape.m index 291820a82..a456c7070 100644 --- a/src/video/cocoa/SDL_cocoashape.m +++ b/src/video/cocoa/SDL_cocoashape.m @@ -51,13 +51,14 @@ Cocoa_CreateShaper(SDL_Window* window) { typedef struct { NSView* view; NSBezierPath* path; + SDL_Window* window; } SDL_CocoaClosure; void ConvertRects(SDL_ShapeTree* tree,void* closure) { SDL_CocoaClosure* data = (SDL_CocoaClosure*)closure; if(tree->kind == OpaqueShape) { - NSRect rect = NSMakeRect(tree->data.shape.x,tree->data.shape.y,tree->data.shape.w,tree->data.shape.h); + NSRect rect = NSMakeRect(tree->data.shape.x,data->window->h - tree->data.shape.y,tree->data.shape.w,tree->data.shape.h); [data->path appendBezierPathWithRect:[data->view convertRect:rect toView:nil]]; } } @@ -75,20 +76,18 @@ Cocoa_SetWindowShape(SDL_WindowShaper *shaper,SDL_Surface *shape,SDL_WindowShape //[data->context saveGraphicsState]; //data->saved = SDL_TRUE; + [NSGraphicsContext setCurrentContext:data->context]; [[NSColor clearColor] set]; NSRectFill([[windata->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. */ data->shape = SDL_CalculateShapeTree(*shape_mode,shape); pool = [[NSAutoreleasePool alloc] init]; closure.view = [windata->nswindow contentView]; closure.path = [[NSBezierPath bezierPath] autorelease]; + closure.window = shaper->window; SDL_TraverseShapeTree(data->shape,&ConvertRects,&closure); - [NSGraphicsContext setCurrentContext:data->context]; - [closure.path setClip]; - [pool drain]; + [closure.path addClip]; } int