--HG--
extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%403502
This commit is contained in:
Sam Lantinga 2009-01-14 04:25:32 +00:00
parent 072760ebb7
commit 628262d3af
13 changed files with 117 additions and 122 deletions

View file

@ -199,10 +199,9 @@ DirectFB_WM_MaximizeWindow(_THIS, SDL_Window * window)
SDL_VideoDisplay *display = SDL_GetDisplayFromWindow(window);
windata->window->GetPosition(windata->window,
&windata->restore.x,
&windata->restore.y);
&windata->restore.x, &windata->restore.y);
windata->window->GetSize(windata->window, &windata->restore.w,
&windata->restore.h);
&windata->restore.h);
/* Do this already here */
window->flags |= SDL_WINDOW_MAXIMIZED;
@ -210,8 +209,7 @@ DirectFB_WM_MaximizeWindow(_THIS, SDL_Window * window)
windata->window->MoveTo(windata->window, 0, 0);
windata->window->Resize(windata->window,
display->current_mode.w,
display->current_mode.h);
display->current_mode.w, display->current_mode.h);
SDL_SendWindowEvent(windata->sdl_id, SDL_WINDOWEVENT_MAXIMIZED, 0, 0);
}
@ -291,7 +289,7 @@ static int wm_lastx;
static int wm_lasty;
int
DirectFB_WM_ProcessEvent(_THIS, SDL_Window *window, DFBWindowEvent * evt)
DirectFB_WM_ProcessEvent(_THIS, SDL_Window * window, DFBWindowEvent * evt)
{
SDL_DFB_WINDOWDATA(window);
@ -306,13 +304,14 @@ DirectFB_WM_ProcessEvent(_THIS, SDL_Window *window, DFBWindowEvent * evt)
case WM_POS_NONE:
return 0;
case WM_POS_CLOSE:
SDL_SendWindowEvent(windata->sdl_id, SDL_WINDOWEVENT_CLOSE, 0, 0);
SDL_SendWindowEvent(windata->sdl_id, SDL_WINDOWEVENT_CLOSE, 0,
0);
return 1;
case WM_POS_MAX:
if (window->flags & SDL_WINDOW_MAXIMIZED) {
DirectFB_WM_RestoreWindow(_this, window);
} else {
DirectFB_WM_MaximizeWindow(_this, window);
DirectFB_WM_MaximizeWindow(_this, window);
}
return 1;
default:

View file

@ -46,9 +46,11 @@ extern void DirectFB_WM_MaximizeWindow(_THIS, SDL_Window * window);
extern void DirectFB_WM_RestoreWindow(_THIS, SDL_Window * window);
extern void DirectFB_WM_RedrawLayout(SDL_Window * window);
extern int DirectFB_WM_ProcessEvent(_THIS, SDL_Window *window, DFBWindowEvent * evt);
extern int DirectFB_WM_ProcessEvent(_THIS, SDL_Window * window,
DFBWindowEvent * evt);
extern DFBResult DirectFB_WM_GetClientSize(_THIS, SDL_Window * window, int *cw, int *ch);
extern DFBResult DirectFB_WM_GetClientSize(_THIS, SDL_Window * window,
int *cw, int *ch);
#endif /* _SDL_directfb_wm_h */

View file

@ -177,7 +177,7 @@ ProcessWindowEvent(_THIS, DFB_WindowData * p, Uint32 flags,
break;
case DWET_MOTION:
if (ClientXY(p, &evt->x, &evt->y)) {
SDL_Window *window = SDL_GetWindowFromID(p->sdl_id);
SDL_Window *window = SDL_GetWindowFromID(p->sdl_id);
if (!devdata->use_linux_input) {
if (!(flags & SDL_WINDOW_INPUT_GRABBED))
SDL_SendMouseMotion(devdata->mouse_id[0], 0,
@ -193,7 +193,8 @@ ProcessWindowEvent(_THIS, DFB_WindowData * p, Uint32 flags,
}
}
if (!(window->flags & SDL_WINDOW_MOUSE_FOCUS))
SDL_SendWindowEvent(p->sdl_id, SDL_WINDOWEVENT_ENTER, 0, 0);
SDL_SendWindowEvent(p->sdl_id, SDL_WINDOWEVENT_ENTER, 0,
0);
}
break;
case DWET_KEYDOWN:

View file

@ -182,9 +182,9 @@ static void
SetBlendMode(DirectFB_RenderData * data, int blendMode,
DirectFB_TextureData * source)
{
SDL_DFB_WINDOWSURFACE(data->window);
//FIXME: check for format change
SDL_DFB_WINDOWSURFACE(data->window);
//FIXME: check for format change
if (1 || data->lastBlendMode != blendMode) {
switch (blendMode) {
case SDL_BLENDMODE_NONE:
@ -198,15 +198,13 @@ SetBlendMode(DirectFB_RenderData * data, int blendMode,
data->blitFlags = DSBLIT_BLEND_ALPHACHANNEL;
data->drawFlags = DSDRAW_BLEND;
destsurf->SetSrcBlendFunction(destsurf, DSBF_SRCALPHA);
destsurf->SetDstBlendFunction(destsurf,
DSBF_INVSRCALPHA);
destsurf->SetDstBlendFunction(destsurf, DSBF_INVSRCALPHA);
break;
case SDL_BLENDMODE_BLEND:
data->blitFlags = DSBLIT_BLEND_ALPHACHANNEL;
data->drawFlags = DSDRAW_BLEND;
destsurf->SetSrcBlendFunction(destsurf, DSBF_SRCALPHA);
destsurf->SetDstBlendFunction(destsurf,
DSBF_INVSRCALPHA);
destsurf->SetDstBlendFunction(destsurf, DSBF_INVSRCALPHA);
break;
case SDL_BLENDMODE_ADD:
data->blitFlags = DSBLIT_BLEND_ALPHACHANNEL;
@ -215,8 +213,7 @@ SetBlendMode(DirectFB_RenderData * data, int blendMode,
// It will be cheaper to copy the surface to
// a temporay surface and premultiply
if (source && TextureHasAlpha(source))
destsurf->SetSrcBlendFunction(destsurf,
DSBF_SRCALPHA);
destsurf->SetSrcBlendFunction(destsurf, DSBF_SRCALPHA);
else
destsurf->SetSrcBlendFunction(destsurf, DSBF_ONE);
destsurf->SetDstBlendFunction(destsurf, DSBF_ONE);
@ -324,7 +321,8 @@ DirectFB_CreateRenderer(SDL_Window * window, Uint32 flags)
} else
data->flipflags |= DSFLIP_ONSYNC;
SDL_DFB_CHECKERR(windata->surface->GetCapabilities(windata->surface, &scaps));
SDL_DFB_CHECKERR(windata->surface->
GetCapabilities(windata->surface, &scaps));
if (scaps & DSCAPS_DOUBLE)
renderer->info.flags |= SDL_RENDERER_PRESENTFLIP2;
else if (scaps & DSCAPS_TRIPLE)
@ -799,7 +797,7 @@ PrepareDraw(SDL_Renderer * renderer)
{
DirectFB_RenderData *data = (DirectFB_RenderData *) renderer->driverdata;
SDL_DFB_WINDOWSURFACE(data->window);
DFBResult ret;
Uint8 r, g, b, a;
@ -809,8 +807,7 @@ PrepareDraw(SDL_Renderer * renderer)
a = renderer->a;
SetBlendMode(data, renderer->blendMode, NULL);
SDL_DFB_CHECKERR(destsurf->SetDrawingFlags(destsurf,
data->drawFlags));
SDL_DFB_CHECKERR(destsurf->SetDrawingFlags(destsurf, data->drawFlags));
switch (renderer->blendMode) {
case SDL_BLENDMODE_NONE:
@ -856,8 +853,7 @@ DirectFB_RenderLine(SDL_Renderer * renderer, int x1, int y1, int x2, int y2)
PrepareDraw(renderer);
/* Use antialiasing when available */
#if (DFB_VERSION_ATLEAST(1,2,0))
SDL_DFB_CHECKERR(destsurf->SetRenderOptions(destsurf,
DSRO_ANTIALIAS));
SDL_DFB_CHECKERR(destsurf->SetRenderOptions(destsurf, DSRO_ANTIALIAS));
#endif
SDL_DFB_CHECKERR(destsurf->DrawLine(destsurf, x1, y1, x2, y2));
return 0;
@ -874,7 +870,7 @@ DirectFB_RenderFill(SDL_Renderer * renderer, const SDL_Rect * rect)
PrepareDraw(renderer);
SDL_DFB_CHECKERR(destsurf->FillRectangle(destsurf, rect->x, rect->y,
rect->w, rect->h));
rect->w, rect->h));
return 0;
error:
@ -938,48 +934,49 @@ DirectFB_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture,
SDLtoDFBRect(srcrect, &sr);
SDLtoDFBRect(dstrect, &dr);
SDL_DFB_CHECKERR(destsurf->SetColor(destsurf, 0xFF, 0xFF, 0xFF, 0xFF));
if (texture->modMode &
(SDL_TEXTUREMODULATE_COLOR | SDL_TEXTUREMODULATE_ALPHA)) {
SDL_DFB_CHECKERR(destsurf->
SetColor(destsurf, 0xFF, 0xFF, 0xFF, 0xFF));
if (texture->
modMode & (SDL_TEXTUREMODULATE_COLOR | SDL_TEXTUREMODULATE_ALPHA))
{
if (texture->modMode & SDL_TEXTUREMODULATE_ALPHA) {
alpha = texture->a;
SDL_DFB_CHECKERR(destsurf->SetColor(destsurf, 0xFF, 0xFF,
0xFF, alpha));
0xFF, alpha));
}
if (texture->modMode & SDL_TEXTUREMODULATE_COLOR) {
SDL_DFB_CHECKERR(destsurf->SetColor(destsurf,
texture->r,
texture->g,
texture->b, alpha));
texture->r,
texture->g,
texture->b, alpha));
flags |= DSBLIT_COLORIZE;
}
if (alpha < 0xFF)
flags |= DSBLIT_SRC_PREMULTCOLOR;
} else
SDL_DFB_CHECKERR(destsurf->SetColor(destsurf, 0xFF, 0xFF,
0xFF, 0xFF));
0xFF, 0xFF));
SetBlendMode(data, texture->blendMode, texturedata);
SDL_DFB_CHECKERR(destsurf->SetBlittingFlags(destsurf,
data->blitFlags
| flags));
data->blitFlags | flags));
#if (DFB_VERSION_ATLEAST(1,2,0))
SDL_DFB_CHECKERR(destsurf->SetRenderOptions(destsurf,
texturedata->
render_options));
texturedata->
render_options));
#endif
if (srcrect->w == dstrect->w && srcrect->h == dstrect->h) {
SDL_DFB_CHECKERR(destsurf->Blit(destsurf,
texturedata->surface,
&sr, dr.x, dr.y));
texturedata->surface,
&sr, dr.x, dr.y));
} else {
SDL_DFB_CHECKERR(destsurf->StretchBlit(destsurf,
texturedata->surface,
&sr, &dr));
texturedata->surface,
&sr, &dr));
}
}
return 0;
@ -1035,7 +1032,7 @@ static void
DirectFB_DestroyRenderer(SDL_Renderer * renderer)
{
DirectFB_RenderData *data = (DirectFB_RenderData *) renderer->driverdata;
if (data) {
SDL_free(data);
}

View file

@ -254,9 +254,9 @@ DirectFB_VideoInit(_THIS)
/* simple window manager support */
stemp = SDL_getenv(DFBENV_USE_WM);
if (stemp)
devdata->has_own_wm = atoi(stemp);
devdata->has_own_wm = atoi(stemp);
else
devdata->has_own_wm = 0;
devdata->has_own_wm = 0;
devdata->dfb = dfb;
devdata->firstwin = NULL;

View file

@ -44,10 +44,10 @@
(DFB_COMPILEDVERSION >= DFB_VERSIONNUM(X, Y, Z))
#if (DFB_VERSION_ATLEAST(1,0,0))
#define SDL_DIRECTFB_OPENGL 1
#include <directfbgl.h>
#define SDL_DIRECTFB_OPENGL 1
#include <directfbgl.h>
#else
#error "SDL_DIRECTFB: Please compile against libdirectfb version >= 1.0.0"
#error "SDL_DIRECTFB: Please compile against libdirectfb version >= 1.0.0"
#endif
#if SDL_DIRECTFB_OPENGL
@ -69,7 +69,7 @@
#define DFBENV_USE_YUV_DIRECT "SDL_DIRECTFB_YUV_DIRECT" /* Default: off */
#define DFBENV_USE_X11_CHECK "SDL_DIRECTFB_X11_CHECK" /* Default: on */
#define DFBENV_USE_LINUX_INPUT "SDL_DIRECTFB_LINUX_INPUT" /* Default: on */
#define DFBENV_USE_WM "SDL_DIRECTFB_WM" /* Default: off */
#define DFBENV_USE_WM "SDL_DIRECTFB_WM" /* Default: off */
#define SDL_DFB_RELEASE(x) do { if ( (x) != NULL ) { x->Release(x); x = NULL; } } while (0)
#define SDL_DFB_FREE(x) do { if ( (x) != NULL ) { SDL_free(x); x = NULL; } } while (0)

View file

@ -101,7 +101,8 @@ DirectFB_CreateWindow(_THIS, SDL_Window * window)
windata->window->SetOptions(windata->window, wopts);
/* See what we got */
SDL_DFB_CHECKERR(DirectFB_WM_GetClientSize(_this, window, &window->w, &window->h));
SDL_DFB_CHECKERR(DirectFB_WM_GetClientSize
(_this, window, &window->w, &window->h));
/* Get the window's surface. */
SDL_DFB_CHECKERR(windata->window->GetSurface(windata->window,
@ -115,9 +116,10 @@ DirectFB_CreateWindow(_THIS, SDL_Window * window)
/* Create Eventbuffer */
SDL_DFB_CHECKERR(windata->window->CreateEventBuffer(windata->window,
&windata->eventbuffer));
SDL_DFB_CHECKERR(windata->
window->EnableEvents(windata->window, DWET_ALL));
&windata->
eventbuffer));
SDL_DFB_CHECKERR(windata->window->
EnableEvents(windata->window, DWET_ALL));
/* Create a font */
/* FIXME: once during Video_Init */
@ -279,7 +281,8 @@ DirectFB_SetWindowSize(_THIS, SDL_Window * window)
SDL_DFB_CHECKERR(windata->window->EnableEvents(windata->window,
DWET_ALL));
SDL_DFB_CHECKERR(DirectFB_WM_GetClientSize(_this, window, &window->w, &window->h));
SDL_DFB_CHECKERR(DirectFB_WM_GetClientSize
(_this, window, &window->w, &window->h));
SDL_OnWindowResized(window);
}
@ -322,7 +325,7 @@ DirectFB_MaximizeWindow(_THIS, SDL_Window * window)
SDL_DFB_WINDOWDATA(window);
if (windata->is_managed) {
DirectFB_WM_MaximizeWindow(_this, window);
DirectFB_WM_MaximizeWindow(_this, window);
} else
SDL_Unsupported();
}
@ -341,7 +344,7 @@ DirectFB_RestoreWindow(_THIS, SDL_Window * window)
SDL_DFB_WINDOWDATA(window);
if (windata->is_managed) {
DirectFB_WM_RestoreWindow(_this, window);
DirectFB_WM_RestoreWindow(_this, window);
} else
SDL_Unsupported();
}
@ -421,31 +424,30 @@ DirectFB_AdjustWindowSurface(SDL_Window * window)
if (adjust) {
#if DFB_VERSION_ATLEAST(1,2,1)
SDL_DFB_CHECKERR(windata->window->ResizeSurface(windata->window,
SDL_DFB_CHECKERR(windata->window->ResizeSurface(windata->window,
windata->size.w,
windata->size.h));
SDL_DFB_CHECKERR(windata->surface->MakeSubSurface(windata->surface,
SDL_DFB_CHECKERR(windata->surface->MakeSubSurface(windata->surface,
windata->
window_surface,
&windata->client));
#else
DFBWindowOptions opts;
DFBWindowOptions opts;
SDL_DFB_CHECKERR(windata->window->GetOptions(windata->window, &opts));
/* recreate subsurface */
SDL_DFB_RELEASE(windata->surface);
if (opts & DWOP_SCALE)
SDL_DFB_CHECKERR(windata->window->ResizeSurface(windata->window,
windata->size.w,
windata->size.h));
SDL_DFB_CHECKERR(windata->window_surface->
GetSubSurface(windata->window_surface, &windata->client,
&windata->surface));
SDL_DFB_CHECKERR(windata->window->GetOptions(windata->window, &opts));
/* recreate subsurface */
SDL_DFB_RELEASE(windata->surface);
if (opts & DWOP_SCALE)
SDL_DFB_CHECKERR(windata->window->ResizeSurface(windata->window,
windata->size.w,
windata->size.h));
SDL_DFB_CHECKERR(windata->window_surface->
GetSubSurface(windata->window_surface,
&windata->client, &windata->surface));
#endif
DirectFB_WM_RedrawLayout(window);
DirectFB_WM_RedrawLayout(window);
}
error:
return;
}