Another try at the GP2X framebuffer vertical centering. Maybe third times

a charm??


git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1251 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
This commit is contained in:
stephena 2006-12-29 16:52:43 +00:00
parent cf998fb59f
commit a24a4776e9
2 changed files with 18 additions and 12 deletions

View File

@ -13,7 +13,7 @@
// See the file "license" for information on usage and redistribution of
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
//
// $Id: FrameBuffer.cxx,v 1.112 2006-12-19 12:40:30 stephena Exp $
// $Id: FrameBuffer.cxx,v 1.113 2006-12-29 16:52:43 stephena Exp $
//============================================================================
#include <sstream>
@ -60,6 +60,7 @@ void FrameBuffer::initialize(const string& title, uInt32 width, uInt32 height,
{
bool isAlreadyInitialized = (SDL_WasInit(SDL_INIT_VIDEO) & SDL_INIT_VIDEO) > 0;
myBaseDim.x = myBaseDim.y = 0;
myBaseDim.w = (uInt16) width;
myBaseDim.h = (uInt16) height;
myFrameRate = myOSystem->frameRate();

View File

@ -13,7 +13,7 @@
// See the file "license" for information on usage and redistribution of
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
//
// $Id: FrameBufferGP2X.cxx,v 1.16 2006-12-29 15:15:18 stephena Exp $
// $Id: FrameBufferGP2X.cxx,v 1.17 2006-12-29 16:52:43 stephena Exp $
//============================================================================
#include <SDL.h>
@ -77,14 +77,19 @@ bool FrameBufferGP2X::createScreen()
SDL_UpdateRect(myScreen, 0, 0, 0, 0);
}
// We start out with the TIA buffer and SDL screen being the same size
myScreenDim = myBaseDim;
// If we got a screenmode that won't be scaled, center it vertically
// Otherwise, SDL hardware scaling kicks in, and we won't mess with it
myBaseDim.x = myBaseDim.y = 0;
if(myBaseDim.h <= 240)
myBaseDim.y = (240 - myBaseDim.h) / 2;
// In software mode, all three dimensions are the same
myImageDim = myScreenDim = myBaseDim;
{
// If we can center vertically, do so
// It means the screen we open must be larger than the TIA buffer,
// since we're going to start drawing at an y offset
myScreenDim.y = (240 - myBaseDim.h) / 2;
myScreenDim.h = myScreenDim.y + myBaseDim.h;
}
// The GP2X always uses a 16-bit hardware buffer
myScreen = SDL_SetVideoMode(myScreenDim.w, myScreenDim.h, 16, mySDLFlags);
@ -93,7 +98,7 @@ bool FrameBufferGP2X::createScreen()
cerr << "ERROR: Unable to open SDL window: " << SDL_GetError() << endl;
return false;
}
myBasePtr = (uInt16*) myScreen->pixels + myImageDim.y * myScreen->pitch;
myBasePtr = (uInt16*) myScreen->pixels + myScreenDim.y * myScreen->pitch;
myPitch = myScreen->pitch/2;
myDirtyFlag = true;
@ -190,7 +195,7 @@ void FrameBufferGP2X::scanline(uInt32 row, uInt8* data)
uInt32 pixel = 0;
uInt8 *p, r, g, b;
for(Int32 x = 0; x < myImageDim.w; x++)
for(Int32 x = 0; x < myBaseDim.w; ++x)
{
p = (Uint8*) (start + // Start at top of RAM
(yoffset) + // Go down 'row' lines
@ -220,7 +225,7 @@ void FrameBufferGP2X::hLine(uInt32 x, uInt32 y, uInt32 x2, int color)
// Horizontal line
tmp.x = x;
tmp.y = y + myImageDim.y;
tmp.y = y + myScreenDim.y;
tmp.w = (x2 - x + 1);
tmp.h = 1;
SDL_FillRect(myScreen, &tmp, myDefPalette[color]);
@ -233,7 +238,7 @@ void FrameBufferGP2X::vLine(uInt32 x, uInt32 y, uInt32 y2, int color)
// Vertical line
tmp.x = x;
tmp.y = y + myImageDim.y;
tmp.y = y + myScreenDim.y;
tmp.w = 1;
tmp.h = (y2 - y + 1);
SDL_FillRect(myScreen, &tmp, myDefPalette[color]);
@ -247,7 +252,7 @@ void FrameBufferGP2X::fillRect(uInt32 x, uInt32 y, uInt32 w, uInt32 h,
// Fill the rectangle
tmp.x = x;
tmp.y = y + myImageDim.y;
tmp.y = y + myScreenDim.y;
tmp.w = w;
tmp.h = h;
SDL_FillRect(myScreen, &tmp, myDefPalette[color]);