21 #include "../../SDL_internal.h" 23 #if SDL_VIDEO_DRIVER_DIRECTFB 30 #if SDL_DIRECTFB_OPENGL 36 #include "../SDL_pixels_c.h" 43 DFB_WindowData *windata =
NULL;
44 DFBWindowOptions wopts;
45 DFBWindowDescription desc;
50 SDL_memset(&desc, 0,
sizeof(DFBWindowDescription));
51 windata = (DFB_WindowData *) window->
driverdata;
53 windata->is_managed = devdata->has_own_wm;
58 DLSCL_ADMINISTRATIVE));
61 if (window->
x == -1000 && window->
y == -1000)
73 DWDESC_WIDTH | DWDESC_HEIGHT | DWDESC_POSX | DWDESC_POSY | DWDESC_SURFACE_CAPS;
76 desc.flags |= DWDESC_CAPS;
77 desc.caps |= DWCAPS_ALPHACHANNEL;
81 desc.flags |= DWDESC_PIXELFORMAT;
85 desc.caps |= DWCAPS_NODECORATION;
89 desc.width = windata->size.w;
90 desc.height = windata->size.h;
91 desc.pixelformat = dispdata->pixelformat;
92 desc.surface_caps = DSCAPS_PREMULTIPLIED;
93 #if DIRECTFB_MAJOR_VERSION == 1 && DIRECTFB_MINOR_VERSION >= 6 95 desc.surface_caps |= DSCAPS_GL;
104 SDL_DFB_CHECK(windata->dfbwin->GetOptions(windata->dfbwin, &wopts));
109 wopts &= ~DWOP_KEEP_SIZE;
112 wopts |= DWOP_KEEP_SIZE;
116 wopts |= DWOP_KEEP_POSITION | DWOP_KEEP_STACKING | DWOP_KEEP_SIZE;
117 SDL_DFB_CHECK(windata->dfbwin->SetStackingClass(windata->dfbwin, DWSC_UPPER));
121 wopts |= DWOP_SHAPED | DWOP_ALPHACHANNEL;
122 wopts &= ~DWOP_OPAQUE_REGION;
125 SDL_DFB_CHECK(windata->dfbwin->SetOptions(windata->dfbwin, wopts));
129 (
_this, window, &window->
w, &window->
h));
133 &windata->window_surface));
137 GetSubSurface(windata->window_surface, &windata->client,
140 SDL_DFB_CHECK(windata->dfbwin->SetOpacity(windata->dfbwin, 0xFF));
148 EnableEvents(windata->dfbwin, DWET_ALL));
152 windata->font =
NULL;
162 windata->next = devdata->firstwin;
163 windata->opacity = 0xFF;
164 devdata->firstwin =
window;
187 if (windata->is_managed) {
188 windata->wm_needs_redraw = 1;
204 DFBSurfaceDescription dsc;
216 DSDESC_WIDTH | DSDESC_HEIGHT | DSDESC_PIXELFORMAT | DSDESC_CAPS;
217 dsc.caps = DSCAPS_VIDEOONLY;
218 dsc.width = surface->
w;
219 dsc.height = surface->
h;
220 dsc.pixelformat = DSPF_ARGB;
226 (
void *) &dest, &pitch));
229 for (i = 0; i < surface->
h; i++)
230 memcpy((
char *) dest + i * pitch,
231 (
char *) p + i * surface->
pitch, 4 * surface->
w);
255 SDL_DFB_CHECK(windata->dfbwin->MoveTo(windata->dfbwin, x, y));
275 if (cw != window->
w || ch != window->
h) {
284 (
_this, window, &window->
w, &window->
h));
293 SDL_DFB_CHECK(windata->dfbwin->EnableEvents(windata->dfbwin, DWET_ALL));
302 SDL_DFB_CHECK(windata->dfbwin->SetOpacity(windata->dfbwin, windata->opacity));
311 SDL_DFB_CHECK(windata->dfbwin->GetOpacity(windata->dfbwin, &windata->opacity));
312 SDL_DFB_CHECK(windata->dfbwin->SetOpacity(windata->dfbwin, 0));
321 SDL_DFB_CHECK(windata->dfbwin->RequestFocus(windata->dfbwin));
329 DFBWindowOptions wopts;
332 &windata->restore.x, &windata->restore.y));
333 SDL_DFB_CHECK(windata->dfbwin->GetSize(windata->dfbwin, &windata->restore.w,
334 &windata->restore.h));
338 SDL_DFB_CHECK(windata->dfbwin->MoveTo(windata->dfbwin, 0, 0));
343 SDL_DFB_CHECK(windata->dfbwin->GetOptions(windata->dfbwin, &wopts));
344 wopts |= DWOP_KEEP_SIZE | DWOP_KEEP_POSITION;
345 SDL_DFB_CHECK(windata->dfbwin->SetOptions(windata->dfbwin, wopts));
360 DFBWindowOptions wopts;
363 SDL_DFB_CHECK(windata->dfbwin->GetOptions(windata->dfbwin, &wopts));
364 wopts &= ~(DWOP_KEEP_SIZE | DWOP_KEEP_POSITION);
365 SDL_DFB_CHECK(windata->dfbwin->SetOptions(windata->dfbwin, wopts));
369 windata->restore.w, windata->restore.h);
370 SDL_DFB_CHECK(windata->dfbwin->Resize(windata->dfbwin, windata->restore.w,
371 windata->restore.h));
372 SDL_DFB_CHECK(windata->dfbwin->MoveTo(windata->dfbwin, windata->restore.x,
373 windata->restore.y));
376 wopts |= DWOP_KEEP_SIZE;
379 wopts |= DWOP_KEEP_POSITION | DWOP_KEEP_SIZE;
380 SDL_DFB_CHECK(windata->dfbwin->SetOptions(windata->dfbwin, wopts));
390 DFB_WindowData *gwindata = ((devdata->grabbed_window) ? (DFB_WindowData *) ((devdata->grabbed_window)->driverdata) :
NULL);
393 if (gwindata !=
NULL)
395 SDL_DFB_CHECK(gwindata->dfbwin->UngrabPointer(gwindata->dfbwin));
396 SDL_DFB_CHECK(gwindata->dfbwin->UngrabKeyboard(gwindata->dfbwin));
398 SDL_DFB_CHECK(windata->dfbwin->GrabPointer(windata->dfbwin));
399 SDL_DFB_CHECK(windata->dfbwin->GrabKeyboard(windata->dfbwin));
400 devdata->grabbed_window =
window;
402 SDL_DFB_CHECK(windata->dfbwin->UngrabPointer(windata->dfbwin));
403 SDL_DFB_CHECK(windata->dfbwin->UngrabKeyboard(windata->dfbwin));
404 devdata->grabbed_window =
NULL;
416 SDL_DFB_CHECK(windata->dfbwin->UngrabPointer(windata->dfbwin));
417 SDL_DFB_CHECK(windata->dfbwin->UngrabKeyboard(windata->dfbwin));
419 #if SDL_DIRECTFB_OPENGL 420 DirectFB_GL_DestroyWindowContexts(
_this, window);
433 SDL_DFB_CHECK(windata->surface->ReleaseSource(windata->surface));
434 SDL_DFB_CHECK(windata->window_surface->ReleaseSource(windata->window_surface));
445 p = devdata->firstwin->driverdata;
447 while (p && p->next != window)
448 p = (p->next ? p->next->driverdata :
NULL);
450 p->next = windata->next;
452 devdata->firstwin = windata->next;
478 if (version < 2000006) {
487 info->
info.dfb.dfb = devdata->dfb;
502 int adjust = windata->wm_needs_redraw;
508 window_surface->GetSize(windata->window_surface, &cw,
510 if (cw != windata->size.w || ch != windata->size.h) {
515 #if SDL_DIRECTFB_OPENGL 519 #if (DFB_VERSION_ATLEAST(1,2,1)) 528 DFBWindowOptions opts;
534 if (opts & DWOP_SCALE)
539 GetSubSurface(windata->window_surface,
540 &windata->client, &windata->surface));
544 #if SDL_DIRECTFB_OPENGL 558 windata->opacity =
alpha;
void DirectFB_ShowWindow(_THIS, SDL_Window *window)
#define SDL_MINOR_VERSION
int DirectFB_CreateWindow(_THIS, SDL_Window *window)
SDL_bool DirectFB_GetWindowWMInfo(_THIS, SDL_Window *window, struct SDL_SysWMinfo *info)
#define SDL_IsShapedWindow
GLint GLint GLint GLint GLint x
struct wl_surface * surface
#define SDL_MAJOR_VERSION
#define SDL_ConvertSurface
A collection of pixels used in software blitting.
void DirectFB_RaiseWindow(_THIS, SDL_Window *window)
void DirectFB_SetWindowGrab(_THIS, SDL_Window *window, SDL_bool grabbed)
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
void DirectFB_WM_AdjustWindowLayout(SDL_Window *window, int flags, int w, int h)
IDirectFBSurface * surface
int DirectFB_CreateWindowFrom(_THIS, SDL_Window *window, const void *data)
GLfloat GLfloat GLfloat alpha
#define SDL_DFB_RELEASE(x)
static SDL_VideoDevice * _this
void DirectFB_AdjustWindowSurface(SDL_Window *window)
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
#define SDL_DFB_DEVICEDATA(dev)
DFBResult DirectFB_WM_GetClientSize(_THIS, SDL_Window *window, int *cw, int *ch)
SDL_WindowShaper * shaper
SDL_DisplayMode current_mode
GLint GLint GLint GLint GLint GLint y
int SDL_InitFormat(SDL_PixelFormat *format, Uint32 pixel_format)
return Display return Display Bool Bool int int int return Display XEvent Bool(*) XPointer return Display return Display Drawable _Xconst char unsigned int unsigned int return Display Pixmap Pixmap XColor XColor unsigned int unsigned int return Display _Xconst char char int char return Display Visual unsigned int int int char unsigned int unsigned int in i)
#define SDL_DFB_ALLOC_CLEAR(r, s)
#define SDL_DFB_CHECKERR(x...)
int DirectFB_ResizeWindowShape(SDL_Window *window)
#define SDL_DFB_WINDOWDATA(win)
#define SDL_DFB_DISPLAYDATA(win)
SDL_VideoDisplay * SDL_GetDisplayForWindow(SDL_Window *window)
EGLSurface EGLNativeWindowType * window
void DirectFB_WM_RedrawLayout(_THIS, SDL_Window *window)
#define SDL_DFB_CHECK(x...)
The type used to identify a window.
void DirectFB_SetWindowTitle(_THIS, SDL_Window *window)
void DirectFB_MaximizeWindow(_THIS, SDL_Window *window)
SDL_VideoDevice * SDL_GetVideoDevice(void)
union SDL_SysWMinfo::@18 info
void DirectFB_SetWindowSize(_THIS, SDL_Window *window)
void DirectFB_MinimizeWindow(_THIS, SDL_Window *window)
void DirectFB_DestroyWindow(_THIS, SDL_Window *window)
int DirectFB_SetWindowOpacity(_THIS, SDL_Window *window, float opacity)
void DirectFB_SetWindowPosition(_THIS, SDL_Window *window)
#define SDL_Unsupported()
void DirectFB_HideWindow(_THIS, SDL_Window *window)
void DirectFB_RestoreWindow(_THIS, SDL_Window *window)
void DirectFB_SetWindowIcon(_THIS, SDL_Window *window, SDL_Surface *icon)