Working on Cocoa implementation.
This commit is contained in:
parent
01cddf42c7
commit
807e0c5cca
3 changed files with 35 additions and 4 deletions
4
TODO
4
TODO
|
@ -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 @@
|
||||||
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) {
|
||||||
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 @@
|
||||||
#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)
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue