Mercurial > sdl-ios-xcode
changeset 4852:c19c729eb201
Added hiding-as-positioning trick and finally fixed flags.
author | egottlieb |
---|---|
date | Sun, 15 Aug 2010 21:46:04 -0400 |
parents | 5624fb0190b5 |
children | f7cde99bf66a |
files | src/video/SDL_shape.c src/video/win32/SDL_win32shape.c |
diffstat | 2 files changed, 12 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/src/video/SDL_shape.c Sun Aug 15 18:52:57 2010 -0400 +++ b/src/video/SDL_shape.c Sun Aug 15 21:46:04 2010 -0400 @@ -32,7 +32,7 @@ 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,flags | SDL_WINDOW_BORDERLESS & !SDL_WINDOW_FULLSCREEN & !SDL_WINDOW_RESIZABLE); + SDL_Window *result = SDL_CreateWindow(title,x,y,w,h,flags | SDL_WINDOW_BORDERLESS & ~SDL_WINDOW_FULLSCREEN & ~SDL_WINDOW_RESIZABLE); if(result != NULL) { result->shaper = result->display->device->shape_driver.CreateShaper(result); if(result->shaper != NULL) { @@ -126,7 +126,7 @@ SDL_Color key; SDL_ShapeTree* result = (SDL_ShapeTree*)SDL_malloc(sizeof(SDL_ShapeTree)); SDL_Rect next = {0,0,0,0}; - for(y=dimensions.y;y<dimensions.y + dimensions.h;y++) + for(y=dimensions.y;y<dimensions.y + dimensions.h;y++) { for(x=dimensions.x;x<dimensions.x + dimensions.w;x++) { pixel_value = 0; pixel = (Uint8 *)(mask->pixels) + (y*mask->pitch) + (x*mask->format->BytesPerPixel); @@ -183,6 +183,7 @@ return result; } } + } //If we never recursed, all the pixels in this quadrant have the same "value". result->kind = (last_opaque == SDL_TRUE ? OpaqueShape : TransparentShape); result->data.shape = dimensions; @@ -240,7 +241,7 @@ window->shaper->mode = *shape_mode; result = window->display->device->shape_driver.SetWindowShape(window->shaper,shape,shape_mode); window->shaper->hasshape = SDL_TRUE; - if(window->shaper->userx == 0 && window->shaper->usery == 0) { + if(window->shaper->userx != 0 && window->shaper->usery != 0) { SDL_SetWindowPosition(window,window->shaper->userx,window->shaper->usery); window->shaper->userx = 0; window->shaper->usery = 0;
--- a/src/video/win32/SDL_win32shape.c Sun Aug 15 18:52:57 2010 -0400 +++ b/src/video/win32/SDL_win32shape.c Sun Aug 15 21:46:04 2010 -0400 @@ -50,11 +50,10 @@ HRGN mask_region = *((HRGN*)closure),temp_region = NULL; if(node->kind == OpaqueShape) { //Win32 API regions exclude their outline, so we widen the region by one pixel in each direction to include the real outline. - sprintf_s(&debug_str[0],200,"x: %u y: %u, x+w: %u, y+h: %u\n", + /* sprintf_s(&debug_str[0],200,"x: %u y: %u, x+w: %u, y+h: %u\n", node->data.shape.x,node->data.shape.y, - node->data.shape.x + node->data.shape.w,node->data.shape.y + node->data.shape.h); - OutputDebugStringA(debug_str); - OutputDebugStringA("Converting SDL_ShapeTree opaque node to Windows rectangle.\n"); + node->data.shape.x + node->data.shape.w,node->data.shape.y + node->data.shape.h);*/ + //OutputDebugStringA(debug_str); temp_region = CreateRectRgn(node->data.shape.x - 1,node->data.shape.y - 1,node->data.shape.x + node->data.shape.w + 1,node->data.shape.y + node->data.shape.h + 1); if(mask_region != NULL) { CombineRgn(mask_region,mask_region,temp_region,RGN_OR); @@ -100,10 +99,11 @@ if(data->mask_tree != NULL) SDL_FreeShapeTree(&data->mask_tree); - - window->shaper->userx = window->x; - window->shaper->usery = window->y; - SDL_SetWindowPosition(window,-1000,-1000); + if(window->shaper->hasshape == SDL_TRUE) { + window->shaper->userx = window->x; + window->shaper->usery = window->y; + SDL_SetWindowPosition(window,-1000,-1000); + } return 0; }