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 // See the file "license" for information on usage and redistribution of
// this file, and for a DISCLAIMER OF ALL WARRANTIES. // 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> #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; bool isAlreadyInitialized = (SDL_WasInit(SDL_INIT_VIDEO) & SDL_INIT_VIDEO) > 0;
myBaseDim.x = myBaseDim.y = 0;
myBaseDim.w = (uInt16) width; myBaseDim.w = (uInt16) width;
myBaseDim.h = (uInt16) height; myBaseDim.h = (uInt16) height;
myFrameRate = myOSystem->frameRate(); myFrameRate = myOSystem->frameRate();

View File

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