From 25775cdb23464592ec49fb86735cd9d992079330 Mon Sep 17 00:00:00 2001 From: Eli Gottlieb Date: Tue, 10 Aug 2010 16:10:26 -0400 Subject: [PATCH] Fixed a bug in X11 shaping that refused to use color-key mode. --- include/SDL_shape.h | 3 +++ src/video/SDL_shape.c | 3 +-- src/video/x11/SDL_x11shape.c | 4 ++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/include/SDL_shape.h b/include/SDL_shape.h index 830052638..ae3b52aa8 100644 --- a/include/SDL_shape.h +++ b/include/SDL_shape.h @@ -89,6 +89,9 @@ typedef enum { /** \brief A color key is applied. */ ShapeModeColorKey } WindowShapeMode; + +#define SDL_SHAPEMODEALPHA(mode) (mode == ShapeModeDefault || mode == ShapeModeBinarizeAlpha || mode == ShapeModeReverseBinarizeAlpha) + /** \brief A union containing parameters for shaped windows. */ typedef union { /** \brief a cutoff alpha value for binarization of the window shape's alpha channel. */ diff --git a/src/video/SDL_shape.c b/src/video/SDL_shape.c index 9ef8ae7c7..1c9f62063 100644 --- a/src/video/SDL_shape.c +++ b/src/video/SDL_shape.c @@ -104,7 +104,7 @@ SDL_CalculateShapeBitmap(SDL_WindowShapeMode mode,SDL_Surface *shape,Uint8* bitm break; case(ShapeModeColorKey): key = mode.parameters.colorKey; - mask_value = ((key.r != r && key.g != g && key.b != b) ? 1 : 0); + mask_value = ((key.r != r || key.g != g || key.b != b) ? 1 : 0); break; } bitmap[bitmap_pixel / ppb] |= mask_value << (7 - ((ppb - 1) - (bitmap_pixel % ppb))); @@ -237,7 +237,6 @@ SDL_SetWindowShape(SDL_Window *window,SDL_Surface *shape,SDL_WindowShapeMode *sh if(shapeMode != NULL) window->shaper->mode = *shapeMode; - //TODO: Platform-specific implementations of SetWindowShape. X11 is finished. Win32 is finished. Debugging is in progress on both. result = window->display->device->shape_driver.SetWindowShape(window->shaper,shape,shapeMode); window->shaper->hasshape = SDL_TRUE; if((window->shaper->usershownflag & SDL_WINDOW_SHOWN) == SDL_WINDOW_SHOWN) { diff --git a/src/video/x11/SDL_x11shape.c b/src/video/x11/SDL_x11shape.c index 591ac4cb5..c57680699 100644 --- a/src/video/x11/SDL_x11shape.c +++ b/src/video/x11/SDL_x11shape.c @@ -81,12 +81,12 @@ X11_ResizeWindowShape(SDL_Window* window) { } int -X11_SetWindowShape(SDL_WindowShaper *shaper,SDL_Surface *shape,SDL_WindowShapeMode *shapeMode) { +X11_SetWindowShape(SDL_WindowShaper *shaper,SDL_Surface *shape,SDL_WindowShapeMode *shape_mode) { if(shaper == NULL || shape == NULL || shaper->driverdata == NULL) return -1; #if SDL_VIDEO_DRIVER_X11_XSHAPE - if(!SDL_ISPIXELFORMAT_ALPHA(SDL_MasksToPixelFormatEnum(shape->format->BitsPerPixel,shape->format->Rmask,shape->format->Gmask,shape->format->Bmask,shape->format->Amask))) + if(shape->format->Amask == 0 && SDL_SHAPEMODEALPHA(shape_mode->mode)) return -2; if(shape->w != shaper->window->w || shape->h != shaper->window->h) return -3;