23 #if SDL_VIDEO_DRIVER_DIRECTFB
28 #include "../../events/SDL_windowevents_c.h"
30 #define COLOR_EXPAND(col) col.r, col.g, col.b, col.a
39 "/usr/share/fonts/truetype/freefont/FreeSans.ttf",
55 DrawTriangle(IDirectFBSurface *
s,
int down,
int x,
int y,
int w)
75 s->FillTriangle(s, x1, y1, x2, y2, x3, y3);
84 if (windata->font !=
NULL) {
87 SDL_DFB_CHECK(windata->window_surface->SetFont(windata->window_surface, windata->font));
90 if (windata->theme.font !=
NULL)
92 DFBFontDescription fdesc;
95 fdesc.flags = DFDESC_HEIGHT;
96 fdesc.height = windata->theme.font_size;
98 dfb->CreateFont(devdata->dfb, windata->theme.font,
99 &fdesc, &windata->font));
100 SDL_DFB_CHECK(windata->window_surface->SetFont(windata->window_surface, windata->font));
105 DrawCraption(
_THIS, IDirectFBSurface * s,
int x,
int y,
char *text)
107 DFBSurfaceTextFlags
flags;
109 flags = DSTF_CENTER | DSTF_TOP;
111 s->DrawString(s, text, -1, x, y, flags);
118 IDirectFBSurface *s = windata->window_surface;
133 LoadFont(
_this, window);
138 s->DrawLine(s, 0, i, windata->size.w, i);
141 s->DrawLine(s, 0, i, windata->size.w, i);
144 s->DrawLine(s, i, 0, i, windata->size.h);
146 for (i = windata->size.w - t->
right_size; i < windata->
size.w; i++)
147 s->DrawLine(s, i, 0, i, windata->size.h);
157 DrawTriangle(s, 1, x, y, w - 2 * d);
159 s->SetColor(s, COLOR_EXPAND(t->
max_color));
176 s->SetBlittingFlags(s, DSBLIT_BLEND_ALPHACHANNEL);
178 s->StretchBlit(s, windata->icon,
NULL, &dr);
180 windata->wm_needs_redraw = 0;
187 IDirectFBWindow *dfbwin = windata->dfbwin;
190 dfbwin->GetSize(dfbwin, cw, ch);
191 *cw -= windata->theme.left_size + windata->theme.right_size;
193 windata->theme.top_size + windata->theme.caption_size +
194 windata->theme.bottom_size;
203 if (!windata->is_managed)
204 windata->theme = theme_none;
207 windata->theme = theme_none;
209 windata->theme = theme_none;
211 windata->theme = theme_std;
213 windata->theme.right_size = 0;
214 windata->theme.top_size = 0;
215 windata->theme.bottom_size = 0;
217 windata->theme = theme_std;
220 windata->client.x = windata->theme.
left_size;
221 windata->client.y = windata->theme.top_size + windata->theme.caption_size;
222 windata->client.w =
w;
223 windata->client.h =
h;
225 w + windata->theme.left_size + windata->theme.right_size;
227 h + windata->theme.top_size +
228 windata->theme.caption_size + windata->theme.bottom_size;
235 WM_POS_CAPTION = 0x01,
241 WM_POS_BOTTOM = 0x40,
259 int pos = WM_POS_NONE;
261 if (!WMIsClient(p, x, y)) {
267 pos |= WM_POS_CAPTION;
276 pos |= WM_POS_BOTTOM;
293 IDirectFBWindow *dfbwin = windata->
dfbwin;
294 DFBWindowOptions wopts;
296 if (!windata->is_managed)
302 case DWET_BUTTONDOWN:
303 if (evt->buttons & DIBM_LEFT) {
304 int pos = WMPos(windata, evt->x, evt->y);
309 windata->wm_grab = WM_POS_NONE;
314 windata->wm_grab = WM_POS_NONE;
322 if (!(wopts & DWOP_KEEP_STACKING)) {
329 windata->wm_grab = pos;
330 if (gwindata !=
NULL)
333 windata->wm_lastx = evt->cx;
334 windata->wm_lasty = evt->cy;
339 if (!windata->wm_grab)
341 if (!(evt->buttons & DIBM_LEFT)) {
342 if (windata->wm_grab & (WM_POS_RIGHT | WM_POS_BOTTOM)) {
343 int dx = evt->cx - windata->wm_lastx;
344 int dy = evt->cy - windata->wm_lasty;
346 if (!(wopts & DWOP_KEEP_SIZE)) {
348 if ((windata->wm_grab & (WM_POS_BOTTOM | WM_POS_RIGHT)) == WM_POS_BOTTOM)
350 else if ((windata->wm_grab & (WM_POS_BOTTOM | WM_POS_RIGHT)) == WM_POS_RIGHT)
363 if (gwindata !=
NULL)
365 windata->wm_grab = WM_POS_NONE;
370 if (!windata->wm_grab)
372 if (evt->buttons & DIBM_LEFT) {
373 int dx = evt->cx - windata->wm_lastx;
374 int dy = evt->cy - windata->wm_lasty;
376 if (windata->wm_grab & WM_POS_CAPTION) {
377 if (!(wopts & DWOP_KEEP_POSITION))
380 if (windata->wm_grab & (WM_POS_RIGHT | WM_POS_BOTTOM)) {
381 if (!(wopts & DWOP_KEEP_SIZE)) {
387 if ((windata->wm_grab & (WM_POS_BOTTOM | WM_POS_RIGHT)) == WM_POS_BOTTOM)
389 else if ((windata->wm_grab & (WM_POS_BOTTOM | WM_POS_RIGHT)) == WM_POS_RIGHT)
398 windata->wm_lastx = evt->cx;
399 windata->wm_lasty = evt->cy;
GLfloat GLfloat GLfloat GLfloat h
int DirectFB_WM_ProcessEvent(_THIS, SDL_Window *window, DFBWindowEvent *evt)
void DirectFB_RaiseWindow(_THIS, SDL_Window *window)
void DirectFB_WM_AdjustWindowLayout(SDL_Window *window, int flags, int w, int h)
int SDL_SendWindowEvent(SDL_Window *window, Uint8 windowevent, int data1, int data2)
return Display return Display Bool Bool int d
GLuint GLfloat GLfloat GLfloat GLfloat y1
GLfixed GLfixed GLfixed y2
#define SDL_DFB_RELEASE(x)
static SDL_VideoDevice * _this
#define SDL_DFB_DEVICEDATA(dev)
DFBResult DirectFB_WM_GetClientSize(_THIS, SDL_Window *window, int *cw, int *ch)
DECLSPEC void SDLCALL SDL_RestoreWindow(SDL_Window *window)
Restore the size and position of a minimized or maximized window.
DECLSPEC void SDLCALL SDL_MaximizeWindow(SDL_Window *window)
Make a window as large as possible.
GLuint GLfloat GLfloat GLfloat x1
EGLSurface EGLint EGLint y
#define SDL_DFB_WINDOWDATA(win)
GLenum GLsizei GLsizei GLsizei GLsizei GLbitfield flags
void DirectFB_WM_RedrawLayout(_THIS, SDL_Window *window)
#define SDL_DFB_CHECK(x...)
GLint GLint GLint GLint GLint w