Mercurial > sdl-ios-xcode
diff src/video/directfb/SDL_DirectFB_video.c @ 286:3ea69fd0b095
Updated for DirectFB 0.9.9
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Tue, 26 Feb 2002 14:38:53 +0000 |
parents | 80b647695abd |
children | f6ffac90895c |
line wrap: on
line diff
--- a/src/video/directfb/SDL_DirectFB_video.c Fri Feb 22 17:39:11 2002 +0000 +++ b/src/video/directfb/SDL_DirectFB_video.c Tue Feb 26 14:38:53 2002 +0000 @@ -304,7 +304,7 @@ DFBCardCapabilities caps; IDirectFBDisplayLayer *layer; DFBDisplayLayerConfig dlc; - IDirectFBInputBuffer *inputbuffer; + IDirectFBEventBuffer *eventbuffer; ret = DirectFBInit (NULL, NULL); @@ -329,11 +329,10 @@ 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 @@ HIDDEN->initialized = 1; HIDDEN->dfb = dfb; HIDDEN->layer = layer; - HIDDEN->inputbuffer = inputbuffer; + HIDDEN->eventbuffer = eventbuffer; return 0; } @@ -691,34 +690,48 @@ 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; i<numrects; ++i) { int x2, y2; - rects++; + if ( ! rects[i].w ) /* Clipped? */ + continue; + + x2 = rects[i].x + rects[i].w - 1; + y2 = rects[i].y + rects[i].h - 1; - if (rects->x < region.x1) - region.x1 = rects->x; + if (region_valid) + { + if (rects[i].x < region.x1) + region.x1 = rects[i].x; - if (rects->y < region.y1) - region.y1 = rects->y; + if (rects[i].y < region.y1) + region.y1 = rects[i].y; - x2 = rects->x + rects->w - 1; - y2 = rects->y + rects->h - 1; + if (x2 > region.x2) + region.x2 = x2; - if (x2 > region.x2) - region.x2 = x2; + if (y2 > region.y2) + region.y2 = y2; + } + else + { + region.x1 = rects[i].x; + region.y1 = rects[i].y; + region.x2 = x2; + region.y2 = y2; - if (y2 > region.y2) - 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 @@ { int i, j; - HIDDEN->inputbuffer->Release (HIDDEN->inputbuffer); + HIDDEN->eventbuffer->Release (HIDDEN->eventbuffer); HIDDEN->layer->Release (HIDDEN->layer); HIDDEN->dfb->Release (HIDDEN->dfb);