# HG changeset patch # User Sam Lantinga # Date 1255140233 0 # Node ID 9ea4413f0a9ea555e1f0676db0dfdba4c944f61c # Parent f63ca354c35edafa939bab37f01cf747302a2ebf Fixed bug #831 Andrey 2009-10-09 08:08:04 PDT gapi_hires_fix I made a mistake with the conclusions. And last time I as was mistaken with conclusions. Now I thought about in more detail the algorithm works. I have made it that the project fheroes2 well worked. The result of my work in attachment. I have a possibility to check up it on different models pocketpc. I checked various modes screen of 320x320, 320x240, 640x480, 800x400. diff -r f63ca354c35e -r 9ea4413f0a9e src/video/gapi/SDL_gapivideo.c --- a/src/video/gapi/SDL_gapivideo.c Thu Oct 08 09:02:03 2009 +0000 +++ b/src/video/gapi/SDL_gapivideo.c Sat Oct 10 02:03:53 2009 +0000 @@ -622,7 +622,6 @@ Uint32 Rmask, Gmask, Bmask; DWORD style; SDL_Rect allScreen; - SDL_ScreenOrientation systemOrientation; if( bpp < 4 ) { @@ -674,7 +673,7 @@ } gapi->userOrientation = SDL_ORIENTATION_UP; - systemOrientation = SDL_ORIENTATION_UP; + gapi->systemOrientation = SDL_ORIENTATION_UP; video->flags = SDL_FULLSCREEN; /* Clear flags, GAPI supports fullscreen only */ /* GAPI or VGA? */ @@ -697,18 +696,15 @@ gapi->userOrientation = SDL_ORIENTATION_RIGHT; if(GetSystemMetrics(SM_CYSCREEN) < GetSystemMetrics(SM_CXSCREEN)) - systemOrientation = SDL_ORIENTATION_RIGHT; + gapi->systemOrientation = SDL_ORIENTATION_RIGHT; - /* shall we apply hires fix? for example when we do not use hires resource */ gapi->hiresFix = 0; - if( systemOrientation == gapi->userOrientation ) + + /* check hires */ + if(GetSystemMetrics(SM_CXSCREEN) < width && GetSystemMetrics(SM_CYSCREEN) < height) { - if( (width > GetSystemMetrics(SM_CXSCREEN)) || (height > GetSystemMetrics(SM_CYSCREEN))) - gapi->hiresFix = 1; - } else - if( (width > GetSystemMetrics(SM_CYSCREEN)) || (height > GetSystemMetrics(SM_CXSCREEN))) -// if( !((width == gapi->gxProperties.cyHeight) && (height == gapi->gxProperties.cxWidth))) // user portrait, device landscape - gapi->hiresFix = 1; + gapi->hiresFix = 1; + } switch( gapi->userOrientation ) { @@ -783,7 +779,6 @@ printf("system display width (orig): %d\n", GetSystemMetrics(SM_CXSCREEN)); printf("system display height (orig): %d\n", GetSystemMetrics(SM_CYSCREEN)); #endif - gapi->hiresFix = (width > GetSystemMetrics(SM_CXSCREEN)) || (height > GetSystemMetrics(SM_CYSCREEN)); gapi->alreadyGXOpened = 1; if( !gapi->gxFunc.GXOpenDisplay(SDL_Window, GX_FULLSCREEN) ) { @@ -793,7 +788,7 @@ } if(gapi->useVga) - gapi->coordinateTransform = (4 - systemOrientation + gapi->userOrientation) % 4; + gapi->coordinateTransform = (4 - gapi->systemOrientation + gapi->userOrientation) % 4; else gapi->coordinateTransform = gapi->userOrientation; @@ -808,7 +803,7 @@ printf("y pitch: %d\n", gapi->gxProperties.cbyPitch); printf("gapi flags: 0x%x\n", gapi->gxProperties.ffFormat); printf("user orientation: %d\n", gapi->userOrientation); - printf("system orientation: %d\n", systemOrientation); + printf("system orientation: %d\n", gapi->systemOrientation); printf("gapi orientation: %d\n", gapi->gapiOrientation); diff -r f63ca354c35e -r 9ea4413f0a9e src/video/gapi/SDL_gapivideo.h --- a/src/video/gapi/SDL_gapivideo.h Thu Oct 08 09:02:03 2009 +0000 +++ b/src/video/gapi/SDL_gapivideo.h Sat Oct 10 02:03:53 2009 +0000 @@ -131,6 +131,7 @@ // The orientation of the video mode user wants to get // Probably restricted to UP and RIGHT SDL_ScreenOrientation userOrientation; + SDL_ScreenOrientation systemOrientation; // -------------- int useGXOpenDisplay; /* use GXOpenDispplay */ int alreadyGXOpened; diff -r f63ca354c35e -r 9ea4413f0a9e src/video/windib/SDL_dibevents.c --- a/src/video/windib/SDL_dibevents.c Thu Oct 08 09:02:03 2009 +0000 +++ b/src/video/windib/SDL_dibevents.c Sat Oct 10 02:03:53 2009 +0000 @@ -88,41 +88,41 @@ return key; } -static void GapiTransform(GapiInfo *gapiInfo, LONG *x, LONG *y) { - Sint16 rotatedX; - Sint16 rotatedY; - +static void GapiTransform(GapiInfo *gapiInfo, LONG *x, LONG *y) +{ if(gapiInfo->hiresFix) { *x *= 2; *y *= 2; } - if(gapiInfo->userOrientation == SDL_ORIENTATION_UP && - gapiInfo->gapiOrientation == SDL_ORIENTATION_RIGHT) + // 0 3 0 + if((!gapiInfo->userOrientation && gapiInfo->systemOrientation && !gapiInfo->gapiOrientation) || + // 3 0 3 + (gapiInfo->userOrientation && !gapiInfo->systemOrientation && gapiInfo->gapiOrientation) || + // 3 0 0 + (gapiInfo->userOrientation && !gapiInfo->systemOrientation && !gapiInfo->gapiOrientation)) { - rotatedX = *x; - rotatedY = *y; - *x = rotatedX; - *y = rotatedY; - } - else - if(gapiInfo->userOrientation == SDL_ORIENTATION_RIGHT && - gapiInfo->gapiOrientation == SDL_ORIENTATION_RIGHT) - { - rotatedX = (2 * ((SDL_VideoSurface->offset%SDL_VideoSurface->pitch)/ - SDL_VideoSurface->format->BytesPerPixel)) - + SDL_VideoSurface->w - *y; - rotatedY = *x; - *x = rotatedX; - *y = rotatedY; + Sint16 temp = *x; + *x = SDL_VideoSurface->w - *y; + *y = temp; } else + // 0 0 0 + if((!gapiInfo->userOrientation && !gapiInfo->systemOrientation && !gapiInfo->gapiOrientation) || + // 0 0 3 + (!gapiInfo->userOrientation && !gapiInfo->systemOrientation && gapiInfo->gapiOrientation)) { - rotatedX = SDL_VideoSurface->w - *y; - rotatedY = *x; - *y = rotatedY; - *x = rotatedX; + // without changes + // *x = *x; + // *y = *y; + } + // default + else + { + // without changes + // *x = *x; + // *y = *y; } } #endif