Yet more OpenGL positioning fixes.

Fixed compile warning in converting integer values to hex strings in the
debugger.  The resulting code was actually causing crashes in the RIOT
tab of the debugger.


git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1572 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
This commit is contained in:
stephena 2008-12-24 01:20:06 +00:00
parent b62755ce70
commit 843c85c56b
9 changed files with 77 additions and 71 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: CheatCodeDialog.cxx,v 1.20 2008-08-04 20:12:23 stephena Exp $
// $Id: CheatCodeDialog.cxx,v 1.21 2008-12-24 01:20:05 stephena Exp $
//
// Based on code from ScummVM - Scumm Interpreter
// Copyright (C) 2002-2004 The ScummVM project
@ -124,12 +124,7 @@ void CheatCodeDialog::saveConfig()
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void CheatCodeDialog::addCheat()
{
// Center input dialog over entire screen
const GUI::Rect& screen = instance().frameBuffer().screenRect();
uInt32 x = (screen.width() - myCheatInput->getWidth()) >> 1;
uInt32 y = (screen.height() - myCheatInput->getHeight()) >> 1;
myCheatInput->show(x, y);
myCheatInput->show(); // Center input dialog over entire screen
myCheatInput->setEditString("", 0);
myCheatInput->setEditString("", 1);
myCheatInput->setTitle("");
@ -148,12 +143,7 @@ void CheatCodeDialog::editCheat()
const string& name = list[idx]->name();
const string& code = list[idx]->code();
// Center input dialog over entire screen
const GUI::Rect& screen = instance().frameBuffer().screenRect();
uInt32 x = (screen.width() - myCheatInput->getWidth()) >> 1;
uInt32 y = (screen.height() - myCheatInput->getHeight()) >> 1;
myCheatInput->show(x, y);
myCheatInput->show(); // Center input dialog over entire screen
myCheatInput->setEditString(name, 0);
myCheatInput->setEditString(code, 1);
myCheatInput->setTitle("");
@ -171,12 +161,7 @@ void CheatCodeDialog::removeCheat()
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void CheatCodeDialog::addOneShotCheat()
{
// Center input dialog over entire screen
const GUI::Rect& screen = instance().frameBuffer().screenRect();
uInt32 x = (screen.width() - myCheatInput->getWidth()) >> 1;
uInt32 y = (screen.height() - myCheatInput->getHeight()) >> 1;
myCheatInput->show(x, y);
myCheatInput->show(); // Center input dialog over entire screen
myCheatInput->setEditString("One-shot cheat", 0);
myCheatInput->setEditString("", 1);
myCheatInput->setTitle("");

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: FrameBufferGL.cxx,v 1.122 2008-12-23 18:54:05 stephena Exp $
// $Id: FrameBufferGL.cxx,v 1.123 2008-12-24 01:20:06 stephena Exp $
//============================================================================
#ifdef DISPLAY_OPENGL
@ -246,6 +246,9 @@ bool FrameBufferGL::setVidMode(VideoMode& mode)
{
cerr << "setVidMode: w = " << mode.screen_w << ", h = " << mode.screen_h << endl;
//mode.screen_w = 1600;
//mode.screen_h = 1000;
bool inUIMode =
myOSystem->eventHandler().state() == EventHandler::S_LAUNCHER ||
myOSystem->eventHandler().state() == EventHandler::S_DEBUGGER;
@ -295,7 +298,7 @@ cerr << "setVidMode: w = " << mode.screen_w << ", h = " << mode.screen_h << endl
// Now re-calculate the dimensions
mode.image_w = (Uint16) (stretchFactor * mode.image_w);
mode.image_h = (Uint16) (stretchFactor * mode.image_h);
// if(!fullScreen()) mode.screen_w = mode.image_w;
if(!fullScreen()) mode.screen_w = mode.image_w;
mode.image_x = (mode.screen_w - mode.image_w) >> 1;
mode.image_y = (mode.screen_h - mode.image_h) >> 1;
@ -758,15 +761,15 @@ void FBSurfaceGL::setHeight(uInt32 h)
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void FBSurfaceGL::translateCoords(Int32& x, Int32& y) const
{
// TODO - this doesn't work if aspect ratio is used
x -= myXOrig;
y -= myYOrig;
/*
#if 1
x = x - myXOrig;
y = y - myYOrig;
#else
// Wow, what a mess :)
x = (Int32) ((x - myImageDim.x) / myWidthScaleFactor);
y = (Int32) ((y - myImageDim.y) / myHeightScaleFactor);
*/
const GUI::Rect& image = myFB.imageRect();
x = (Int32) ((x - myXOrig - image.x()) / myWidthScaleFactor);
y = (Int32) ((y - myXOrig - image.y()) / myHeightScaleFactor);
#endif
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

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: Debugger.cxx,v 1.128 2008-05-30 19:07:55 stephena Exp $
// $Id: Debugger.cxx,v 1.129 2008-12-24 01:20:06 stephena Exp $
//============================================================================
#include "bspf.hxx"
@ -363,9 +363,9 @@ const string Debugger::run(const string& command)
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
const string Debugger::valueToString(int value, BaseFormat outputBase)
string Debugger::valueToString(int value, BaseFormat outputBase)
{
char rendered[32];
char buf[32];
if(outputBase == kBASE_DEFAULT)
outputBase = myParser->base();
@ -374,32 +374,34 @@ const string Debugger::valueToString(int value, BaseFormat outputBase)
{
case kBASE_2:
if(value < 0x100)
sprintf(rendered, Debugger::to_bin_8(value));
Debugger::to_bin(value, 8, buf);
else
sprintf(rendered, Debugger::to_bin_16(value));
Debugger::to_bin(value, 16, buf);
break;
case kBASE_10:
if(value < 0x100)
sprintf(rendered, "%3d", value);
sprintf(buf, "%3d", value);
else
sprintf(rendered, "%5d", value);
sprintf(buf, "%5d", value);
break;
case kBASE_16_4:
sprintf(rendered, Debugger::to_hex_4(value));
strcpy(buf, Debugger::to_hex_4(value));
break;
case kBASE_16:
default:
if(value < 0x100)
sprintf(rendered, Debugger::to_hex_8(value));
sprintf(buf, "%02x", value);
else if(value < 0x10000)
sprintf(buf, "%04x", value);
else
sprintf(rendered, Debugger::to_hex_16(value));
sprintf(buf, "%08x", value);
break;
}
return string(rendered);
return string(buf);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

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: Debugger.hxx,v 1.96 2008-11-30 17:28:03 stephena Exp $
// $Id: Debugger.hxx,v 1.97 2008-12-24 01:20:06 stephena Exp $
//============================================================================
#ifndef DEBUGGER_HXX
@ -70,7 +70,7 @@ typedef uInt16 (Debugger::*DEBUGGER_WORD_METHOD)();
for all debugging operations in Stella (parser, 6502 debugger, etc).
@author Stephen Anthony
@version $Id: Debugger.hxx,v 1.96 2008-11-30 17:28:03 stephena Exp $
@version $Id: Debugger.hxx,v 1.97 2008-12-24 01:20:06 stephena Exp $
*/
class Debugger : public DialogContainer
{
@ -198,7 +198,7 @@ class Debugger : public DialogContainer
*/
int stringToValue(const string& stringval)
{ return myParser->decipher_arg(stringval); }
const string valueToString(int value, BaseFormat outputBase = kBASE_DEFAULT);
string valueToString(int value, BaseFormat outputBase = kBASE_DEFAULT);
/** Convenience methods to convert to/from base values */
static char* to_hex_4(int i)

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: RiotDebug.cxx,v 1.7 2008-11-02 16:46:05 stephena Exp $
// $Id: RiotDebug.cxx,v 1.8 2008-12-24 01:20:06 stephena Exp $
//============================================================================
#include <sstream>
@ -53,13 +53,13 @@ const DebuggerState& RiotDebug::getState()
myState.TIMCLKS = timClocks();
// Controller port pins
Controller& port0 = myConsole.controller(Controller::Left);
const Controller& port0 = myConsole.controller(Controller::Left);
myState.P0_PIN1 = port0.myDigitalPinState[Controller::One];
myState.P0_PIN2 = port0.myDigitalPinState[Controller::Two];
myState.P0_PIN3 = port0.myDigitalPinState[Controller::Three];
myState.P0_PIN4 = port0.myDigitalPinState[Controller::Four];
myState.P0_PIN6 = port0.myDigitalPinState[Controller::Six];
Controller& port1 = myConsole.controller(Controller::Right);
const Controller& port1 = myConsole.controller(Controller::Right);
myState.P1_PIN1 = port1.myDigitalPinState[Controller::One];
myState.P1_PIN2 = port1.myDigitalPinState[Controller::Two];
myState.P1_PIN3 = port1.myDigitalPinState[Controller::Three];
@ -92,13 +92,13 @@ void RiotDebug::saveOldState()
myOldState.TIMCLKS = timClocks();
// Controller port pins
Controller& port0 = myConsole.controller(Controller::Left);
const Controller& port0 = myConsole.controller(Controller::Left);
myOldState.P0_PIN1 = port0.myDigitalPinState[Controller::One];
myOldState.P0_PIN2 = port0.myDigitalPinState[Controller::Two];
myOldState.P0_PIN3 = port0.myDigitalPinState[Controller::Three];
myOldState.P0_PIN4 = port0.myDigitalPinState[Controller::Four];
myOldState.P0_PIN6 = port0.myDigitalPinState[Controller::Six];
Controller& port1 = myConsole.controller(Controller::Right);
const Controller& port1 = myConsole.controller(Controller::Right);
myOldState.P1_PIN1 = port1.myDigitalPinState[Controller::One];
myOldState.P1_PIN2 = port1.myDigitalPinState[Controller::Two];
myOldState.P1_PIN3 = port1.myDigitalPinState[Controller::Three];
@ -314,7 +314,7 @@ string RiotDebug::toString()
{
// TODO: keyboard controllers?
const RiotState& state = (RiotState&) getState();
const RiotState& state = (RiotState&) getState();
const RiotState& oldstate = (RiotState&) getOldState();
string ret;

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: ContextMenu.cxx,v 1.7 2008-12-23 18:54:05 stephena Exp $
// $Id: ContextMenu.cxx,v 1.8 2008-12-24 01:20:06 stephena Exp $
//
// Based on code from ScummVM - Scumm Interpreter
// Copyright (C) 2002-2004 The ScummVM project
@ -98,12 +98,6 @@ void ContextMenu::show(uInt32 x, uInt32 y, int item)
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void ContextMenu::center()
{
/*
const GUI::Rect& screen = instance().frameBuffer().screenRect();
uInt32 x = (screen.width() - getWidth()) >> 1;
uInt32 y = (screen.height() - getHeight()) >> 1;
*/
// Make sure the menu is exactly where it should be, in case the image
// offset has changed
const GUI::Rect& image = instance().frameBuffer().imageRect();

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: InputTextDialog.cxx,v 1.23 2008-12-23 18:54:05 stephena Exp $
// $Id: InputTextDialog.cxx,v 1.24 2008-12-24 01:20:06 stephena Exp $
//
// Based on code from ScummVM - Scumm Interpreter
// Copyright (C) 2002-2004 The ScummVM project
@ -35,6 +35,7 @@ InputTextDialog::InputTextDialog(GuiObject* boss, const GUI::Font& font,
const StringList& labels)
: Dialog(&boss->instance(), &boss->parent(), 0, 0, 16, 16),
CommandSender(boss),
myEnableCenter(false),
myErrorFlag(false),
myXOrig(0),
myYOrig(0)
@ -97,11 +98,22 @@ InputTextDialog::~InputTextDialog()
myInput.clear();
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void InputTextDialog::show()
{
// Make sure position is set *after* the dialog is added, since the surface
// may not exist before then
myEnableCenter = true;
parent().addDialog(this);
center();
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void InputTextDialog::show(uInt32 x, uInt32 y)
{
// Make sure position is set *after* the dialog is added, since the surface
// may not exist before then
myEnableCenter = false;
parent().addDialog(this);
myXOrig = x;
myYOrig = y;
@ -111,17 +123,22 @@ void InputTextDialog::show(uInt32 x, uInt32 y)
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void InputTextDialog::center()
{
// Make sure the menu is exactly where it should be, in case the image
// offset has changed
const GUI::Rect& image = instance().frameBuffer().imageRect();
uInt32 x = image.x() + myXOrig;
uInt32 y = image.y() + myYOrig;
uInt32 tx = image.x() + image.width();
uInt32 ty = image.y() + image.height();
if(x + _w > tx) x -= (x + _w - tx);
if(y + _h > ty) y -= (y + _h - ty);
if(!myEnableCenter)
{
// Make sure the menu is exactly where it should be, in case the image
// offset has changed
const GUI::Rect& image = instance().frameBuffer().imageRect();
uInt32 x = image.x() + myXOrig;
uInt32 y = image.y() + myYOrig;
uInt32 tx = image.x() + image.width();
uInt32 ty = image.y() + image.height();
if(x + _w > tx) x -= (x + _w - tx);
if(y + _h > ty) y -= (y + _h - ty);
surface().setPos(x, y);
surface().setPos(x, y);
}
else
Dialog::center();
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

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: InputTextDialog.hxx,v 1.12 2008-12-23 18:54:05 stephena Exp $
// $Id: InputTextDialog.hxx,v 1.13 2008-12-24 01:20:06 stephena Exp $
//
// Based on code from ScummVM - Scumm Interpreter
// Copyright (C) 2002-2004 The ScummVM project
@ -38,6 +38,9 @@ class InputTextDialog : public Dialog, public CommandSender
const StringList& labels);
virtual ~InputTextDialog();
/** Place the input dialog onscreen and center it */
void show();
/** Show input dialog onscreen at the specified coordinates */
void show(uInt32 x, uInt32 y);
@ -59,6 +62,7 @@ class InputTextDialog : public Dialog, public CommandSender
InputWidget myInput;
StaticTextWidget* myTitle;
bool myEnableCenter;
bool myErrorFlag;
int myCmd;

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: PopUpWidget.cxx,v 1.42 2008-07-25 12:41:41 stephena Exp $
// $Id: PopUpWidget.cxx,v 1.43 2008-12-24 01:20:06 stephena Exp $
//
// Based on code from ScummVM - Scumm Interpreter
// Copyright (C) 2002-2004 The ScummVM project
@ -81,10 +81,11 @@ void PopUpWidget::handleMouseDown(int x, int y, int button, int clickCount)
if(isEnabled())
{
// Add menu just underneath parent widget
const GUI::Rect& image = instance().frameBuffer().imageRect();
uInt32 tx, ty;
dialog().surface().getPos(tx, ty);
tx += getAbsX() + _labelWidth;
ty += getAbsY() + getHeight();
tx += getAbsX() + _labelWidth - image.x();
ty += getAbsY() + getHeight() - image.y();
myMenu->show(tx, ty, myMenu->getSelected());
}
}