Commit 807e0c5c authored by Eli Gottlieb's avatar Eli Gottlieb

Working on Cocoa implementation.

parent 01cddf42
...@@ -13,8 +13,8 @@ Eli Gottlieb's checklist for the GSOC shaped windows project. Dated July 9, 201 ...@@ -13,8 +13,8 @@ Eli Gottlieb's checklist for the GSOC shaped windows project. Dated July 9, 201
4. Implement the SDL shaped-windows API for Mac OS X using Cocoa. STATUS: IN PROGRESS 4. Implement the SDL shaped-windows API for Mac OS X using Cocoa. STATUS: IN PROGRESS
--> Locate (once more) the API documentation for shaped windows under Cocoa. STATUS: NEARLY FINISHED. --> Locate (once more) the API documentation for shaped windows under Cocoa. STATUS: NEARLY FINISHED.
--> Design and encode a version of SDL_ShapeData for Cocoa. STATUS: IN PROGRESS. --> Design and encode a version of SDL_ShapeData for Cocoa. STATUS: IN PROGRESS.
--> Write Cocoa_CreateShaper(). STATUS: IN PROGRESS. --> Write Cocoa_CreateShaper(). STATUS: MOSTLY DONE, AFAIK.
--> Write Cocoa_ResizeWindowShape(). STATUS: IN PROGRESS. --> Write Cocoa_ResizeWindowShape(). STATUS: DONE, AFAIK.
--> Write Cocoa_SetWindowShape(). STATUS: IN PROGRESS. --> Write Cocoa_SetWindowShape(). STATUS: IN PROGRESS.
--> If necessary, implement functionality adjunct to SDL_CalculateShapeBitmap() for Cocoa usage. --> If necessary, implement functionality adjunct to SDL_CalculateShapeBitmap() for Cocoa usage.
5. Use testeyes to debug all implementations. STATUS: SPRINT + 2. 5. Use testeyes to debug all implementations. STATUS: SPRINT + 2.
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
eligottlieb@gmail.com eligottlieb@gmail.com
*/ */
#include "SDL_cocoavideo.h"
#include "SDL_shape.h" #include "SDL_shape.h"
#include "SDL_cocoashape.h" #include "SDL_cocoashape.h"
...@@ -27,16 +28,44 @@ SDL_WindowShaper* Cocoa_CreateShaper(SDL_Window* window) { ...@@ -27,16 +28,44 @@ SDL_WindowShaper* Cocoa_CreateShaper(SDL_Window* window) {
SDL_WindowData* data = (SDL_WindowData*)window->driverdata; SDL_WindowData* data = (SDL_WindowData*)window->driverdata;
[data->nswindow setAlpha:1.0]; [data->nswindow setAlpha:1.0];
[data->nswindow setOpaque:YES]; [data->nswindow setOpaque:YES];
[data->nswindow setStyleMask:NSBorderlessWindowMask];
SDL_Shaper* result = result = malloc(sizeof(SDL_WindowShaper)); SDL_Shaper* result = result = malloc(sizeof(SDL_WindowShaper));
result->window = window; result->window = window;
result->mode.mode = ShapeModeDefault; result->mode.mode = ShapeModeDefault;
result->mode.parameters.binarizationCutoff = 1; result->mode.parameters.binarizationCutoff = 1;
result->usershownflag = 0; result->usershownflag = 0;
window->shaper = result; 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); int resized_properly = Cocoa_ResizeWindowShape(window);
assert(resized_properly == 0); assert(resized_properly == 0);
return result; return result;
} }
extern int Cocoa_SetWindowShape(SDL_WindowShaper *shaper,SDL_Surface *shape,SDL_WindowShapeMode *shapeMode); int Cocoa_SetWindowShape(SDL_WindowShaper *shaper,SDL_Surface *shape,SDL_WindowShapeMode *shapeMode) {
extern int Cocoa_ResizeWindowShape(SDL_Window *window); 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;
}
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
#include "../../events/SDL_windowevents_c.h" #include "../../events/SDL_windowevents_c.h"
#include "SDL_cocoavideo.h" #include "SDL_cocoavideo.h"
#include "SDL_cocoashape.h"
static __inline__ void ConvertNSRect(NSRect *r) static __inline__ void ConvertNSRect(NSRect *r)
{ {
...@@ -111,6 +112,7 @@ static __inline__ void ConvertNSRect(NSRect *r) ...@@ -111,6 +112,7 @@ static __inline__ void ConvertNSRect(NSRect *r)
NSRect rect = [_data->nswindow contentRectForFrameRect:[_data->nswindow frame]]; NSRect rect = [_data->nswindow contentRectForFrameRect:[_data->nswindow frame]];
w = (int)rect.size.width; w = (int)rect.size.width;
h = (int)rect.size.height; h = (int)rect.size.height;
Cocoa_ResizeWindowShape(_data->window);
SDL_SendWindowEvent(_data->window, SDL_WINDOWEVENT_RESIZED, w, h); SDL_SendWindowEvent(_data->window, SDL_WINDOWEVENT_RESIZED, w, h);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment