|
@@ -31,22 +31,34 @@ 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. */
|
|
|
result = SDL_malloc(sizeof(SDL_WindowShaper));
|
|
|
+ if (!result) {
|
|
|
+ SDL_OutOfMemory();
|
|
|
+ return NULL;
|
|
|
+ }
|
|
|
result->window = window;
|
|
|
result->mode.mode = ShapeModeDefault;
|
|
|
result->mode.parameters.binarizationCutoff = 1;
|
|
|
result->userx = result->usery = 0;
|
|
|
data = SDL_malloc(sizeof(SDL_ShapeData));
|
|
|
+ if (!data) {
|
|
|
+ SDL_free(result);
|
|
|
+ SDL_OutOfMemory();
|
|
|
+ return NULL;
|
|
|
+ }
|
|
|
result->driverdata = data;
|
|
|
data->bitmapsize = 0;
|
|
|
data->bitmap = NULL;
|
|
|
window->shaper = result;
|
|
|
- resized_properly = X11_ResizeWindowShape(window);
|
|
|
- SDL_assert(resized_properly == 0);
|
|
|
+ if (X11_ResizeWindowShape(window) != 0) {
|
|
|
+ SDL_free(result);
|
|
|
+ SDL_free(data);
|
|
|
+ window->shaper = NULL;
|
|
|
+ return NULL;
|
|
|
+ }
|
|
|
}
|
|
|
#endif
|
|
|
|
|
@@ -64,11 +76,10 @@ X11_ResizeWindowShape(SDL_Window* window) {
|
|
|
bitmapsize *= window->h;
|
|
|
if(data->bitmapsize != bitmapsize || data->bitmap == NULL) {
|
|
|
data->bitmapsize = bitmapsize;
|
|
|
- if(data->bitmap != NULL)
|
|
|
- SDL_free(data->bitmap);
|
|
|
+ SDL_free(data->bitmap);
|
|
|
data->bitmap = SDL_malloc(data->bitmapsize);
|
|
|
if(data->bitmap == NULL) {
|
|
|
- return SDL_SetError("Could not allocate memory for shaped-window bitmap.");
|
|
|
+ return SDL_OutOfMemory();
|
|
|
}
|
|
|
}
|
|
|
SDL_memset(data->bitmap,0,data->bitmapsize);
|