Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Create all shaped windows at -1000,-1000 and save the real coordinates.
- Loading branch information
Showing
with
6 additions
and
7 deletions.
-
+1
−1
src/video/SDL_shape.c
-
+5
−6
src/video/cocoa/SDL_cocoashape.m
|
@@ -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) { |
|
|
|
@@ -51,13 +51,14 @@ |
|
|
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 @@ |
|
|
|
|
|
//[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 |
|
|