From c23a7b4488f01bf0faea402e9220e248287cd21d Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Tue, 26 Feb 2002 14:38:53 +0000 Subject: [PATCH] Updated for DirectFB 0.9.9 --- configure.in | 2 +- src/video/directfb/SDL_DirectFB_events.c | 3 +- src/video/directfb/SDL_DirectFB_video.c | 57 +++++++++++++++--------- src/video/directfb/SDL_DirectFB_video.h | 2 +- 4 files changed, 39 insertions(+), 25 deletions(-) diff --git a/configure.in b/configure.in index 516dcaa26..b3d736737 100644 --- a/configure.in +++ b/configure.in @@ -748,7 +748,7 @@ CheckDirectFB() AC_MSG_ERROR([*** pkg-config too old; version 0.5 or better required.]) fi - DIRECTFB_REQUIRED_VERSION=0.9.8 + DIRECTFB_REQUIRED_VERSION=0.9.9 if $PKG_CONFIG --atleast-version $DIRECTFB_REQUIRED_VERSION directfb ; then DIRECTFB_CFLAGS=`$PKG_CONFIG --cflags directfb` diff --git a/src/video/directfb/SDL_DirectFB_events.c b/src/video/directfb/SDL_DirectFB_events.c index 9161be28f..31dfde29a 100644 --- a/src/video/directfb/SDL_DirectFB_events.c +++ b/src/video/directfb/SDL_DirectFB_events.c @@ -56,7 +56,8 @@ void DirectFB_PumpEvents (_THIS) { DFBInputEvent evt; - while (HIDDEN->inputbuffer->GetEvent (HIDDEN->inputbuffer, &evt) == DFB_OK) + while (HIDDEN->eventbuffer->GetEvent (HIDDEN->eventbuffer, + DFB_EVENT (&evt)) == DFB_OK) { SDL_keysym keysym; diff --git a/src/video/directfb/SDL_DirectFB_video.c b/src/video/directfb/SDL_DirectFB_video.c index 8050eb00a..c1afefcfd 100644 --- a/src/video/directfb/SDL_DirectFB_video.c +++ b/src/video/directfb/SDL_DirectFB_video.c @@ -304,7 +304,7 @@ int DirectFB_VideoInit(_THIS, SDL_PixelFormat *vformat) DFBCardCapabilities caps; IDirectFBDisplayLayer *layer; DFBDisplayLayerConfig dlc; - IDirectFBInputBuffer *inputbuffer; + IDirectFBEventBuffer *eventbuffer; ret = DirectFBInit (NULL, NULL); @@ -329,11 +329,10 @@ int DirectFB_VideoInit(_THIS, SDL_PixelFormat *vformat) return -1; } - ret = dfb->CreateInputBuffer (dfb, DICAPS_BUTTONS | DICAPS_AXIS | DICAPS_KEYS, - &inputbuffer); + ret = dfb->CreateEventBuffer (dfb, DICAPS_ALL, &eventbuffer); if (ret) { - SetDirectFBerror ("dfb->CreateInputBuffer", ret); + SetDirectFBerror ("dfb->CreateEventBuffer", ret); layer->Release (layer); dfb->Release (dfb); return -1; @@ -395,7 +394,7 @@ int DirectFB_VideoInit(_THIS, SDL_PixelFormat *vformat) HIDDEN->initialized = 1; HIDDEN->dfb = dfb; HIDDEN->layer = layer; - HIDDEN->inputbuffer = inputbuffer; + HIDDEN->eventbuffer = eventbuffer; return 0; } @@ -691,34 +690,48 @@ static void DirectFB_DirectUpdate(_THIS, int numrects, SDL_Rect *rects) static void DirectFB_WindowedUpdate(_THIS, int numrects, SDL_Rect *rects) { + DFBRegion region; + int i; + int region_valid = 0; IDirectFBSurface *surface = this->screen->hwdata->surface; - DFBRegion region = { rects->x, rects->y, - rects->x + rects->w - 1, - rects->y + rects->h - 1 }; - while (--numrects) + for (i=0; ix < region.x1) - region.x1 = rects->x; + x2 = rects[i].x + rects[i].w - 1; + y2 = rects[i].y + rects[i].h - 1; - if (rects->y < region.y1) - region.y1 = rects->y; + if (region_valid) + { + if (rects[i].x < region.x1) + region.x1 = rects[i].x; - x2 = rects->x + rects->w - 1; - y2 = rects->y + rects->h - 1; + if (rects[i].y < region.y1) + region.y1 = rects[i].y; - if (x2 > region.x2) - region.x2 = x2; + if (x2 > region.x2) + region.x2 = x2; - if (y2 > region.y2) - region.y2 = y2; + if (y2 > region.y2) + region.y2 = y2; + } + else + { + region.x1 = rects[i].x; + region.y1 = rects[i].y; + region.x2 = x2; + region.y2 = y2; + + region_valid = 1; + } } - surface->Flip (surface, ®ion, DSFLIP_WAITFORSYNC); + if (region_valid) + surface->Flip (surface, ®ion, DSFLIP_WAITFORSYNC); } int DirectFB_SetColors(_THIS, int firstcolor, int ncolors, SDL_Color *colors) @@ -731,7 +744,7 @@ void DirectFB_VideoQuit(_THIS) { int i, j; - HIDDEN->inputbuffer->Release (HIDDEN->inputbuffer); + HIDDEN->eventbuffer->Release (HIDDEN->eventbuffer); HIDDEN->layer->Release (HIDDEN->layer); HIDDEN->dfb->Release (HIDDEN->dfb); diff --git a/src/video/directfb/SDL_DirectFB_video.h b/src/video/directfb/SDL_DirectFB_video.h index 874c25ddc..ca867a177 100644 --- a/src/video/directfb/SDL_DirectFB_video.h +++ b/src/video/directfb/SDL_DirectFB_video.h @@ -43,7 +43,7 @@ struct SDL_PrivateVideoData IDirectFB *dfb; IDirectFBDisplayLayer *layer; - IDirectFBInputBuffer *inputbuffer; + IDirectFBEventBuffer *eventbuffer; #define NUM_MODELISTS 4 /* 8, 16, 24, and 32 bits-per-pixel */ int SDL_nummodes[NUM_MODELISTS];