|
@@ -36,6 +36,8 @@ X11_CreateShapedWindow(const char *title,unsigned int x,unsigned int y,unsigned
|
|
|
SDL_WindowShaper*
|
|
|
X11_CreateShaper(SDL_Window* window) {
|
|
|
SDL_WindowShaper* result = NULL;
|
|
|
+ SDL_ShapeData* data = NULL;
|
|
|
+ int resized_properly;
|
|
|
|
|
|
#if SDL_VIDEO_DRIVER_X11_XSHAPE
|
|
|
if (SDL_X11_HAVE_XSHAPE) { /* Make sure X server supports it. */
|
|
@@ -44,12 +46,12 @@ X11_CreateShaper(SDL_Window* window) {
|
|
|
result->mode.mode = ShapeModeDefault;
|
|
|
result->mode.parameters.binarizationCutoff = 1;
|
|
|
result->userx = result->usery = 0;
|
|
|
- SDL_ShapeData* data = SDL_malloc(sizeof(SDL_ShapeData));
|
|
|
+ data = SDL_malloc(sizeof(SDL_ShapeData));
|
|
|
result->driverdata = data;
|
|
|
data->bitmapsize = 0;
|
|
|
data->bitmap = NULL;
|
|
|
window->shaper = result;
|
|
|
- int resized_properly = X11_ResizeWindowShape(window);
|
|
|
+ resized_properly = X11_ResizeWindowShape(window);
|
|
|
SDL_assert(resized_properly == 0);
|
|
|
}
|
|
|
#endif
|
|
@@ -60,9 +62,9 @@ X11_CreateShaper(SDL_Window* window) {
|
|
|
int
|
|
|
X11_ResizeWindowShape(SDL_Window* window) {
|
|
|
SDL_ShapeData* data = window->shaper->driverdata;
|
|
|
+ unsigned int bitmapsize = window->w / 8;
|
|
|
SDL_assert(data != NULL);
|
|
|
|
|
|
- unsigned int bitmapsize = window->w / 8;
|
|
|
if(window->w % 8 > 0)
|
|
|
bitmapsize += 1;
|
|
|
bitmapsize *= window->h;
|
|
@@ -86,6 +88,10 @@ X11_ResizeWindowShape(SDL_Window* window) {
|
|
|
|
|
|
int
|
|
|
X11_SetWindowShape(SDL_WindowShaper *shaper,SDL_Surface *shape,SDL_WindowShapeMode *shape_mode) {
|
|
|
+ SDL_ShapeData *data = NULL;
|
|
|
+ SDL_WindowData *windowdata = NULL;
|
|
|
+ Pixmap shapemask = NULL;
|
|
|
+
|
|
|
if(shaper == NULL || shape == NULL || shaper->driverdata == NULL)
|
|
|
return -1;
|
|
|
|
|
@@ -94,13 +100,13 @@ X11_SetWindowShape(SDL_WindowShaper *shaper,SDL_Surface *shape,SDL_WindowShapeMo
|
|
|
return -2;
|
|
|
if(shape->w != shaper->window->w || shape->h != shaper->window->h)
|
|
|
return -3;
|
|
|
- SDL_ShapeData *data = shaper->driverdata;
|
|
|
+ data = shaper->driverdata;
|
|
|
|
|
|
/* Assume that shaper->alphacutoff already has a value, because SDL_SetWindowShape() should have given it one. */
|
|
|
SDL_CalculateShapeBitmap(shaper->mode,shape,data->bitmap,8);
|
|
|
|
|
|
- SDL_WindowData *windowdata = (SDL_WindowData*)(shaper->window->driverdata);
|
|
|
- Pixmap shapemask = XCreateBitmapFromData(windowdata->videodata->display,windowdata->xwindow,data->bitmap,shaper->window->w,shaper->window->h);
|
|
|
+ windowdata = (SDL_WindowData*)(shaper->window->driverdata);
|
|
|
+ shapemask = XCreateBitmapFromData(windowdata->videodata->display,windowdata->xwindow,data->bitmap,shaper->window->w,shaper->window->h);
|
|
|
|
|
|
XShapeCombineMask(windowdata->videodata->display,windowdata->xwindow, ShapeBounding, 0, 0,shapemask, ShapeSet);
|
|
|
XSync(windowdata->videodata->display,False);
|