static SDL_bool SDL_WindowHasAShape(SDL_Window *window) { if (window == NULL || !SDL_IsShapedWindow(window)) return SDL_FALSE; return window->shaper->hasshape; }
int SDL_GetShapedWindowMode(SDL_Window *window,SDL_WindowShapeMode *shape_mode) { if(window != NULL && SDL_IsShapedWindow(window)) { if(shape_mode == NULL) { if(SDL_WindowHasAShape(window)) //The window given has a shape. return 0; else //The window given is shapeable but lacks a shape. return SDL_WINDOW_LACKS_SHAPE; } else { *shape_mode = window->shaper->mode; return 0; } } else //The window given is not a valid shapeable window. return SDL_NONSHAPEABLE_WINDOW; }
int SDL_SetWindowShape(SDL_Window *window,SDL_Surface *shape,SDL_WindowShapeMode *shape_mode) { int result; if(window == NULL || !SDL_IsShapedWindow(window)) //The window given was not a shapeable window. return SDL_NONSHAPEABLE_WINDOW; if(shape == NULL) //Invalid shape argument. return SDL_INVALID_SHAPE_ARGUMENT; if(shape_mode != NULL) window->shaper->mode = *shape_mode; result = SDL_GetVideoDevice()->shape_driver.SetWindowShape(window->shaper,shape,shape_mode); window->shaper->hasshape = SDL_TRUE; 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; } return result; }
void DirectFB_SetWindowSize(_THIS, SDL_Window * window) { SDL_DFB_WINDOWDATA(window); if(SDL_IsShapedWindow(window)) DirectFB_ResizeWindowShape(window); if (!(window->flags & SDL_WINDOW_FULLSCREEN)) { int cw; int ch; /* Make sure all events are disabled for this operation ! */ SDL_DFB_CHECKERR(windata->dfbwin->DisableEvents(windata->dfbwin, DWET_ALL)); SDL_DFB_CHECKERR(DirectFB_WM_GetClientSize(_this, window, &cw, &ch)); if (cw != window->w || ch != window->h) { DirectFB_WM_AdjustWindowLayout(window, window->flags, window->w, window->h); SDL_DFB_CHECKERR(windata->dfbwin->Resize(windata->dfbwin, windata->size.w, windata->size.h)); } SDL_DFB_CHECKERR(DirectFB_WM_GetClientSize (_this, window, &window->w, &window->h)); DirectFB_AdjustWindowSurface(window); SDL_DFB_CHECKERR(windata->dfbwin->EnableEvents(windata->dfbwin, DWET_ALL)); } return; error: SDL_DFB_CHECK(windata->dfbwin->EnableEvents(windata->dfbwin, DWET_ALL)); return; }