37
37
X11_CreateShaper(SDL_Window* window) {
38
38
SDL_WindowShaper* result = NULL;
39
SDL_ShapeData* data = NULL;
40
42
#if SDL_VIDEO_DRIVER_X11_XSHAPE
41
43
if (SDL_X11_HAVE_XSHAPE) { /* Make sure X server supports it. */
44
46
result->mode.mode = ShapeModeDefault;
45
47
result->mode.parameters.binarizationCutoff = 1;
46
48
result->userx = result->usery = 0;
47
SDL_ShapeData* data = SDL_malloc(sizeof(SDL_ShapeData));
49
data = SDL_malloc(sizeof(SDL_ShapeData));
48
50
result->driverdata = data;
49
51
data->bitmapsize = 0;
50
52
data->bitmap = NULL;
51
53
window->shaper = result;
52
int resized_properly = X11_ResizeWindowShape(window);
54
resized_properly = X11_ResizeWindowShape(window);
53
55
SDL_assert(resized_properly == 0);
61
63
X11_ResizeWindowShape(SDL_Window* window) {
62
64
SDL_ShapeData* data = window->shaper->driverdata;
65
unsigned int bitmapsize = window->w / 8;
63
66
SDL_assert(data != NULL);
65
unsigned int bitmapsize = window->w / 8;
66
68
if(window->w % 8 > 0)
68
70
bitmapsize *= window->h;
88
90
X11_SetWindowShape(SDL_WindowShaper *shaper,SDL_Surface *shape,SDL_WindowShapeMode *shape_mode) {
91
SDL_ShapeData *data = NULL;
92
SDL_WindowData *windowdata = NULL;
89
95
if(shaper == NULL || shape == NULL || shaper->driverdata == NULL)
95
101
if(shape->w != shaper->window->w || shape->h != shaper->window->h)
97
SDL_ShapeData *data = shaper->driverdata;
103
data = shaper->driverdata;
99
105
/* Assume that shaper->alphacutoff already has a value, because SDL_SetWindowShape() should have given it one. */
100
106
SDL_CalculateShapeBitmap(shaper->mode,shape,data->bitmap,8);
102
SDL_WindowData *windowdata = (SDL_WindowData*)(shaper->window->driverdata);
103
Pixmap shapemask = XCreateBitmapFromData(windowdata->videodata->display,windowdata->xwindow,data->bitmap,shaper->window->w,shaper->window->h);
105
XShapeCombineMask(windowdata->videodata->display,windowdata->xwindow, ShapeBounding, 0, 0,shapemask, ShapeSet);
106
XSync(windowdata->videodata->display,False);
108
XFreePixmap(windowdata->videodata->display,shapemask);
108
windowdata = (SDL_WindowData*)(shaper->window->driverdata);
109
shapemask = X11_XCreateBitmapFromData(windowdata->videodata->display,windowdata->xwindow,data->bitmap,shaper->window->w,shaper->window->h);
111
X11_XShapeCombineMask(windowdata->videodata->display,windowdata->xwindow, ShapeBounding, 0, 0,shapemask, ShapeSet);
112
X11_XSync(windowdata->videodata->display,False);
114
X11_XFreePixmap(windowdata->videodata->display,shapemask);