Got basic, pre-actually-writing-anything Cocoa to build.
This commit is contained in:
parent
34bbabf02e
commit
8f1459d90c
6 changed files with 63 additions and 17 deletions
|
@ -27,7 +27,7 @@
|
|||
#include "SDL_pixels.h"
|
||||
#include "SDL_surface.h"
|
||||
#include "SDL_shape.h"
|
||||
#include "../src/video/SDL_shape_internals.h"
|
||||
#include "SDL_shape_internals.h"
|
||||
|
||||
SDL_Window* SDL_CreateShapedWindow(const char *title,unsigned int x,unsigned int y,unsigned int w,unsigned int h,Uint32 flags) {
|
||||
SDL_Window *result = SDL_CreateWindow(title,x,y,w,h,SDL_WINDOW_BORDERLESS | flags & !SDL_WINDOW_FULLSCREEN & !SDL_WINDOW_SHOWN);
|
||||
|
|
|
@ -20,14 +20,26 @@
|
|||
eligottlieb@gmail.com
|
||||
*/
|
||||
|
||||
#include "SDL_config.h"
|
||||
|
||||
#ifndef _SDL_cocoashape_h
|
||||
#define _SDL_cocoashape_h
|
||||
|
||||
#include "SDL_stdinc.h"
|
||||
#include "SDL_video.h"
|
||||
#include "SDL_shape.h"
|
||||
#include "SDL_shape_internals.h"
|
||||
#include "../SDL_sysvideo.h"
|
||||
|
||||
typedef struct {
|
||||
NSGraphicsContext* context;
|
||||
SDL_Bool saved;
|
||||
SDL_bool saved;
|
||||
|
||||
NSRect* rects;
|
||||
Uint32 count;
|
||||
SDL_ShapeTree* shape;
|
||||
} SDL_ShapeData;
|
||||
|
||||
extern SDL_WindowShaper* Cocoa_CreateShaper(SDL_Window* window);
|
||||
extern int Cocoa_SetWindowShape(SDL_WindowShaper *shaper,SDL_Surface *shape,SDL_WindowShapeMode *shapeMode);
|
||||
extern int Cocoa_ResizeWindowShape(SDL_Window *window);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -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 @@ SDL_WindowShaper* Cocoa_CreateShaper(SDL_Window* window) {
|
|||
}
|
||||
|
||||
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_SetWindowShape(SDL_WindowShaper *shaper,SDL_Surface *shape,SDL_WindowS
|
|||
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;
|
||||
}
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include "SDL_config.h"
|
||||
|
||||
#include "SDL_cocoavideo.h"
|
||||
#include "SDL_cocoashape.h"
|
||||
#include "SDL_assert.h"
|
||||
|
||||
/* Initialization/Query functions */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue