diff --git a/stella/src/cheat/CheatCodeDialog.cxx b/stella/src/cheat/CheatCodeDialog.cxx index 4bf07ff19..5b1be4970 100644 --- a/stella/src/cheat/CheatCodeDialog.cxx +++ b/stella/src/cheat/CheatCodeDialog.cxx @@ -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.7 2005-12-20 00:56:31 stephena Exp $ +// $Id: CheatCodeDialog.cxx,v 1.8 2006-02-22 17:38:03 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -47,10 +47,9 @@ enum { // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CheatCodeDialog::CheatCodeDialog(OSystem* osystem, DialogContainer* parent, - int x, int y, int w, int h) + const GUI::Font& font, int x, int y, int w, int h) : Dialog(osystem, parent, x, y, w, h) { - const GUI::Font& font = instance()->font(); int xpos, ypos; // List of cheats, with checkboxes to enable/disable @@ -63,10 +62,10 @@ CheatCodeDialog::CheatCodeDialog(OSystem* osystem, DialogContainer* parent, addFocusWidget(myCheatList); xpos += myCheatList->getWidth() + 15; ypos = 15; - addButton(xpos, ypos, "Add", kAddCheatCmd, 0); - myEditButton = addButton(xpos, ypos+=20, "Edit", kEditCheatCmd, 0); - myRemoveButton = addButton(xpos, ypos+=20, "Remove", kRemCheatCmd, 0); - addButton(xpos, ypos+=30, "One shot", kAddOneShotCmd, 0); + addButton(font, xpos, ypos, "Add", kAddCheatCmd, 0); + myEditButton = addButton(font, xpos, ypos+=20, "Edit", kEditCheatCmd, 0); + myRemoveButton = addButton(font, xpos, ypos+=20, "Remove", kRemCheatCmd, 0); + addButton(font, xpos, ypos+=30, "One shot", kAddOneShotCmd, 0); // Inputbox which will pop up when adding/editing a cheat StringList labels; @@ -75,15 +74,15 @@ CheatCodeDialog::CheatCodeDialog(OSystem* osystem, DialogContainer* parent, myCheatInput = new InputTextDialog(this, font, labels, _x+20, _y+20); myCheatInput->setTarget(this); - // Add OK and Cancel buttons + // Add OK and Cancel buttons **** FIXME - coordinates #ifndef MAC_OSX - addButton(_w - 2 * (kButtonWidth + 7), _h - 24, "OK", kOKCmd, 0); - myCancelButton = addButton(_w - (kButtonWidth + 10), _h - 24, + addButton(font, _w - 2 * (kButtonWidth + 7), _h - 24, "OK", kOKCmd, 0); + myCancelButton = addButton(font, _w - (kButtonWidth + 10), _h - 24, "Cancel", kCloseCmd, 0); #else - myCancelButton = addButton(_w - 2 * (kButtonWidth + 7), _h - 24, + myCancelButton = addButton(font, _w - 2 * (kButtonWidth + 7), _h - 24, "Cancel", kCloseCmd, 0); - addButton(_w - (kButtonWidth + 10), _h - 24, "OK", kOKCmd, 0); + addButton(font, _w - (kButtonWidth + 10), _h - 24, "OK", kOKCmd, 0); #endif } diff --git a/stella/src/cheat/CheatCodeDialog.hxx b/stella/src/cheat/CheatCodeDialog.hxx index 10a9b12ca..83449dc45 100644 --- a/stella/src/cheat/CheatCodeDialog.hxx +++ b/stella/src/cheat/CheatCodeDialog.hxx @@ -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.hxx,v 1.4 2005-12-18 18:37:01 stephena Exp $ +// $Id: CheatCodeDialog.hxx,v 1.5 2006-02-22 17:38:03 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -42,7 +42,7 @@ class CheatCodeDialog : public Dialog { public: CheatCodeDialog(OSystem* osystem, DialogContainer* parent, - int x, int y, int w, int h); + const GUI::Font& font, int x, int y, int w, int h); ~CheatCodeDialog(); protected: diff --git a/stella/src/debugger/gui/AudioWidget.cxx b/stella/src/debugger/gui/AudioWidget.cxx index 7d3c9c5e7..a8badaf9d 100644 --- a/stella/src/debugger/gui/AudioWidget.cxx +++ b/stella/src/debugger/gui/AudioWidget.cxx @@ -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: AudioWidget.cxx,v 1.1 2005-10-13 18:53:07 stephena Exp $ +// $Id: AudioWidget.cxx,v 1.2 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -37,22 +37,20 @@ enum { }; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -AudioWidget::AudioWidget(GuiObject* boss, int x, int y, int w, int h) - : Widget(boss, x, y, w, h), +AudioWidget::AudioWidget(GuiObject* boss, const GUI::Font& font, + int x, int y, int w, int h) + : Widget(boss, font, x, y, w, h), CommandSender(boss) { - const GUI::Font& font = instance()->consoleFont(); const int fontWidth = font.getMaxCharWidth(), fontHeight = font.getFontHeight(), lineHeight = font.getLineHeight(); int xpos = 10, ypos = 25, lwidth = font.getStringWidth("AUDW: "); - StaticTextWidget* t; // AudF registers - t = new StaticTextWidget(boss, xpos, ypos+2, - lwidth, fontHeight, - "AUDF:", kTextAlignLeft); - t->setFont(font); + new StaticTextWidget(boss, font, xpos, ypos+2, + lwidth, fontHeight, + "AUDF:", kTextAlignLeft); xpos += lwidth; myAudF = new DataGridWidget(boss, font, xpos, ypos, 2, 1, 2, 5, kBASE_16); @@ -63,20 +61,15 @@ AudioWidget::AudioWidget(GuiObject* boss, int x, int y, int w, int h) for(int col = 0; col < 2; ++col) { - t = new StaticTextWidget(boss, xpos + col*myAudF->colWidth() + 7, - ypos - lineHeight, - fontWidth, fontHeight, - Debugger::to_hex_4(col), - kTextAlignLeft); - t->setFont(font); + new StaticTextWidget(boss, font, xpos + col*myAudF->colWidth() + 7, + ypos - lineHeight, fontWidth, fontHeight, + Debugger::to_hex_4(col), kTextAlignLeft); } // AudC registers xpos = 10; ypos += lineHeight + 5; - t = new StaticTextWidget(boss, xpos, ypos+2, - lwidth, fontHeight, - "AUDC:", kTextAlignLeft); - t->setFont(font); + new StaticTextWidget(boss, font, xpos, ypos+2, lwidth, fontHeight, + "AUDC:", kTextAlignLeft); xpos += lwidth; myAudC = new DataGridWidget(boss, font, xpos, ypos, 2, 1, 2, 4, kBASE_16); @@ -87,10 +80,8 @@ AudioWidget::AudioWidget(GuiObject* boss, int x, int y, int w, int h) // AudV registers xpos = 10; ypos += lineHeight + 5; - t = new StaticTextWidget(boss, xpos, ypos+2, - lwidth, fontHeight, - "AUDV:", kTextAlignLeft); - t->setFont(font); + new StaticTextWidget(boss, font, xpos, ypos+2, lwidth, fontHeight, + "AUDV:", kTextAlignLeft); xpos += lwidth; myAudV = new DataGridWidget(boss, font, xpos, ypos, 2, 1, 2, 4, kBASE_16); diff --git a/stella/src/debugger/gui/AudioWidget.hxx b/stella/src/debugger/gui/AudioWidget.hxx index 379ca9192..59068c791 100644 --- a/stella/src/debugger/gui/AudioWidget.hxx +++ b/stella/src/debugger/gui/AudioWidget.hxx @@ -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: AudioWidget.hxx,v 1.1 2005-10-13 18:53:07 stephena Exp $ +// $Id: AudioWidget.hxx,v 1.2 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -32,7 +32,8 @@ class DataGridWidget; class AudioWidget : public Widget, public CommandSender { public: - AudioWidget(GuiObject* boss, int x, int y, int w, int h); + AudioWidget(GuiObject* boss, const GUI::Font& font, + int x, int y, int w, int h); virtual ~AudioWidget(); void handleCommand(CommandSender* sender, int cmd, int data, int id); diff --git a/stella/src/debugger/gui/ColorWidget.cxx b/stella/src/debugger/gui/ColorWidget.cxx index ab4a8e3d2..e29478cab 100644 --- a/stella/src/debugger/gui/ColorWidget.cxx +++ b/stella/src/debugger/gui/ColorWidget.cxx @@ -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: ColorWidget.cxx,v 1.2 2005-09-06 22:25:40 stephena Exp $ +// $Id: ColorWidget.cxx,v 1.3 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -28,8 +28,9 @@ #include "ColorWidget.hxx" // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -ColorWidget::ColorWidget(GuiObject* boss, int x, int y, int w, int h, int cmd) - : Widget(boss, x, y, w, h), +ColorWidget::ColorWidget(GuiObject* boss, const GUI::Font& font, + int x, int y, int w, int h, int cmd) + : Widget(boss, font, x, y, w, h), CommandSender(boss), _color(0), _cmd(cmd) diff --git a/stella/src/debugger/gui/ColorWidget.hxx b/stella/src/debugger/gui/ColorWidget.hxx index e29d13345..fc334c86e 100644 --- a/stella/src/debugger/gui/ColorWidget.hxx +++ b/stella/src/debugger/gui/ColorWidget.hxx @@ -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: ColorWidget.hxx,v 1.1 2005-08-30 17:51:26 stephena Exp $ +// $Id: ColorWidget.hxx,v 1.2 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -35,14 +35,15 @@ class GuiObject; be expanded with a TIA palette table, to set the color visually. @author Stephen Anthony - @version $Id: ColorWidget.hxx,v 1.1 2005-08-30 17:51:26 stephena Exp $ + @version $Id: ColorWidget.hxx,v 1.2 2006-02-22 17:38:04 stephena Exp $ */ class ColorWidget : public Widget, public CommandSender { friend class ColorDialog; public: - ColorWidget(GuiObject* boss, int x, int y, int w, int h, int cmd = 0); + ColorWidget(GuiObject* boss, const GUI::Font& font, + int x, int y, int w, int h, int cmd = 0); ~ColorWidget(); void setColor(int color); diff --git a/stella/src/debugger/gui/ContextMenu.cxx b/stella/src/debugger/gui/ContextMenu.cxx index 7aee1b121..d1dd84b60 100644 --- a/stella/src/debugger/gui/ContextMenu.cxx +++ b/stella/src/debugger/gui/ContextMenu.cxx @@ -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.5 2006-01-15 20:46:19 stephena Exp $ +// $Id: ContextMenu.cxx,v 1.6 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -30,9 +30,9 @@ ContextMenu::ContextMenu(GuiObject* boss, const GUI::Font& font) : Dialog(boss->instance(), boss->parent(), 0, 0, 16, 16), CommandSender(boss), _selectedItem(-1), - _rowHeight(font.getLineHeight()) + _rowHeight(font.getLineHeight()), + _font(&font) { - setFont(font); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/stella/src/debugger/gui/ContextMenu.hxx b/stella/src/debugger/gui/ContextMenu.hxx index 20e26a5d0..7fe0becc6 100644 --- a/stella/src/debugger/gui/ContextMenu.hxx +++ b/stella/src/debugger/gui/ContextMenu.hxx @@ -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.hxx,v 1.2 2005-08-31 22:34:43 stephena Exp $ +// $Id: ContextMenu.hxx,v 1.3 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -76,6 +76,9 @@ class ContextMenu : public Dialog, public CommandSender int _selectedItem; int _rowHeight; + + private: + const GUI::Font* _font; }; #endif diff --git a/stella/src/debugger/gui/CpuWidget.cxx b/stella/src/debugger/gui/CpuWidget.cxx index 1f7328873..a2e60549e 100644 --- a/stella/src/debugger/gui/CpuWidget.cxx +++ b/stella/src/debugger/gui/CpuWidget.cxx @@ -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: CpuWidget.cxx,v 1.3 2005-10-14 13:50:00 stephena Exp $ +// $Id: CpuWidget.cxx,v 1.4 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -60,20 +60,18 @@ enum { // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CpuWidget::CpuWidget(GuiObject* boss, const GUI::Font& font, int x, int y) - : Widget(boss, x, y, 16, 16), + : Widget(boss, font, x, y, 16, 16), CommandSender(boss) { const int fontWidth = font.getMaxCharWidth(), fontHeight = font.getFontHeight(), lineHeight = font.getLineHeight(); int xpos, ypos, lwidth; - StaticTextWidget* t; // Create a 1x1 grid with label for the PC register xpos = x; ypos = y; lwidth = 4 * fontWidth; - t = new StaticTextWidget(boss, xpos, ypos+2, lwidth-2, fontHeight, - "PC:", kTextAlignLeft); - t->setFont(font); + new StaticTextWidget(boss, font, xpos, ypos+2, lwidth-2, fontHeight, + "PC:", kTextAlignLeft); myPCGrid = new DataGridWidget(boss, font, xpos + lwidth, ypos, 1, 1, 16, 16); myPCGrid->setTarget(this); myPCGrid->setID(kPCRegID); @@ -81,8 +79,8 @@ CpuWidget::CpuWidget(GuiObject* boss, const GUI::Font& font, int x, int y) // Create a read-only textbox containing the current PC label xpos += lwidth + myPCGrid->getWidth() + 10; - myPCLabel = new EditTextWidget(boss, xpos, ypos, fontWidth*15, lineHeight, ""); - myPCLabel->setFont(font); + myPCLabel = new EditTextWidget(boss, font, xpos, ypos, fontWidth*15, + lineHeight, ""); myPCLabel->setEditable(false); // Create a 1x4 grid with labels for the other CPU registers @@ -95,17 +93,15 @@ CpuWidget::CpuWidget(GuiObject* boss, const GUI::Font& font, int x, int y) string labels[4] = { "SP:", "A:", "X:", "Y:" }; for(int row = 0; row < 4; ++row) { - t = new StaticTextWidget(boss, xpos, ypos + row*lineHeight + 2, - lwidth-2, fontHeight, - labels[row], kTextAlignLeft); - t->setFont(font); + new StaticTextWidget(boss, font, xpos, ypos + row*lineHeight + 2, + lwidth-2, fontHeight, + labels[row], kTextAlignLeft); } // Create a bitfield widget for changing the processor status xpos = x; ypos += 4*lineHeight + 2; - t = new StaticTextWidget(boss, xpos, ypos+2, lwidth-2, fontHeight, - "PS:", kTextAlignLeft); - t->setFont(font); + new StaticTextWidget(boss, font, xpos, ypos+2, lwidth-2, fontHeight, + "PS:", kTextAlignLeft); myPSRegister = new ToggleBitWidget(boss, font, xpos+lwidth, ypos, 8, 1); myPSRegister->setTarget(this); addFocusWidget(myPSRegister); diff --git a/stella/src/debugger/gui/DataGridOpsWidget.cxx b/stella/src/debugger/gui/DataGridOpsWidget.cxx index 74df39394..8f1dc21c5 100644 --- a/stella/src/debugger/gui/DataGridOpsWidget.cxx +++ b/stella/src/debugger/gui/DataGridOpsWidget.cxx @@ -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: DataGridOpsWidget.cxx,v 1.2 2006-01-15 20:46:19 stephena Exp $ +// $Id: DataGridOpsWidget.cxx,v 1.3 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -22,8 +22,9 @@ #include "DataGridOpsWidget.hxx" // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -DataGridOpsWidget::DataGridOpsWidget(GuiObject* boss, int x, int y) - : Widget(boss, x, y, 16, 16), +DataGridOpsWidget::DataGridOpsWidget(GuiObject* boss, const GUI::Font& font, + int x, int y) + : Widget(boss, font, x, y, 16, 16), CommandSender(boss), _zeroButton(NULL), _invButton(NULL), @@ -34,38 +35,38 @@ DataGridOpsWidget::DataGridOpsWidget(GuiObject* boss, int x, int y) _shiftRightButton(NULL) { const int bwidth = _font->getMaxCharWidth() * 3, - bheight = 16, // FIXME - magic number + bheight = _font->getFontHeight() + 2, space = 6; int xpos, ypos; // Create operations buttons xpos = x; ypos = y; - _zeroButton = new ButtonWidget(boss, xpos, ypos, bwidth, bheight, + _zeroButton = new ButtonWidget(boss, font, xpos, ypos, bwidth, bheight, "0", kDGZeroCmd, 0); ypos += bheight + space; - _invButton = new ButtonWidget(boss, xpos, ypos, bwidth, bheight, + _invButton = new ButtonWidget(boss, font, xpos, ypos, bwidth, bheight, "Inv", kDGInvertCmd, 0); ypos += bheight + space; - _incButton = new ButtonWidget(boss, xpos, ypos, bwidth, bheight, + _incButton = new ButtonWidget(boss, font, xpos, ypos, bwidth, bheight, "++", kDGIncCmd, 0); ypos += bheight + space; - _shiftLeftButton = new ButtonWidget(boss, xpos, ypos, bwidth, bheight, + _shiftLeftButton = new ButtonWidget(boss, font, xpos, ypos, bwidth, bheight, "<<", kDGShiftLCmd, 0); // Move to next column, skip a row xpos = x + bwidth + space; ypos = y + bheight + space; - _negButton = new ButtonWidget(boss, xpos, ypos, bwidth, bheight, + _negButton = new ButtonWidget(boss, font, xpos, ypos, bwidth, bheight, "Neg", kDGNegateCmd, 0); ypos += bheight + space; - _decButton = new ButtonWidget(boss, xpos, ypos, bwidth, bheight, + _decButton = new ButtonWidget(boss, font, xpos, ypos, bwidth, bheight, "--", kDGDecCmd, 0); ypos += bheight + space; - _shiftRightButton = new ButtonWidget(boss, xpos, ypos, bwidth, bheight, + _shiftRightButton = new ButtonWidget(boss, font, xpos, ypos, bwidth, bheight, ">>", kDGShiftRCmd, 0); // Calculate real dimensions diff --git a/stella/src/debugger/gui/DataGridOpsWidget.hxx b/stella/src/debugger/gui/DataGridOpsWidget.hxx index 70fbb33f9..2e7f3aa8e 100644 --- a/stella/src/debugger/gui/DataGridOpsWidget.hxx +++ b/stella/src/debugger/gui/DataGridOpsWidget.hxx @@ -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: DataGridOpsWidget.hxx,v 1.1 2005-08-30 17:51:26 stephena Exp $ +// $Id: DataGridOpsWidget.hxx,v 1.2 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -40,7 +40,7 @@ enum { class DataGridOpsWidget : public Widget, public CommandSender { public: - DataGridOpsWidget(GuiObject* boss, int x, int y); + DataGridOpsWidget(GuiObject* boss, const GUI::Font& font, int x, int y); virtual ~DataGridOpsWidget() {} void setTarget(CommandReceiver* target); diff --git a/stella/src/debugger/gui/DataGridWidget.cxx b/stella/src/debugger/gui/DataGridWidget.cxx index fe7b91c70..e86706568 100644 --- a/stella/src/debugger/gui/DataGridWidget.cxx +++ b/stella/src/debugger/gui/DataGridWidget.cxx @@ -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: DataGridWidget.cxx,v 1.5 2006-01-15 20:46:19 stephena Exp $ +// $Id: DataGridWidget.cxx,v 1.6 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -31,7 +31,8 @@ DataGridWidget::DataGridWidget(GuiObject* boss, const GUI::Font& font, int x, int y, int cols, int rows, int colchars, int bits, BaseFormat base) - : EditableWidget(boss, x, y, cols*(colchars * font.getMaxCharWidth() + 8) + 1, + : EditableWidget(boss, font, x, y, + cols*(colchars * font.getMaxCharWidth() + 8) + 1, font.getLineHeight()*rows + 1), _rows(rows), _cols(cols), @@ -44,8 +45,6 @@ DataGridWidget::DataGridWidget(GuiObject* boss, const GUI::Font& font, _selectedItem(0), _opsWidget(NULL) { - setFont(font); - _flags = WIDGET_ENABLED | WIDGET_CLEARBG | WIDGET_RETAIN_FOCUS; _type = kDataGridWidget; _editMode = false; diff --git a/stella/src/debugger/gui/DebuggerDialog.cxx b/stella/src/debugger/gui/DebuggerDialog.cxx index f32c40ce2..2d751b0a9 100644 --- a/stella/src/debugger/gui/DebuggerDialog.cxx +++ b/stella/src/debugger/gui/DebuggerDialog.cxx @@ -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: DebuggerDialog.cxx,v 1.11 2006-01-15 20:46:19 stephena Exp $ +// $Id: DebuggerDialog.cxx,v 1.12 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -145,7 +145,8 @@ void DebuggerDialog::addTiaArea() { GUI::Rect r = instance()->debugger().getTiaBounds(); - myTiaOutput = new TiaOutputWidget(this, r.left, r.top, r.width(), r.height()); + myTiaOutput = new TiaOutputWidget(this, instance()->consoleFont(), + r.left, r.top, r.width(), r.height()); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -154,30 +155,34 @@ void DebuggerDialog::addTabArea() GUI::Rect r = instance()->debugger().getTabBounds(); const int vBorder = 4; - const int widWidth = r.width() - vBorder; - const int widHeight = r.height() - 25; // FIXME - magic number/font height - int tabID; // The tab widget - myTab = new TabWidget(this, r.left, r.top + vBorder, + myTab = new TabWidget(this, instance()->consoleFont(), r.left, r.top + vBorder, r.width(), r.height() - vBorder); addTabWidget(myTab); + const int widWidth = r.width() - vBorder; + const int widHeight = r.height() - myTab->getTabHeight() - vBorder - 4; + int tabID; + // The Prompt/console tab tabID = myTab->addTab("Prompt"); - myPrompt = new PromptWidget(myTab, 2, 2, widWidth, widHeight); + myPrompt = new PromptWidget(myTab, instance()->consoleFont(), + 2, 2, widWidth, widHeight); myTab->setParentWidget(tabID, myPrompt); addToFocusList(myPrompt->getFocusList(), tabID); // The TIA tab tabID = myTab->addTab("TIA"); - TiaWidget* tia = new TiaWidget(myTab, 2, 2, widWidth, widHeight); + TiaWidget* tia = new TiaWidget(myTab, instance()->consoleFont(), + 2, 2, widWidth, widHeight); myTab->setParentWidget(tabID, tia); addToFocusList(tia->getFocusList(), tabID); // The Audio tab tabID = myTab->addTab("Audio"); - AudioWidget* aud = new AudioWidget(myTab, 2, 2, widWidth, widHeight); + AudioWidget* aud = new AudioWidget(myTab, instance()->consoleFont(), + 2, 2, widWidth, widHeight); myTab->setParentWidget(tabID, aud); addToFocusList(aud->getFocusList(), tabID); @@ -195,16 +200,16 @@ void DebuggerDialog::addStatusArea() int xpos, ypos; xpos = r.left; ypos = r.top; - myTiaInfo = new TiaInfoWidget(this, xpos+20, ypos); + myTiaInfo = new TiaInfoWidget(this, instance()->consoleFont(), xpos+20, ypos); ypos += myTiaInfo->getHeight() + 10; - myTiaZoom = new TiaZoomWidget(this, xpos+10, ypos); + myTiaZoom = new TiaZoomWidget(this, instance()->consoleFont(), xpos+10, ypos); addToFocusList(myTiaZoom->getFocusList()); xpos += 10; ypos += myTiaZoom->getHeight() + 20; - myMessageBox = new EditTextWidget(this, xpos, ypos, myTiaZoom->getWidth(), + myMessageBox = new EditTextWidget(this, instance()->consoleFont(), + xpos, ypos, myTiaZoom->getWidth(), font.getLineHeight(), ""); - myMessageBox->setFont(font); myMessageBox->setEditable(false); myMessageBox->setColor(kTextColorEm); } @@ -224,18 +229,19 @@ void DebuggerDialog::addRomArea() addToFocusList(myRam->getFocusList()); xpos = r.left + 10 + myCpu->getWidth() + 20; - DataGridOpsWidget* ops = new DataGridOpsWidget(this, xpos, 20); + DataGridOpsWidget* ops = new DataGridOpsWidget(this, instance()->consoleFont(), + xpos, 20); int buttonX = r.right - kButtonWidth - 5, buttonY = r.top + 5; - addButton(buttonX, buttonY, "Step", kDDStepCmd, 0); + addButton(instance()->consoleFont(), buttonX, buttonY, "Step", kDDStepCmd, 0); buttonY += 22; - addButton(buttonX, buttonY, "Trace", kDDTraceCmd, 0); + addButton(instance()->consoleFont(), buttonX, buttonY, "Trace", kDDTraceCmd, 0); buttonY += 22; - addButton(buttonX, buttonY, "Scan +1", kDDSAdvCmd, 0); + addButton(instance()->consoleFont(), buttonX, buttonY, "Scan +1", kDDSAdvCmd, 0); buttonY += 22; - addButton(buttonX, buttonY, "Frame +1", kDDAdvCmd, 0); + addButton(instance()->consoleFont(), buttonX, buttonY, "Frame +1", kDDAdvCmd, 0); buttonY += 22; - addButton(buttonX, buttonY, "Exit", kDDExitCmd, 0); + addButton(instance()->consoleFont(), buttonX, buttonY, "Exit", kDDExitCmd, 0); xpos = r.left + 10; ypos += myRam->getHeight() + 5; myRom = new RomWidget(this, instance()->consoleFont(), xpos, ypos); diff --git a/stella/src/debugger/gui/PromptWidget.cxx b/stella/src/debugger/gui/PromptWidget.cxx index e6d432394..3d9a563cd 100644 --- a/stella/src/debugger/gui/PromptWidget.cxx +++ b/stella/src/debugger/gui/PromptWidget.cxx @@ -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: PromptWidget.cxx,v 1.6 2006-01-15 20:46:19 stephena Exp $ +// $Id: PromptWidget.cxx,v 1.7 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -44,8 +44,9 @@ */ // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -PromptWidget::PromptWidget(GuiObject* boss, int x, int y, int w, int h) - : Widget(boss, x, y, w - kScrollBarWidth, h), +PromptWidget::PromptWidget(GuiObject* boss, const GUI::Font& font, + int x, int y, int w, int h) + : Widget(boss, font, x, y, w - kScrollBarWidth, h), CommandSender(boss), _makeDirty(false), _firstTime(true) @@ -54,8 +55,8 @@ PromptWidget::PromptWidget(GuiObject* boss, int x, int y, int w, int h) WIDGET_WANTS_TAB; _type = kPromptWidget; - _kConsoleCharWidth = instance()->consoleFont().getMaxCharWidth(); - _kConsoleCharHeight = instance()->consoleFont().getFontHeight(); + _kConsoleCharWidth = font.getMaxCharWidth(); + _kConsoleCharHeight = font.getFontHeight(); _kConsoleLineHeight = _kConsoleCharHeight + 2; // Calculate depending values @@ -70,7 +71,7 @@ PromptWidget::PromptWidget(GuiObject* boss, int x, int y, int w, int h) _firstLineInBuffer = 0; // Add scrollbar - _scrollBar = new ScrollBarWidget(boss, _x + _w, _y, kScrollBarWidth, _h); + _scrollBar = new ScrollBarWidget(boss, font, _x + _w, _y, kScrollBarWidth, _h); _scrollBar->setTarget(this); // Init colors diff --git a/stella/src/debugger/gui/PromptWidget.hxx b/stella/src/debugger/gui/PromptWidget.hxx index 86b5259da..edaae09fa 100644 --- a/stella/src/debugger/gui/PromptWidget.hxx +++ b/stella/src/debugger/gui/PromptWidget.hxx @@ -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: PromptWidget.hxx,v 1.3 2005-10-11 17:14:35 stephena Exp $ +// $Id: PromptWidget.hxx,v 1.4 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -41,7 +41,8 @@ enum { class PromptWidget : public Widget, public CommandSender { public: - PromptWidget(GuiObject* boss, int x, int y, int w, int h); + PromptWidget(GuiObject* boss, const GUI::Font& font, + int x, int y, int w, int h); virtual ~PromptWidget(); public: diff --git a/stella/src/debugger/gui/RamWidget.cxx b/stella/src/debugger/gui/RamWidget.cxx index 3836d935e..07439d2d5 100644 --- a/stella/src/debugger/gui/RamWidget.cxx +++ b/stella/src/debugger/gui/RamWidget.cxx @@ -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: RamWidget.cxx,v 1.2 2005-11-27 22:37:24 stephena Exp $ +// $Id: RamWidget.cxx,v 1.3 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -44,7 +44,7 @@ enum { // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - RamWidget::RamWidget(GuiObject* boss, const GUI::Font& font, int x, int y) - : Widget(boss, x, y, 16, 16), + : Widget(boss, font, x, y, 16, 16), CommandSender(boss), myUndoAddress(-1), myUndoValue(-1) @@ -55,7 +55,6 @@ RamWidget::RamWidget(GuiObject* boss, const GUI::Font& font, int x, int y) bwidth = 44, bheight = 16; int xpos, ypos, lwidth; - StaticTextWidget* t; // Create a 16x8 grid holding byte values (16 x 8 = 128 RAM bytes) with labels xpos = x; ypos = y + lineHeight; lwidth = 4 * fontWidth; @@ -66,27 +65,27 @@ RamWidget::RamWidget(GuiObject* boss, const GUI::Font& font, int x, int y) // Create actions buttons to the left of the RAM grid xpos += lwidth + myRamGrid->getWidth() + 4; - myUndoButton = new ButtonWidget(boss, xpos, ypos, bwidth, bheight, + myUndoButton = new ButtonWidget(boss, font, xpos, ypos, bwidth, bheight, "Undo", kUndoCmd, 0); myUndoButton->setTarget(this); ypos += bheight + bheight/2; - myRevertButton = new ButtonWidget(boss, xpos, ypos, bwidth, bheight, + myRevertButton = new ButtonWidget(boss, font, xpos, ypos, bwidth, bheight, "Revert", kRevertCmd, 0); myRevertButton->setTarget(this); ypos += 2 * bheight + 2; - mySearchButton = new ButtonWidget(boss, xpos, ypos, bwidth, bheight, + mySearchButton = new ButtonWidget(boss, font, xpos, ypos, bwidth, bheight, "Search", kSearchCmd, 0); mySearchButton->setTarget(this); ypos += bheight + bheight/2; - myCompareButton = new ButtonWidget(boss, xpos, ypos, bwidth, bheight, + myCompareButton = new ButtonWidget(boss, font, xpos, ypos, bwidth, bheight, "Compare", kCmpCmd, 0); myCompareButton->setTarget(this); ypos += bheight + bheight/2; - myRestartButton = new ButtonWidget(boss, xpos, ypos, bwidth, bheight, + myRestartButton = new ButtonWidget(boss, font, xpos, ypos, bwidth, bheight, "Reset", kRestartCmd, 0); myRestartButton->setTarget(this); @@ -94,50 +93,43 @@ RamWidget::RamWidget(GuiObject* boss, const GUI::Font& font, int x, int y) xpos = x; ypos = y + lineHeight; for(int row = 0; row < 8; ++row) { - t = new StaticTextWidget(boss, xpos-2, ypos + row*lineHeight + 2, - lwidth-2, fontHeight, - Debugger::to_hex_8(row*16 + kRamStart) + string(":"), - kTextAlignLeft); - t->setFont(font); + new StaticTextWidget(boss, font, xpos-2, ypos + row*lineHeight + 2, + lwidth-2, fontHeight, + Debugger::to_hex_8(row*16 + kRamStart) + string(":"), + kTextAlignLeft); } for(int col = 0; col < 16; ++col) { - t = new StaticTextWidget(boss, xpos + col*myRamGrid->colWidth() + lwidth + 8, - ypos - lineHeight, - fontWidth, fontHeight, - Debugger::to_hex_4(col), - kTextAlignLeft); - t->setFont(font); + new StaticTextWidget(boss, font, xpos + col*myRamGrid->colWidth() + lwidth + 8, + ypos - lineHeight, + fontWidth, fontHeight, + Debugger::to_hex_4(col), + kTextAlignLeft); } xpos = x + 10; ypos += 9 * lineHeight; - t = new StaticTextWidget(boss, xpos, ypos, - 6*fontWidth, fontHeight, - "Label:", kTextAlignLeft); - t->setFont(font); + new StaticTextWidget(boss, font, xpos, ypos, + 6*fontWidth, fontHeight, + "Label:", kTextAlignLeft); xpos += 6*fontWidth + 5; - myLabel = new EditTextWidget(boss, xpos, ypos-2, 17*fontWidth, lineHeight, ""); - myLabel->setFont(font); + myLabel = new EditTextWidget(boss, font, xpos, ypos-2, 17*fontWidth, + lineHeight, ""); myLabel->setEditable(false); xpos += 17*fontWidth + 20; - t = new StaticTextWidget(boss, xpos, ypos, - 4*fontWidth, fontHeight, - "Dec:", kTextAlignLeft); - t->setFont(font); + new StaticTextWidget(boss, font, xpos, ypos, 4*fontWidth, fontHeight, + "Dec:", kTextAlignLeft); xpos += 4*fontWidth + 5; - myDecValue = new EditTextWidget(boss, xpos, ypos-2, 4*fontWidth, lineHeight, ""); - myDecValue->setFont(font); + myDecValue = new EditTextWidget(boss, font, xpos, ypos-2, 4*fontWidth, + lineHeight, ""); myDecValue->setEditable(false); xpos += 4*fontWidth + 20; - t = new StaticTextWidget(boss, xpos, ypos, - 4*fontWidth, fontHeight, - "Bin:", kTextAlignLeft); - t->setFont(font); + new StaticTextWidget(boss, font, xpos, ypos, 4*fontWidth, fontHeight, + "Bin:", kTextAlignLeft); xpos += 4*fontWidth + 5; - myBinValue = new EditTextWidget(boss, xpos, ypos-2, 9*fontWidth, lineHeight, ""); - myBinValue->setFont(font); + myBinValue = new EditTextWidget(boss, font, xpos, ypos-2, 9*fontWidth, + lineHeight, ""); myBinValue->setEditable(false); // Calculate real dimensions diff --git a/stella/src/debugger/gui/RomListWidget.cxx b/stella/src/debugger/gui/RomListWidget.cxx index 59172edec..db4bc5f02 100644 --- a/stella/src/debugger/gui/RomListWidget.cxx +++ b/stella/src/debugger/gui/RomListWidget.cxx @@ -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: RomListWidget.cxx,v 1.4 2005-09-07 18:34:52 stephena Exp $ +// $Id: RomListWidget.cxx,v 1.5 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -29,7 +29,6 @@ RomListWidget::RomListWidget(GuiObject* boss, const GUI::Font& font, myMenu(NULL), myHighlightedItem(-1) { - setFont(font); myMenu = new ContextMenu(this, font); StringList l; @@ -96,7 +95,7 @@ void RomListWidget::drawWidget(bool hilite) _checkList[i]->setDirty(); _checkList[i]->draw(); - const int y = _y + 2 + _rowHeight * i; + const int y = _y + 2 + _fontHeight * i; GUI::Rect l = getLineRect(); GUI::Rect r = getEditRect(); @@ -104,8 +103,8 @@ void RomListWidget::drawWidget(bool hilite) // Draw highlighted item in a frame if (_highlightedItem == pos) { - fb.frameRect(_x + l.left - 3, _y + 1 + _rowHeight * i, - _w - l.left, _rowHeight, + fb.frameRect(_x + l.left - 3, _y + 1 + _fontHeight * i, + _w - l.left, _fontHeight, kHiliteColor); } @@ -113,12 +112,12 @@ void RomListWidget::drawWidget(bool hilite) if (_selectedItem == pos && _hasFocus) { if (!_editMode) - fb.fillRect(_x + r.left - 3, _y + 1 + _rowHeight * i, - r.width(), _rowHeight, + fb.fillRect(_x + r.left - 3, _y + 1 + _fontHeight * i, + r.width(), _fontHeight, kTextColorHi); else - fb.frameRect(_x + r.left - 3, _y + 1 + _rowHeight * i, - r.width(), _rowHeight, + fb.frameRect(_x + r.left - 3, _y + 1 + _fontHeight * i, + r.width(), _fontHeight, kTextColorHi); } @@ -156,8 +155,8 @@ void RomListWidget::drawWidget(bool hilite) // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GUI::Rect RomListWidget::getLineRect() const { - GUI::Rect r(2, 1, _w, _rowHeight); - const int yoffset = (_selectedItem - _currentPos) * _rowHeight, + GUI::Rect r(2, 1, _w, _fontHeight); + const int yoffset = (_selectedItem - _currentPos) * _fontHeight, xoffset = CheckboxWidget::boxSize() + 10; r.top += yoffset; r.bottom += yoffset; @@ -170,8 +169,8 @@ GUI::Rect RomListWidget::getLineRect() const // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GUI::Rect RomListWidget::getEditRect() const { - GUI::Rect r(2, 1, _w, _rowHeight); - const int yoffset = (_selectedItem - _currentPos) * _rowHeight, + GUI::Rect r(2, 1, _w, _fontHeight); + const int yoffset = (_selectedItem - _currentPos) * _fontHeight, xoffset = CheckboxWidget::boxSize() + 10; r.top += yoffset; r.bottom += yoffset; diff --git a/stella/src/debugger/gui/RomWidget.cxx b/stella/src/debugger/gui/RomWidget.cxx index 273fed1f7..5f8785f0b 100644 --- a/stella/src/debugger/gui/RomWidget.cxx +++ b/stella/src/debugger/gui/RomWidget.cxx @@ -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: RomWidget.cxx,v 1.15 2005-11-27 22:37:24 stephena Exp $ +// $Id: RomWidget.cxx,v 1.16 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -39,7 +39,7 @@ enum { // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - RomWidget::RomWidget(GuiObject* boss, const GUI::Font& font, int x, int y) - : Widget(boss, x, y, 16, 16), + : Widget(boss, font, x, y, 16, 16), CommandSender(boss), myListIsDirty(true), mySourceAvailable(false), @@ -51,11 +51,10 @@ RomWidget::RomWidget(GuiObject* boss, const GUI::Font& font, int x, int y) // Create bank editable area xpos = x + 40; ypos = y + 7; - t = new StaticTextWidget(boss, xpos, ypos, + t = new StaticTextWidget(boss, font, xpos, ypos, font.getStringWidth("Current bank: "), font.getFontHeight(), "Current bank:", kTextAlignLeft); - t->setFont(font); xpos += t->getWidth() + 10; myBank = new DataGridWidget(boss, font, xpos, ypos-2, @@ -68,16 +67,14 @@ RomWidget::RomWidget(GuiObject* boss, const GUI::Font& font, int x, int y) // Show number of banks xpos += myBank->getWidth() + 45; - t = new StaticTextWidget(boss, xpos, ypos, + t = new StaticTextWidget(boss, font, xpos, ypos, font.getStringWidth("Total banks: "), font.getFontHeight(), "Total banks:", kTextAlignLeft); - t->setFont(font); xpos += t->getWidth() + 10; - myBankCount = new EditTextWidget(boss, xpos, ypos-2, + myBankCount = new EditTextWidget(boss, font, xpos, ypos-2, 20, font.getLineHeight(), ""); - myBankCount->setFont(font); myBankCount->setEditable(false); // Create rom listing diff --git a/stella/src/debugger/gui/TiaInfoWidget.cxx b/stella/src/debugger/gui/TiaInfoWidget.cxx index 8df36206d..10b043014 100644 --- a/stella/src/debugger/gui/TiaInfoWidget.cxx +++ b/stella/src/debugger/gui/TiaInfoWidget.cxx @@ -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: TiaInfoWidget.cxx,v 1.3 2005-09-06 22:25:40 stephena Exp $ +// $Id: TiaInfoWidget.cxx,v 1.4 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -30,63 +30,63 @@ #include "TiaInfoWidget.hxx" // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -TiaInfoWidget::TiaInfoWidget(GuiObject* boss, int x, int y) - : Widget(boss, x, y, 16, 16), +TiaInfoWidget::TiaInfoWidget(GuiObject* boss, const GUI::Font& font, + int x, int y) + : Widget(boss, font, x, y, 16, 16), CommandSender(boss) { - const GUI::Font& font = instance()->consoleFont(); const int lineHeight = font.getLineHeight(); int xpos = x, ypos = y, lwidth = 45; // Add frame info xpos = x; ypos = y + 10; - new StaticTextWidget(boss, xpos, ypos, lwidth, kLineHeight, "Frame:", kTextAlignLeft); + new StaticTextWidget(boss, font, xpos, ypos, lwidth, lineHeight, + "Frame:", kTextAlignLeft); xpos += lwidth; - myFrameCount = new EditTextWidget(boss, xpos, ypos-2, 45, lineHeight, ""); - myFrameCount->setFont(font); + myFrameCount = new EditTextWidget(boss, font, xpos, ypos-2, 45, lineHeight, ""); myFrameCount->setEditable(false); - xpos = x; ypos += kLineHeight + 5; - new StaticTextWidget(boss, xpos, ypos, lwidth, kLineHeight, "F. Cycles:", kTextAlignLeft); + xpos = x; ypos += lineHeight + 5; + new StaticTextWidget(boss, font, xpos, ypos, lwidth, lineHeight, + "F. Cycles:", kTextAlignLeft); xpos += lwidth; - myFrameCycles = new EditTextWidget(boss, xpos, ypos-2, 45, lineHeight, ""); - myFrameCycles->setFont(font); + myFrameCycles = new EditTextWidget(boss, font, xpos, ypos-2, 45, lineHeight, ""); myFrameCycles->setEditable(false); - xpos = x + 10; ypos += kLineHeight + 5; - myVSync = new CheckboxWidget(boss, instance()->font(), xpos, ypos-3, "VSync", 0); + xpos = x + 10; ypos += lineHeight + 5; + myVSync = new CheckboxWidget(boss, font, xpos, ypos-3, "VSync", 0); myVSync->setEditable(false); - xpos = x + 10; ypos += kLineHeight + 5; - myVBlank = new CheckboxWidget(boss, instance()->font(), xpos, ypos-3, "VBlank", 0); + xpos = x + 10; ypos += lineHeight + 5; + myVBlank = new CheckboxWidget(boss, font, xpos, ypos-3, "VBlank", 0); myVBlank->setEditable(false); xpos = x + 100; ypos = y + 10; - new StaticTextWidget(boss, xpos, ypos, lwidth, kLineHeight, "Scanline:", kTextAlignLeft); + new StaticTextWidget(boss, font, xpos, ypos, lwidth, lineHeight, + "Scanline:", kTextAlignLeft); xpos += lwidth; - myScanlineCount = new EditTextWidget(boss, xpos, ypos-2, 30, lineHeight, ""); - myScanlineCount->setFont(font); + myScanlineCount = new EditTextWidget(boss, font, xpos, ypos-2, 30, lineHeight, ""); myScanlineCount->setEditable(false); - xpos = x + 100; ypos += kLineHeight + 5; - new StaticTextWidget(boss, xpos, ypos, lwidth, kLineHeight, "S. Cycles:", kTextAlignLeft); + xpos = x + 100; ypos += lineHeight + 5; + new StaticTextWidget(boss, font, xpos, ypos, lwidth, lineHeight, + "S. Cycles:", kTextAlignLeft); xpos += lwidth; - myScanlineCycles = new EditTextWidget(boss, xpos, ypos-2, 30, lineHeight, ""); - myScanlineCycles->setFont(font); + myScanlineCycles = new EditTextWidget(boss, font, xpos, ypos-2, 30, lineHeight, ""); myScanlineCycles->setEditable(false); - xpos = x + 100; ypos += kLineHeight + 5; - new StaticTextWidget(boss, xpos, ypos, lwidth, kLineHeight, "Pixel Pos:", kTextAlignLeft); + xpos = x + 100; ypos += lineHeight + 5; + new StaticTextWidget(boss, font, xpos, ypos, lwidth, lineHeight, + "Pixel Pos:", kTextAlignLeft); xpos += lwidth; - myPixelPosition = new EditTextWidget(boss, xpos, ypos-2, 30, lineHeight, ""); - myPixelPosition->setFont(font); + myPixelPosition = new EditTextWidget(boss, font, xpos, ypos-2, 30, lineHeight, ""); myPixelPosition->setEditable(false); - xpos = x + 100; ypos += kLineHeight + 5; - new StaticTextWidget(boss, xpos, ypos, lwidth, kLineHeight, "Color Clk:", kTextAlignLeft); + xpos = x + 100; ypos += lineHeight + 5; + new StaticTextWidget(boss, font, xpos, ypos, lwidth, lineHeight, + "Color Clk:", kTextAlignLeft); xpos += lwidth; - myColorClocks = new EditTextWidget(boss, xpos, ypos-2, 30, lineHeight, ""); - myColorClocks->setFont(font); + myColorClocks = new EditTextWidget(boss, font, xpos, ypos-2, 30, lineHeight, ""); myColorClocks->setEditable(false); // Calculate actual dimensions diff --git a/stella/src/debugger/gui/TiaInfoWidget.hxx b/stella/src/debugger/gui/TiaInfoWidget.hxx index 0a85e6fb0..acd0dc335 100644 --- a/stella/src/debugger/gui/TiaInfoWidget.hxx +++ b/stella/src/debugger/gui/TiaInfoWidget.hxx @@ -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: TiaInfoWidget.hxx,v 1.2 2005-08-31 19:15:10 stephena Exp $ +// $Id: TiaInfoWidget.hxx,v 1.3 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -32,7 +32,7 @@ class EditTextWidget; class TiaInfoWidget : public Widget, public CommandSender { public: - TiaInfoWidget(GuiObject *boss, int x, int y); + TiaInfoWidget(GuiObject *boss, const GUI::Font& font, int x, int y); virtual ~TiaInfoWidget(); void loadConfig(); diff --git a/stella/src/debugger/gui/TiaOutputWidget.cxx b/stella/src/debugger/gui/TiaOutputWidget.cxx index bc3cb3eb1..682aa17ce 100644 --- a/stella/src/debugger/gui/TiaOutputWidget.cxx +++ b/stella/src/debugger/gui/TiaOutputWidget.cxx @@ -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: TiaOutputWidget.cxx,v 1.8 2006-01-15 20:46:19 stephena Exp $ +// $Id: TiaOutputWidget.cxx,v 1.9 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -34,14 +34,15 @@ #include "TiaOutputWidget.hxx" // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -TiaOutputWidget::TiaOutputWidget(GuiObject* boss, int x, int y, int w, int h) - : Widget(boss, x, y, w, h), +TiaOutputWidget::TiaOutputWidget(GuiObject* boss, const GUI::Font& font, + int x, int y, int w, int h) + : Widget(boss, font, x, y, w, h), CommandSender(boss), myMenu(NULL), myZoom(NULL) { // Create context menu for commands - myMenu = new ContextMenu(this, instance()->consoleFont()); + myMenu = new ContextMenu(this, font); StringList l; l.push_back("Fill to scanline"); diff --git a/stella/src/debugger/gui/TiaOutputWidget.hxx b/stella/src/debugger/gui/TiaOutputWidget.hxx index 8c935e74d..9f76380b6 100644 --- a/stella/src/debugger/gui/TiaOutputWidget.hxx +++ b/stella/src/debugger/gui/TiaOutputWidget.hxx @@ -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: TiaOutputWidget.hxx,v 1.2 2005-08-31 22:34:43 stephena Exp $ +// $Id: TiaOutputWidget.hxx,v 1.3 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -33,7 +33,8 @@ class TiaZoomWidget; class TiaOutputWidget : public Widget, public CommandSender { public: - TiaOutputWidget(GuiObject *boss, int x, int y, int w, int h); + TiaOutputWidget(GuiObject *boss, const GUI::Font& font, + int x, int y, int w, int h); virtual ~TiaOutputWidget(); void loadConfig(); diff --git a/stella/src/debugger/gui/TiaWidget.cxx b/stella/src/debugger/gui/TiaWidget.cxx index 2607f97f5..8d033da94 100644 --- a/stella/src/debugger/gui/TiaWidget.cxx +++ b/stella/src/debugger/gui/TiaWidget.cxx @@ -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: TiaWidget.cxx,v 1.1 2005-08-30 17:51:26 stephena Exp $ +// $Id: TiaWidget.cxx,v 1.2 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -81,11 +81,11 @@ enum { }; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -TiaWidget::TiaWidget(GuiObject* boss, int x, int y, int w, int h) - : Widget(boss, x, y, w, h), +TiaWidget::TiaWidget(GuiObject* boss, const GUI::Font& font, + int x, int y, int w, int h) + : Widget(boss, font, x, y, w, h), CommandSender(boss) { - const GUI::Font& font = instance()->consoleFont(); const int fontWidth = font.getMaxCharWidth(), fontHeight = font.getFontHeight(), lineHeight = font.getLineHeight(); @@ -100,48 +100,40 @@ TiaWidget::TiaWidget(GuiObject* boss, int x, int y, int w, int h) myRamGrid->setID(kRamID); addFocusWidget(myRamGrid); - t = new StaticTextWidget(boss, xpos, ypos + 2, + t = new StaticTextWidget(boss, font, xpos, ypos + 2, lwidth-2, fontHeight, "00:", kTextAlignLeft); - t->setFont(font); for(int col = 0; col < 16; ++col) { - t = new StaticTextWidget(boss, xpos + col*myRamGrid->colWidth() + lwidth + 7, + t = new StaticTextWidget(boss, font, xpos + col*myRamGrid->colWidth() + lwidth + 7, ypos - lineHeight, fontWidth, fontHeight, Debugger::to_hex_4(col), kTextAlignLeft); - t->setFont(font); } xpos = 20; ypos += 2 * lineHeight; - t = new StaticTextWidget(boss, xpos, ypos, - 6*fontWidth, fontHeight, + t = new StaticTextWidget(boss, font, xpos, ypos, 6*fontWidth, fontHeight, "Label:", kTextAlignLeft); - t->setFont(font); xpos += 6*fontWidth + 5; - myLabel = new EditTextWidget(boss, xpos, ypos-2, 15*fontWidth, lineHeight, ""); - myLabel->setFont(font); + myLabel = new EditTextWidget(boss, font, xpos, ypos-2, 15*fontWidth, + lineHeight, ""); myLabel->setEditable(false); xpos += 15*fontWidth + 20; - t = new StaticTextWidget(boss, xpos, ypos, - 4*fontWidth, fontHeight, + t = new StaticTextWidget(boss, font, xpos, ypos, 4*fontWidth, fontHeight, "Dec:", kTextAlignLeft); - t->setFont(font); xpos += 4*fontWidth + 5; - myDecValue = new EditTextWidget(boss, xpos, ypos-2, 4*fontWidth, lineHeight, ""); - myDecValue->setFont(font); + myDecValue = new EditTextWidget(boss, font, xpos, ypos-2, 4*fontWidth, + lineHeight, ""); myDecValue->setEditable(false); xpos += 4*fontWidth + 20; - t = new StaticTextWidget(boss, xpos, ypos, - 4*fontWidth, fontHeight, + t = new StaticTextWidget(boss, font, xpos, ypos, 4*fontWidth, fontHeight, "Bin:", kTextAlignLeft); - t->setFont(font); xpos += 4*fontWidth + 5; - myBinValue = new EditTextWidget(boss, xpos, ypos-2, 9*fontWidth, lineHeight, ""); - myBinValue->setFont(font); + myBinValue = new EditTextWidget(boss, font, xpos, ypos-2, 9*fontWidth, + lineHeight, ""); myBinValue->setEditable(false); // Color registers @@ -149,11 +141,10 @@ TiaWidget::TiaWidget(GuiObject* boss, int x, int y, int w, int h) xpos = 10; ypos += 3*lineHeight; for(int row = 0; row < 4; ++row) { - t = new StaticTextWidget(boss, xpos, ypos + row*lineHeight + 2, + t = new StaticTextWidget(boss, font, xpos, ypos + row*lineHeight + 2, 7*fontWidth, fontHeight, regNames[row], kTextAlignLeft); - t->setFont(font); } xpos += 7*fontWidth + 5; myColorRegs = new DataGridWidget(boss, font, xpos, ypos, @@ -163,19 +154,19 @@ TiaWidget::TiaWidget(GuiObject* boss, int x, int y, int w, int h) addFocusWidget(myColorRegs); xpos += myColorRegs->colWidth() + 5; - myCOLUP0Color = new ColorWidget(boss, xpos, ypos+2, 20, lineHeight - 4); + myCOLUP0Color = new ColorWidget(boss, font, xpos, ypos+2, 20, lineHeight - 4); myCOLUP0Color->setTarget(this); ypos += lineHeight; - myCOLUP1Color = new ColorWidget(boss, xpos, ypos+2, 20, lineHeight - 4); + myCOLUP1Color = new ColorWidget(boss, font, xpos, ypos+2, 20, lineHeight - 4); myCOLUP1Color->setTarget(this); ypos += lineHeight; - myCOLUPFColor = new ColorWidget(boss, xpos, ypos+2, 20, lineHeight - 4); + myCOLUPFColor = new ColorWidget(boss, font, xpos, ypos+2, 20, lineHeight - 4); myCOLUPFColor->setTarget(this); ypos += lineHeight; - myCOLUBKColor = new ColorWidget(boss, xpos, ypos+2, 20, lineHeight - 4); + myCOLUBKColor = new ColorWidget(boss, font, xpos, ypos+2, 20, lineHeight - 4); myCOLUBKColor->setTarget(this); //////////////////////////// @@ -183,26 +174,22 @@ TiaWidget::TiaWidget(GuiObject* boss, int x, int y, int w, int h) //////////////////////////// // Add horizontal labels xpos += myCOLUBKColor->getWidth() + 2*fontWidth + 30; ypos -= 4*lineHeight + 5; - t = new StaticTextWidget(boss, xpos, ypos, - 14*fontWidth, fontHeight, - "PF BL M1 M0 P1", kTextAlignLeft); - t->setFont(font); + t = new StaticTextWidget(boss, font, xpos, ypos, 14*fontWidth, fontHeight, + "PF BL M1 M0 P1", kTextAlignLeft); // Add label for Strobes; buttons will be added later - t = new StaticTextWidget(boss, xpos + t->getWidth() + 9*fontWidth, ypos, + t = new StaticTextWidget(boss, font, xpos + t->getWidth() + 9*fontWidth, ypos, 8*fontWidth, fontHeight, "Strobes:", kTextAlignLeft); - t->setFont(font); // Add vertical labels xpos -= 2*fontWidth + 5; ypos += lineHeight; const char* collLabel[] = { "P0", "P1", "M0", "M1", "BL" }; for(int row = 0; row < 5; ++row) { - t = new StaticTextWidget(boss, xpos, ypos + row*(lineHeight+3), + t = new StaticTextWidget(boss, font, xpos, ypos + row*(lineHeight+3), 2*fontWidth, fontHeight, collLabel[row], kTextAlignLeft); - t->setFont(font); } // Finally, add all 15 collision bits @@ -214,7 +201,6 @@ TiaWidget::TiaWidget(GuiObject* boss, int x, int y, int w, int h) { myCollision[idx] = new CheckboxWidget(boss, font, collX, collY, "", kCheckActionCmd); - myCollision[idx]->setFont(font); myCollision[idx]->setTarget(this); myCollision[idx]->setID(idx); // TODO - make collisions editable in TIA // @@ -235,52 +221,52 @@ TiaWidget::TiaWidget(GuiObject* boss, int x, int y, int w, int h) ButtonWidget* b; unsigned int buttonX, buttonY; buttonX = collX + 20*fontWidth; buttonY = ypos; - b = new ButtonWidget(boss, buttonX, buttonY, 50, lineHeight, + b = new ButtonWidget(boss, font, buttonX, buttonY, 50, lineHeight, "WSync", kWsyncCmd); b->setTarget(this); buttonY += lineHeight + 3; - b = new ButtonWidget(boss, buttonX, buttonY, 50, lineHeight, + b = new ButtonWidget(boss, font, buttonX, buttonY, 50, lineHeight, "ResP0", kResP0Cmd); b->setTarget(this); buttonY += lineHeight + 3; - b = new ButtonWidget(boss, buttonX, buttonY, 50, lineHeight, + b = new ButtonWidget(boss, font, buttonX, buttonY, 50, lineHeight, "ResM0", kResM0Cmd); b->setTarget(this); buttonY += lineHeight + 3; - b = new ButtonWidget(boss, buttonX, buttonY, 50, lineHeight, + b = new ButtonWidget(boss, font, buttonX, buttonY, 50, lineHeight, "ResBL", kResBLCmd); b->setTarget(this); buttonY += lineHeight + 3; - b = new ButtonWidget(boss, buttonX, buttonY, 50, lineHeight, + b = new ButtonWidget(boss, font, buttonX, buttonY, 50, lineHeight, "HmClr", kHmclrCmd); b->setTarget(this); buttonX += 50 + 10; buttonY = ypos; - b = new ButtonWidget(boss, buttonX, buttonY, 50, lineHeight, + b = new ButtonWidget(boss, font, buttonX, buttonY, 50, lineHeight, "RSync", kRsyncCmd); b->setTarget(this); buttonY += lineHeight + 3; - b = new ButtonWidget(boss, buttonX, buttonY, 50, lineHeight, + b = new ButtonWidget(boss, font, buttonX, buttonY, 50, lineHeight, "ResP1", kResP1Cmd); b->setTarget(this); buttonY += lineHeight + 3; - b = new ButtonWidget(boss, buttonX, buttonY, 50, lineHeight, + b = new ButtonWidget(boss, font, buttonX, buttonY, 50, lineHeight, "ResM1", kResM1Cmd); b->setTarget(this); buttonY += lineHeight + 3; - b = new ButtonWidget(boss, buttonX, buttonY, 50, lineHeight, + b = new ButtonWidget(boss, font, buttonX, buttonY, 50, lineHeight, "HMove", kHmoveCmd); b->setTarget(this); buttonY += lineHeight + 3; - b = new ButtonWidget(boss, buttonX, buttonY, 50, lineHeight, + b = new ButtonWidget(boss, font, buttonX, buttonY, 50, lineHeight, "CxClr", kCxclrCmd); b->setTarget(this); @@ -300,22 +286,20 @@ TiaWidget::TiaWidget(GuiObject* boss, int x, int y, int w, int h) //////////////////////////// // grP0 xpos = 10; ypos = 13*lineHeight; - t = new StaticTextWidget(boss, xpos, ypos+2, + t = new StaticTextWidget(boss, font, xpos, ypos+2, 7*fontWidth, fontHeight, "P0: GR:", kTextAlignLeft); - t->setFont(font); xpos += 7*fontWidth + 5; - myGRP0 = new TogglePixelWidget(boss, xpos, ypos+2, 8, 1); + myGRP0 = new TogglePixelWidget(boss, font, xpos, ypos+2, 8, 1); myGRP0->setTarget(this); myGRP0->setID(kGRP0ID); addFocusWidget(myGRP0); // posP0 xpos += myGRP0->getWidth() + 8; - t = new StaticTextWidget(boss, xpos, ypos+2, + t = new StaticTextWidget(boss, font, xpos, ypos+2, 4*fontWidth, fontHeight, "Pos:", kTextAlignLeft); - t->setFont(font); xpos += 4*fontWidth + 5; myPosP0 = new DataGridWidget(boss, font, xpos, ypos, 1, 1, 2, 8, kBASE_16); @@ -325,10 +309,9 @@ TiaWidget::TiaWidget(GuiObject* boss, int x, int y, int w, int h) // hmP0 xpos += myPosP0->getWidth() + 8; - t = new StaticTextWidget(boss, xpos, ypos+2, + t = new StaticTextWidget(boss, font, xpos, ypos+2, 3*fontWidth, fontHeight, "HM:", kTextAlignLeft); - t->setFont(font); xpos += 3*fontWidth + 5; myHMP0 = new DataGridWidget(boss, font, xpos, ypos, 1, 1, 1, 4, kBASE_16_4); @@ -340,7 +323,6 @@ TiaWidget::TiaWidget(GuiObject* boss, int x, int y, int w, int h) xpos += myHMP0->getWidth() + 15; myRefP0 = new CheckboxWidget(boss, font, xpos, ypos+1, "Reflect", kCheckActionCmd); - myRefP0->setFont(font); myRefP0->setTarget(this); myRefP0->setID(kRefP0ID); addFocusWidget(myRefP0); @@ -348,17 +330,15 @@ TiaWidget::TiaWidget(GuiObject* boss, int x, int y, int w, int h) xpos += myRefP0->getWidth() + 15; myDelP0 = new CheckboxWidget(boss, font, xpos, ypos+1, "Delay", kCheckActionCmd); - myDelP0->setFont(font); myDelP0->setTarget(this); myDelP0->setID(kDelP0ID); addFocusWidget(myDelP0); // NUSIZ0 (player portion) xpos = 10 + lwidth; ypos += myGRP0->getHeight() + 5; - t = new StaticTextWidget(boss, xpos, ypos+2, + t = new StaticTextWidget(boss, font, xpos, ypos+2, 8*fontWidth, fontHeight, "NusizP0:", kTextAlignLeft); - t->setFont(font); xpos += 8*fontWidth + 5; myNusizP0 = new DataGridWidget(boss, font, xpos, ypos, 1, 1, 1, 3, kBASE_16_4); @@ -367,8 +347,8 @@ TiaWidget::TiaWidget(GuiObject* boss, int x, int y, int w, int h) addFocusWidget(myNusizP0); xpos += myNusizP0->getWidth() + 5; - myNusizP0Text = new EditTextWidget(boss, xpos, ypos+1, 23*fontWidth, lineHeight, ""); - myNusizP0Text->setFont(font); + myNusizP0Text = new EditTextWidget(boss, font, xpos, ypos+1, 23*fontWidth, + lineHeight, ""); myNusizP0Text->setEditable(false); //////////////////////////// @@ -376,22 +356,18 @@ TiaWidget::TiaWidget(GuiObject* boss, int x, int y, int w, int h) //////////////////////////// // grP1 xpos = 10; ypos += 2*lineHeight; - t = new StaticTextWidget(boss, xpos, ypos+2, - 7*fontWidth, fontHeight, + t = new StaticTextWidget(boss, font, xpos, ypos+2, 7*fontWidth, fontHeight, "P1: GR:", kTextAlignLeft); - t->setFont(font); xpos += 7*fontWidth + 5; - myGRP1 = new TogglePixelWidget(boss, xpos, ypos+2, 8, 1); + myGRP1 = new TogglePixelWidget(boss, font, xpos, ypos+2, 8, 1); myGRP1->setTarget(this); myGRP1->setID(kGRP1ID); addFocusWidget(myGRP1); // posP1 xpos += myGRP1->getWidth() + 8; - t = new StaticTextWidget(boss, xpos, ypos+2, - 4*fontWidth, fontHeight, + t = new StaticTextWidget(boss, font, xpos, ypos+2, 4*fontWidth, fontHeight, "Pos:", kTextAlignLeft); - t->setFont(font); xpos += 4*fontWidth + 5; myPosP1 = new DataGridWidget(boss, font, xpos, ypos, 1, 1, 2, 8, kBASE_16); @@ -401,10 +377,8 @@ TiaWidget::TiaWidget(GuiObject* boss, int x, int y, int w, int h) // hmP1 xpos += myPosP1->getWidth() + 8; - t = new StaticTextWidget(boss, xpos, ypos+2, - 3*fontWidth, fontHeight, + t = new StaticTextWidget(boss, font, xpos, ypos+2, 3*fontWidth, fontHeight, "HM:", kTextAlignLeft); - t->setFont(font); xpos += 3*fontWidth + 5; myHMP1 = new DataGridWidget(boss, font, xpos, ypos, 1, 1, 1, 4, kBASE_16_4); @@ -416,7 +390,6 @@ TiaWidget::TiaWidget(GuiObject* boss, int x, int y, int w, int h) xpos += myHMP1->getWidth() + 15; myRefP1 = new CheckboxWidget(boss, font, xpos, ypos+1, "Reflect", kCheckActionCmd); - myRefP1->setFont(font); myRefP1->setTarget(this); myRefP1->setID(kRefP1ID); addFocusWidget(myRefP1); @@ -424,17 +397,14 @@ TiaWidget::TiaWidget(GuiObject* boss, int x, int y, int w, int h) xpos += myRefP1->getWidth() + 15; myDelP1 = new CheckboxWidget(boss, font, xpos, ypos+1, "Delay", kCheckActionCmd); - myDelP1->setFont(font); myDelP1->setTarget(this); myDelP1->setID(kDelP1ID); addFocusWidget(myDelP1); // NUSIZ1 (player portion) xpos = 10 + lwidth; ypos += myGRP1->getHeight() + 5; - t = new StaticTextWidget(boss, xpos, ypos+2, - 8*fontWidth, fontHeight, + t = new StaticTextWidget(boss, font, xpos, ypos+2, 8*fontWidth, fontHeight, "NusizP1:", kTextAlignLeft); - t->setFont(font); xpos += 8*fontWidth + 5; myNusizP1 = new DataGridWidget(boss, font, xpos, ypos, 1, 1, 1, 3, kBASE_16_4); @@ -443,8 +413,8 @@ TiaWidget::TiaWidget(GuiObject* boss, int x, int y, int w, int h) addFocusWidget(myNusizP1); xpos += myNusizP1->getWidth() + 5; - myNusizP1Text = new EditTextWidget(boss, xpos, ypos+1, 23*fontWidth, lineHeight, ""); - myNusizP1Text->setFont(font); + myNusizP1Text = new EditTextWidget(boss, font, xpos, ypos+1, 23*fontWidth, + lineHeight, ""); myNusizP1Text->setEditable(false); //////////////////////////// @@ -452,24 +422,19 @@ TiaWidget::TiaWidget(GuiObject* boss, int x, int y, int w, int h) //////////////////////////// // enaM0 xpos = 10; ypos += 2*lineHeight; - t = new StaticTextWidget(boss, xpos, ypos+2, - 3*fontWidth, fontHeight, + t = new StaticTextWidget(boss, font, xpos, ypos+2, 3*fontWidth, fontHeight, "M0:", kTextAlignLeft); - t->setFont(font); xpos += 3*fontWidth + 8; myEnaM0 = new CheckboxWidget(boss, font, xpos, ypos+2, "Enable", kCheckActionCmd); - myEnaM0->setFont(font); myEnaM0->setTarget(this); myEnaM0->setID(kEnaM0ID); addFocusWidget(myEnaM0); // posM0 xpos += myEnaM0->getWidth() + 12; - t = new StaticTextWidget(boss, xpos, ypos+2, - 4*fontWidth, fontHeight, + t = new StaticTextWidget(boss, font, xpos, ypos+2, 4*fontWidth, fontHeight, "Pos:", kTextAlignLeft); - t->setFont(font); xpos += 4*fontWidth + 5; myPosM0 = new DataGridWidget(boss, font, xpos, ypos, 1, 1, 2, 8, kBASE_16); @@ -479,10 +444,8 @@ TiaWidget::TiaWidget(GuiObject* boss, int x, int y, int w, int h) // hmM0 xpos += myPosM0->getWidth() + 8; - t = new StaticTextWidget(boss, xpos, ypos+2, - 3*fontWidth, fontHeight, + t = new StaticTextWidget(boss, font, xpos, ypos+2, 3*fontWidth, fontHeight, "HM:", kTextAlignLeft); - t->setFont(font); xpos += 3*fontWidth + 5; myHMM0 = new DataGridWidget(boss, font, xpos, ypos, 1, 1, 1, 4, kBASE_16_4); @@ -492,10 +455,8 @@ TiaWidget::TiaWidget(GuiObject* boss, int x, int y, int w, int h) // NUSIZ0 (missile portion) xpos += myHMM0->getWidth() + 8; - t = new StaticTextWidget(boss, xpos, ypos+2, - 5*fontWidth, fontHeight, + t = new StaticTextWidget(boss, font, xpos, ypos+2, 5*fontWidth, fontHeight, "Size:", kTextAlignLeft); - t->setFont(font); xpos += 5*fontWidth + 5; myNusizM0 = new DataGridWidget(boss, font, xpos, ypos, 1, 1, 1, 2, kBASE_16_4); @@ -507,7 +468,6 @@ TiaWidget::TiaWidget(GuiObject* boss, int x, int y, int w, int h) xpos += myNusizM0->getWidth() + 15; myResMP0 = new CheckboxWidget(boss, font, xpos, ypos+1, "Reset", kCheckActionCmd); - myResMP0->setFont(font); myResMP0->setTarget(this); myResMP0->setID(kResMP0ID); addFocusWidget(myResMP0); @@ -517,24 +477,19 @@ TiaWidget::TiaWidget(GuiObject* boss, int x, int y, int w, int h) //////////////////////////// // enaM1 xpos = 10; ypos += 2*lineHeight; - t = new StaticTextWidget(boss, xpos, ypos+2, - 3*fontWidth, fontHeight, + t = new StaticTextWidget(boss, font, xpos, ypos+2, 3*fontWidth, fontHeight, "M1:", kTextAlignLeft); - t->setFont(font); xpos += 3*fontWidth + 8; myEnaM1 = new CheckboxWidget(boss, font, xpos, ypos+2, "Enable", kCheckActionCmd); - myEnaM1->setFont(font); myEnaM1->setTarget(this); myEnaM1->setID(kEnaM1ID); addFocusWidget(myEnaM1); // posM0 xpos += myEnaM1->getWidth() + 12; - t = new StaticTextWidget(boss, xpos, ypos+2, - 4*fontWidth, fontHeight, + t = new StaticTextWidget(boss, font, xpos, ypos+2, 4*fontWidth, fontHeight, "Pos:", kTextAlignLeft); - t->setFont(font); xpos += 4*fontWidth + 5; myPosM1 = new DataGridWidget(boss, font, xpos, ypos, 1, 1, 2, 8, kBASE_16); @@ -544,10 +499,8 @@ TiaWidget::TiaWidget(GuiObject* boss, int x, int y, int w, int h) // hmM0 xpos += myPosM1->getWidth() + 8; - t = new StaticTextWidget(boss, xpos, ypos+2, - 3*fontWidth, fontHeight, + t = new StaticTextWidget(boss, font, xpos, ypos+2, 3*fontWidth, fontHeight, "HM:", kTextAlignLeft); - t->setFont(font); xpos += 3*fontWidth + 5; myHMM1 = new DataGridWidget(boss, font, xpos, ypos, 1, 1, 1, 4, kBASE_16_4); @@ -557,10 +510,8 @@ TiaWidget::TiaWidget(GuiObject* boss, int x, int y, int w, int h) // NUSIZ1 (missile portion) xpos += myHMM1->getWidth() + 8; - t = new StaticTextWidget(boss, xpos, ypos+2, - 5*fontWidth, fontHeight, + t = new StaticTextWidget(boss, font, xpos, ypos+2, 5*fontWidth, fontHeight, "Size:", kTextAlignLeft); - t->setFont(font); xpos += 5*fontWidth + 5; myNusizM1 = new DataGridWidget(boss, font, xpos, ypos, 1, 1, 1, 2, kBASE_16_4); @@ -572,7 +523,6 @@ TiaWidget::TiaWidget(GuiObject* boss, int x, int y, int w, int h) xpos += myNusizM1->getWidth() + 15; myResMP1 = new CheckboxWidget(boss, font, xpos, ypos+1, "Reset", kCheckActionCmd); - myResMP1->setFont(font); myResMP1->setTarget(this); myResMP1->setID(kResMP1ID); addFocusWidget(myResMP1); @@ -582,24 +532,19 @@ TiaWidget::TiaWidget(GuiObject* boss, int x, int y, int w, int h) //////////////////////////// // enaBL xpos = 10; ypos += 2*lineHeight; - t = new StaticTextWidget(boss, xpos, ypos+2, - 3*fontWidth, fontHeight, + t = new StaticTextWidget(boss, font, xpos, ypos+2, 3*fontWidth, fontHeight, "BL:", kTextAlignLeft); - t->setFont(font); xpos += 3*fontWidth + 8; myEnaBL = new CheckboxWidget(boss, font, xpos, ypos+2, "Enable", kCheckActionCmd); - myEnaBL->setFont(font); myEnaBL->setTarget(this); myEnaBL->setID(kEnaBLID); addFocusWidget(myEnaBL); // posBL xpos += myEnaBL->getWidth() + 12; - t = new StaticTextWidget(boss, xpos, ypos+2, - 4*fontWidth, fontHeight, + t = new StaticTextWidget(boss, font, xpos, ypos+2, 4*fontWidth, fontHeight, "Pos:", kTextAlignLeft); - t->setFont(font); xpos += 4*fontWidth + 5; myPosBL = new DataGridWidget(boss, font, xpos, ypos, 1, 1, 2, 8, kBASE_16); @@ -609,10 +554,8 @@ TiaWidget::TiaWidget(GuiObject* boss, int x, int y, int w, int h) // hmBL xpos += myPosBL->getWidth() + 8; - t = new StaticTextWidget(boss, xpos, ypos+2, - 3*fontWidth, fontHeight, + t = new StaticTextWidget(boss, font, xpos, ypos+2, 3*fontWidth, fontHeight, "HM:", kTextAlignLeft); - t->setFont(font); xpos += 3*fontWidth + 5; myHMBL = new DataGridWidget(boss, font, xpos, ypos, 1, 1, 1, 4, kBASE_16_4); @@ -622,10 +565,8 @@ TiaWidget::TiaWidget(GuiObject* boss, int x, int y, int w, int h) // CTRLPF (size portion) xpos += myHMBL->getWidth() + 8; - t = new StaticTextWidget(boss, xpos, ypos+2, - 5*fontWidth, fontHeight, + t = new StaticTextWidget(boss, font, xpos, ypos+2, 5*fontWidth, fontHeight, "Size:", kTextAlignLeft); - t->setFont(font); xpos += 5*fontWidth + 5; mySizeBL = new DataGridWidget(boss, font, xpos, ypos, 1, 1, 1, 2, kBASE_16_4); @@ -637,7 +578,6 @@ TiaWidget::TiaWidget(GuiObject* boss, int x, int y, int w, int h) xpos += mySizeBL->getWidth() + 15; myDelBL = new CheckboxWidget(boss, font, xpos, ypos+1, "Delay", kCheckActionCmd); - myDelBL->setFont(font); myDelBL->setTarget(this); myDelBL->setID(kDelBLID); addFocusWidget(myDelBL); @@ -647,26 +587,24 @@ TiaWidget::TiaWidget(GuiObject* boss, int x, int y, int w, int h) //////////////////////////// // PF0 xpos = 10; ypos += 2*lineHeight; - t = new StaticTextWidget(boss, xpos, ypos+2, - 4*fontWidth, fontHeight, + t = new StaticTextWidget(boss, font, xpos, ypos+2, 4*fontWidth, fontHeight, "PF:", kTextAlignLeft); - t->setFont(font); xpos += 4*fontWidth; - myPF[0] = new TogglePixelWidget(boss, xpos, ypos+2, 4, 1); + myPF[0] = new TogglePixelWidget(boss, font, xpos, ypos+2, 4, 1); myPF[0]->setTarget(this); myPF[0]->setID(kPF0ID); addFocusWidget(myPF[0]); // PF1 xpos += myPF[0]->getWidth() + 2; - myPF[1] = new TogglePixelWidget(boss, xpos, ypos+2, 8, 1); + myPF[1] = new TogglePixelWidget(boss, font, xpos, ypos+2, 8, 1); myPF[1]->setTarget(this); myPF[1]->setID(kPF1ID); addFocusWidget(myPF[1]); // PF2 xpos += myPF[1]->getWidth() + 2; - myPF[2] = new TogglePixelWidget(boss, xpos, ypos+2, 8, 1); + myPF[2] = new TogglePixelWidget(boss, font, xpos, ypos+2, 8, 1); myPF[2]->setTarget(this); myPF[2]->setID(kPF2ID); addFocusWidget(myPF[2]); @@ -675,7 +613,6 @@ TiaWidget::TiaWidget(GuiObject* boss, int x, int y, int w, int h) xpos = 10 + 4*fontWidth; ypos += lineHeight + 2; myRefPF = new CheckboxWidget(boss, font, xpos, ypos+1, "Reflect", kCheckActionCmd); - myRefPF->setFont(font); myRefPF->setTarget(this); myRefPF->setID(kRefPFID); addFocusWidget(myRefPF); @@ -683,7 +620,6 @@ TiaWidget::TiaWidget(GuiObject* boss, int x, int y, int w, int h) xpos += myRefPF->getWidth() + 15; myScorePF = new CheckboxWidget(boss, font, xpos, ypos+1, "Score", kCheckActionCmd); - myScorePF->setFont(font); myScorePF->setTarget(this); myScorePF->setID(kScorePFID); addFocusWidget(myScorePF); @@ -691,7 +627,6 @@ TiaWidget::TiaWidget(GuiObject* boss, int x, int y, int w, int h) xpos += myScorePF->getWidth() + 15; myPriorityPF = new CheckboxWidget(boss, font, xpos, ypos+1, "Priority", kCheckActionCmd); - myPriorityPF->setFont(font); myPriorityPF->setTarget(this); myPriorityPF->setID(kPriorityPFID); addFocusWidget(myPriorityPF); diff --git a/stella/src/debugger/gui/TiaWidget.hxx b/stella/src/debugger/gui/TiaWidget.hxx index adfe34292..6160e162e 100644 --- a/stella/src/debugger/gui/TiaWidget.hxx +++ b/stella/src/debugger/gui/TiaWidget.hxx @@ -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: TiaWidget.hxx,v 1.2 2005-10-13 18:53:07 stephena Exp $ +// $Id: TiaWidget.hxx,v 1.3 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -38,7 +38,8 @@ class ColorWidget; class TiaWidget : public Widget, public CommandSender { public: - TiaWidget(GuiObject* boss, int x, int y, int w, int h); + TiaWidget(GuiObject* boss, const GUI::Font& font, + int x, int y, int w, int h); virtual ~TiaWidget(); void handleCommand(CommandSender* sender, int cmd, int data, int id); diff --git a/stella/src/debugger/gui/TiaZoomWidget.cxx b/stella/src/debugger/gui/TiaZoomWidget.cxx index a6ebe67a1..4c2401e1e 100644 --- a/stella/src/debugger/gui/TiaZoomWidget.cxx +++ b/stella/src/debugger/gui/TiaZoomWidget.cxx @@ -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: TiaZoomWidget.cxx,v 1.5 2005-09-23 23:35:02 stephena Exp $ +// $Id: TiaZoomWidget.cxx,v 1.6 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -28,8 +28,9 @@ #include "TiaZoomWidget.hxx" // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -TiaZoomWidget::TiaZoomWidget(GuiObject* boss, int x, int y) - : Widget(boss, x, y, 16, 16), +TiaZoomWidget::TiaZoomWidget(GuiObject* boss, const GUI::Font& font, + int x, int y) + : Widget(boss, font, x, y, 16, 16), CommandSender(boss), myMenu(NULL) { @@ -50,7 +51,7 @@ TiaZoomWidget::TiaZoomWidget(GuiObject* boss, int x, int y) myYCenter = myNumRows >> 1; // Create context menu for zoom levels - myMenu = new ContextMenu(this, instance()->consoleFont()); + myMenu = new ContextMenu(this, font); StringList l; l.push_back("2x zoom"); diff --git a/stella/src/debugger/gui/TiaZoomWidget.hxx b/stella/src/debugger/gui/TiaZoomWidget.hxx index 7e3394b05..d3865c55e 100644 --- a/stella/src/debugger/gui/TiaZoomWidget.hxx +++ b/stella/src/debugger/gui/TiaZoomWidget.hxx @@ -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: TiaZoomWidget.hxx,v 1.3 2005-09-01 16:49:52 stephena Exp $ +// $Id: TiaZoomWidget.hxx,v 1.4 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -32,7 +32,7 @@ class ContextMenu; class TiaZoomWidget : public Widget, public CommandSender { public: - TiaZoomWidget(GuiObject *boss, int x, int y); + TiaZoomWidget(GuiObject *boss, const GUI::Font& font, int x, int y); virtual ~TiaZoomWidget(); void loadConfig(); diff --git a/stella/src/debugger/gui/ToggleBitWidget.cxx b/stella/src/debugger/gui/ToggleBitWidget.cxx index 66a8724f0..311192318 100644 --- a/stella/src/debugger/gui/ToggleBitWidget.cxx +++ b/stella/src/debugger/gui/ToggleBitWidget.cxx @@ -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: ToggleBitWidget.cxx,v 1.2 2006-01-15 20:46:19 stephena Exp $ +// $Id: ToggleBitWidget.cxx,v 1.3 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -30,10 +30,8 @@ // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ToggleBitWidget::ToggleBitWidget(GuiObject* boss, const GUI::Font& font, int x, int y, int cols, int rows, int colchars) - : ToggleWidget(boss, x, y, cols, rows) + : ToggleWidget(boss, font, x, y, cols, rows) { - setFont(font); - _rowHeight = font.getLineHeight(); _colWidth = colchars * font.getMaxCharWidth() + 8; diff --git a/stella/src/debugger/gui/TogglePixelWidget.cxx b/stella/src/debugger/gui/TogglePixelWidget.cxx index 81851bb04..7b9229cb3 100644 --- a/stella/src/debugger/gui/TogglePixelWidget.cxx +++ b/stella/src/debugger/gui/TogglePixelWidget.cxx @@ -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: TogglePixelWidget.cxx,v 1.2 2006-01-15 20:46:19 stephena Exp $ +// $Id: TogglePixelWidget.cxx,v 1.3 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -27,12 +27,12 @@ #include "TogglePixelWidget.hxx" // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -TogglePixelWidget::TogglePixelWidget(GuiObject* boss, int x, int y, - int cols, int rows) - : ToggleWidget(boss, x, y, cols, rows), +TogglePixelWidget::TogglePixelWidget(GuiObject* boss, const GUI::Font& font, + int x, int y, int cols, int rows) + : ToggleWidget(boss, font, x, y, cols, rows), _pixelColor(kBGColor) { - _rowHeight = _font->getLineHeight(); + _rowHeight = font.getLineHeight(); _colWidth = 15; // Calculate real dimensions diff --git a/stella/src/debugger/gui/TogglePixelWidget.hxx b/stella/src/debugger/gui/TogglePixelWidget.hxx index 1db859da1..1e466fa27 100644 --- a/stella/src/debugger/gui/TogglePixelWidget.hxx +++ b/stella/src/debugger/gui/TogglePixelWidget.hxx @@ -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: TogglePixelWidget.hxx,v 1.1 2005-08-30 17:51:26 stephena Exp $ +// $Id: TogglePixelWidget.hxx,v 1.2 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -29,7 +29,8 @@ class TogglePixelWidget : public ToggleWidget { public: - TogglePixelWidget(GuiObject* boss, int x, int y, int cols, int rows); + TogglePixelWidget(GuiObject* boss, const GUI::Font& font, + int x, int y, int cols, int rows); virtual ~TogglePixelWidget(); void setColor(OverlayColor color) { _pixelColor = color; } diff --git a/stella/src/debugger/gui/ToggleWidget.cxx b/stella/src/debugger/gui/ToggleWidget.cxx index 08aca46c1..254509f7b 100644 --- a/stella/src/debugger/gui/ToggleWidget.cxx +++ b/stella/src/debugger/gui/ToggleWidget.cxx @@ -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: ToggleWidget.cxx,v 1.2 2005-09-23 23:35:02 stephena Exp $ +// $Id: ToggleWidget.cxx,v 1.3 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -24,8 +24,9 @@ #include "ToggleWidget.hxx" // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -ToggleWidget::ToggleWidget(GuiObject* boss, int x, int y, int cols, int rows) - : Widget(boss, x, y, 16, 16), +ToggleWidget::ToggleWidget(GuiObject* boss, const GUI::Font& font, + int x, int y, int cols, int rows) + : Widget(boss, font, x, y, 16, 16), CommandSender(boss), _rows(rows), _cols(cols), diff --git a/stella/src/debugger/gui/ToggleWidget.hxx b/stella/src/debugger/gui/ToggleWidget.hxx index 245a1bafa..062164955 100644 --- a/stella/src/debugger/gui/ToggleWidget.hxx +++ b/stella/src/debugger/gui/ToggleWidget.hxx @@ -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: ToggleWidget.hxx,v 1.1 2005-08-30 17:51:26 stephena Exp $ +// $Id: ToggleWidget.hxx,v 1.2 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -37,7 +37,8 @@ enum { class ToggleWidget : public Widget, public CommandSender { public: - ToggleWidget(GuiObject* boss, int x, int y, int cols, int rows); + ToggleWidget(GuiObject* boss, const GUI::Font& font, + int x, int y, int cols, int rows); virtual ~ToggleWidget(); const BoolArray& getState() { return _stateList; } diff --git a/stella/src/emucore/OSystem.cxx b/stella/src/emucore/OSystem.cxx index cec5906d7..0855c79c4 100644 --- a/stella/src/emucore/OSystem.cxx +++ b/stella/src/emucore/OSystem.cxx @@ -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: OSystem.cxx,v 1.60 2006-01-31 14:02:08 urchlay Exp $ +// $Id: OSystem.cxx,v 1.61 2006-02-22 17:38:04 stephena Exp $ //============================================================================ #include @@ -96,6 +96,11 @@ OSystem::~OSystem() // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - bool OSystem::create() { + // Create fonts to draw text + myFont = new GUI::Font(GUI::stellaDesc); + myLauncherFont = new GUI::Font(GUI::stellaDesc); // FIXME + myConsoleFont = new GUI::Font(GUI::consoleDesc); + // Create menu and launcher GUI objects myMenu = new Menu(this); myCommandMenu = new CommandMenu(this); @@ -107,10 +112,6 @@ bool OSystem::create() myCheatManager = new CheatManager(this); #endif - // Create fonts to draw text - myFont = new GUI::Font(GUI::stellaDesc); - myConsoleFont = new GUI::Font(GUI::consoleDesc); - // Determine which features were conditionally compiled into Stella #ifdef DISPLAY_OPENGL myFeatures += "OpenGL "; diff --git a/stella/src/emucore/OSystem.hxx b/stella/src/emucore/OSystem.hxx index 7e2f35a33..7a1c6ff9a 100644 --- a/stella/src/emucore/OSystem.hxx +++ b/stella/src/emucore/OSystem.hxx @@ -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: OSystem.hxx,v 1.37 2006-01-30 01:01:44 stephena Exp $ +// $Id: OSystem.hxx,v 1.38 2006-02-22 17:38:04 stephena Exp $ //============================================================================ #ifndef OSYSTEM_HXX @@ -44,7 +44,7 @@ class CheatManager; other objects belong. @author Stephen Anthony - @version $Id: OSystem.hxx,v 1.37 2006-01-30 01:01:44 stephena Exp $ + @version $Id: OSystem.hxx,v 1.38 2006-02-22 17:38:04 stephena Exp $ */ class OSystem { @@ -174,6 +174,13 @@ class OSystem */ inline const GUI::Font& font() const { return *myFont; } + /** + Get the launcher font object of the system + + @return The font reference + */ + inline const GUI::Font& launcherFont() const { return *myLauncherFont; } + /** Get the console font object of the system @@ -430,10 +437,13 @@ class OSystem string myFeatures; - // The normal GUI font object to use + // The font object to use for the normal in-game GUI GUI::Font* myFont; - // The console font object to use + // The font object to use for the ROM launcher + GUI::Font* myLauncherFont; + + // The font object to use for the console/debugger GUI::Font* myConsoleFont; private: diff --git a/stella/src/gui/AboutDialog.cxx b/stella/src/gui/AboutDialog.cxx index ba51e0eec..9cf15580a 100644 --- a/stella/src/gui/AboutDialog.cxx +++ b/stella/src/gui/AboutDialog.cxx @@ -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: AboutDialog.cxx,v 1.9 2005-11-26 21:23:35 stephena Exp $ +// $Id: AboutDialog.cxx,v 1.10 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -31,25 +31,26 @@ // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AboutDialog::AboutDialog(OSystem* osystem, DialogContainer* parent, - int x, int y, int w, int h) + const GUI::Font& font, int x, int y, int w, int h) : Dialog(osystem, parent, x, y, w, h), myPage(1), myNumPages(6) { // Add Previous, Next and Close buttons - myPrevButton = addButton(10, h - 24, "Previous", kPrevCmd, 'P'); - myNextButton = addButton((kButtonWidth + 15), h - 24, + myPrevButton = addButton(font, 10, h - 24, "Previous", kPrevCmd, 'P'); + myNextButton = addButton(font, (kButtonWidth + 15), h - 24, "Next", kNextCmd, 'N'); - addButton(w - (kButtonWidth + 10), h - 24, "Close", kCloseCmd, 'C'); + addButton(font, w - (kButtonWidth + 10), h - 24, "Close", kCloseCmd, 'C'); myPrevButton->clearFlags(WIDGET_ENABLED); - myTitle = new StaticTextWidget(this, 5, 5, w-10, kFontHeight, "", kTextAlignCenter); + myTitle = new StaticTextWidget(this, font, 5, 5, w - 10, font.getFontHeight(), + "", kTextAlignCenter); myTitle->setColor(kTextColorHi); for(int i = 0; i < LINES_PER_PAGE; i++) { - myDesc[i] = new StaticTextWidget(this, 10, 18 + (10 * i), w - 20, - kFontHeight, "", kTextAlignLeft); + myDesc[i] = new StaticTextWidget(this, font, 10, 18 + (10 * i), w - 20, + font.getFontHeight(), "", kTextAlignLeft); } } diff --git a/stella/src/gui/AboutDialog.hxx b/stella/src/gui/AboutDialog.hxx index 009e527fe..c56dbd586 100644 --- a/stella/src/gui/AboutDialog.hxx +++ b/stella/src/gui/AboutDialog.hxx @@ -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: AboutDialog.hxx,v 1.3 2005-07-05 15:25:44 stephena Exp $ +// $Id: AboutDialog.hxx,v 1.4 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -37,7 +37,7 @@ class AboutDialog : public Dialog { public: AboutDialog(OSystem* osystem, DialogContainer* parent, - int x, int y, int w, int h); + const GUI::Font& font, int x, int y, int w, int h); ~AboutDialog(); protected: diff --git a/stella/src/gui/AudioDialog.cxx b/stella/src/gui/AudioDialog.cxx index e68a0ee24..46f0f65c6 100644 --- a/stella/src/gui/AudioDialog.cxx +++ b/stella/src/gui/AudioDialog.cxx @@ -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: AudioDialog.cxx,v 1.17 2005-09-23 23:35:02 stephena Exp $ +// $Id: AudioDialog.cxx,v 1.18 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -34,60 +34,60 @@ #include "bspf.hxx" -enum { - kAudioRowHeight = 12, - kAudioWidth = 200, - kAudioHeight = 100 -}; - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AudioDialog::AudioDialog(OSystem* osystem, DialogContainer* parent, - int x, int y, int w, int h) + const GUI::Font& font, int x, int y, int w, int h) : Dialog(osystem, parent, x, y, w, h) { - const GUI::Font& font = instance()->font(); - int yoff = 10, - xoff = 30, - woff = _w - 80, - labelWidth = 80; + const int lineHeight = font.getLineHeight(), + fontHeight = font.getFontHeight(); + int xpos, ypos; + int lwidth = font.getStringWidth("Fragment Size: "), + pwidth = font.getStringWidth("4096"); // Volume - myVolumeSlider = new SliderWidget(this, xoff, yoff, woff - 14, kLineHeight, - "Volume: ", labelWidth, kVolumeChanged); + xpos = (w - lwidth - pwidth - 40) / 2; ypos = 10; + + myVolumeSlider = new SliderWidget(this, font, xpos, ypos, 30, lineHeight, + "Volume: ", lwidth, kVolumeChanged); myVolumeSlider->setMinValue(1); myVolumeSlider->setMaxValue(100); - myVolumeLabel = new StaticTextWidget(this, xoff + woff - 11, yoff, 24, kLineHeight, - "", kTextAlignLeft); + myVolumeLabel = new StaticTextWidget(this, font, + xpos + myVolumeSlider->getWidth() + 4, + ypos + 1, + 15, fontHeight, "", kTextAlignLeft); + myVolumeLabel->setFlags(WIDGET_CLEARBG); - yoff += kAudioRowHeight + 4; + ypos += lineHeight + 4; // Fragment size - myFragsizePopup = new PopUpWidget(this, xoff, yoff, woff, kLineHeight, - "Fragment size: ", labelWidth); + myFragsizePopup = new PopUpWidget(this, font, xpos, ypos, + pwidth + myVolumeLabel->getWidth() - 4, lineHeight, + "Fragment size: ", lwidth); myFragsizePopup->appendEntry("256", 1); myFragsizePopup->appendEntry("512", 2); myFragsizePopup->appendEntry("1024", 3); myFragsizePopup->appendEntry("2048", 4); myFragsizePopup->appendEntry("4096", 5); - yoff += kAudioRowHeight + 4; + ypos += lineHeight + 4; // Stereo sound - mySoundTypeCheckbox = new CheckboxWidget(this, font, xoff+28, yoff, + mySoundTypeCheckbox = new CheckboxWidget(this, font, xpos+28, ypos, "Stereo mode", 0); - yoff += kAudioRowHeight + 4; + ypos += lineHeight + 4; // Enable sound - mySoundEnableCheckbox = new CheckboxWidget(this, font, xoff+28, yoff, + mySoundEnableCheckbox = new CheckboxWidget(this, font, xpos+28, ypos, "Enable sound", kSoundEnableChanged); - yoff += kAudioRowHeight + 12; + ypos += lineHeight + 12; // Add Defaults, OK and Cancel buttons - addButton( 10, _h - 24, "Defaults", kDefaultsCmd, 0); + addButton(font, 10, _h - 24, "Defaults", kDefaultsCmd, 0); #ifndef MAC_OSX - addButton(_w - 2 * (kButtonWidth + 7), _h - 24, "OK", kOKCmd, 0); - addButton(_w - (kButtonWidth + 10), _h - 24, "Cancel", kCloseCmd, 0); + addButton(font, _w - 2 * (kButtonWidth + 7), _h - 24, "OK", kOKCmd, 0); + addButton(font, _w - (kButtonWidth + 10), _h - 24, "Cancel", kCloseCmd, 0); #else - addButton(_w - 2 * (kButtonWidth + 7), _h - 24, "Cancel", kCloseCmd, 0); - addButton(_w - (kButtonWidth + 10), _h - 24, "OK", kOKCmd, 0); + addButton(font, _w - 2 * (kButtonWidth + 7), _h - 24, "Cancel", kCloseCmd, 0); + addButton(font, _w - (kButtonWidth + 10), _h - 24, "OK", kOKCmd, 0); #endif } diff --git a/stella/src/gui/AudioDialog.hxx b/stella/src/gui/AudioDialog.hxx index 679afc32c..0fd9b13bb 100644 --- a/stella/src/gui/AudioDialog.hxx +++ b/stella/src/gui/AudioDialog.hxx @@ -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: AudioDialog.hxx,v 1.6 2005-09-06 19:42:35 stephena Exp $ +// $Id: AudioDialog.hxx,v 1.7 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -42,7 +42,7 @@ class AudioDialog : public Dialog { public: AudioDialog(OSystem* osystem, DialogContainer* parent, - int x, int y, int w, int h); + const GUI::Font& font, int x, int y, int w, int h); ~AudioDialog(); protected: diff --git a/stella/src/gui/BrowserDialog.cxx b/stella/src/gui/BrowserDialog.cxx index 4a07039d9..26020f24b 100644 --- a/stella/src/gui/BrowserDialog.cxx +++ b/stella/src/gui/BrowserDialog.cxx @@ -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: BrowserDialog.cxx,v 1.13 2006-01-16 01:56:18 stephena Exp $ +// $Id: BrowserDialog.cxx,v 1.14 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -43,34 +43,56 @@ enum { */ // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -BrowserDialog::BrowserDialog(GuiObject* boss, int x, int y, int w, int h) +BrowserDialog::BrowserDialog(GuiObject* boss, const GUI::Font& font, + int x, int y, int w, int h) : Dialog(boss->instance(), boss->parent(), x, y, w, h), CommandSender(boss), _fileList(NULL), _currentPath(NULL) { - _title = new StaticTextWidget(this, 10, 8, _w - 2 * 10, kLineHeight, "", kTextAlignCenter); + const int lineHeight = font.getLineHeight(), + bwidth = font.getStringWidth("Cancel") + 20, + bheight = font.getLineHeight() + 4; + int xpos, ypos; + + xpos = 10; ypos = 4; + _title = new StaticTextWidget(this, font, xpos, ypos, + _w - 2 * xpos, lineHeight, + "", kTextAlignCenter); // Current path - TODO: handle long paths ? - _currentPath = new StaticTextWidget(this, 10, 20, _w - 2 * 10, kLineHeight, + ypos += lineHeight + 4; + _currentPath = new StaticTextWidget(this, font, xpos, ypos, + _w - 2 * xpos, lineHeight, "DUMMY", kTextAlignLeft); // Add file list - _fileList = new StringListWidget(this, instance()->font(), - 10, 34, _w - 2 * 10, _h - 34 - 24 - 10); + ypos += lineHeight; + _fileList = new StringListWidget(this, font, xpos, ypos, + _w - 2 * xpos, _h - bheight - ypos - 15); _fileList->setNumberingMode(kListNumberingOff); _fileList->setEditable(false); _fileList->setFlags(WIDGET_NODRAW_FOCUS); addFocusWidget(_fileList); // Buttons - addButton(10, _h - 24, "Go up", kGoUpCmd, 0); + xpos = 10; ypos = _h - bheight - 8; + new ButtonWidget(this, font, xpos, ypos, bwidth, bheight, "Go up", + kGoUpCmd, 0); #ifndef MAC_OSX - addButton(_w - 2 * (kButtonWidth + 10), _h - 24, "Choose", kChooseCmd, 0); - addButton(_w - (kButtonWidth+10), _h - 24, "Cancel", kCloseCmd, 0); + xpos = _w - 2 *(bwidth + 10); + new ButtonWidget(this, font, xpos, ypos, bwidth, bheight, "Choose", + kChooseCmd, 0); + xpos += bwidth + 10; + new ButtonWidget(this, font, xpos, ypos, bwidth, bheight, "Cancel", + kCloseCmd, 0); #else - addButton(_w - 2 * (kButtonWidth + 10), _h - 24, "Cancel", kCloseCmd, 0); - addButton(_w - (kButtonWidth+10), _h - 24, "Choose", kChooseCmd, 0); + xpos = _w - 2 *(bwidth + 10); ypos = _h - bheight - 8; + new ButtonWidget(this, font, xpos, ypos, bwidth, bheight, "Cancel", + kCloseCmd, 0); + xpos += bwidth + 10; + new ButtonWidget(this, font, xpos, ypos, bwidth, bheight, "Choose", + kChooseCmd, 0); #endif } diff --git a/stella/src/gui/BrowserDialog.hxx b/stella/src/gui/BrowserDialog.hxx index 1dd0fb998..bb6c16655 100644 --- a/stella/src/gui/BrowserDialog.hxx +++ b/stella/src/gui/BrowserDialog.hxx @@ -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: BrowserDialog.hxx,v 1.6 2005-08-22 18:17:10 stephena Exp $ +// $Id: BrowserDialog.hxx,v 1.7 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -34,7 +34,8 @@ class StringListWidget; class BrowserDialog : public Dialog, public CommandSender { public: - BrowserDialog(GuiObject* boss, int x, int y, int w, int h); + BrowserDialog(GuiObject* boss, const GUI::Font& font, + int x, int y, int w, int h); const FilesystemNode& getResult() { return _choice; } diff --git a/stella/src/gui/CheckListWidget.cxx b/stella/src/gui/CheckListWidget.cxx index 81aa842f9..74d6ecc7e 100644 --- a/stella/src/gui/CheckListWidget.cxx +++ b/stella/src/gui/CheckListWidget.cxx @@ -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: CheckListWidget.cxx,v 1.9 2005-11-27 22:37:25 stephena Exp $ +// $Id: CheckListWidget.cxx,v 1.10 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -31,8 +31,8 @@ CheckListWidget::CheckListWidget(GuiObject* boss, const GUI::Font& font, // rowheight is determined by largest item on a line, // possibly meaning that number of rows will change - _rowHeight = MAX(_rowHeight, CheckboxWidget::boxSize()); - _rows = h / _rowHeight; + _fontHeight = MAX(_fontHeight, CheckboxWidget::boxSize()); + _rows = h / _fontHeight; // Create a CheckboxWidget for each row in the list CheckboxWidget* t; @@ -42,7 +42,7 @@ CheckListWidget::CheckListWidget(GuiObject* boss, const GUI::Font& font, t->setTarget(this); t->setID(i); t->holdFocus(false); - ypos += _rowHeight; + ypos += _fontHeight; _checkList.push_back(t); } @@ -127,8 +127,7 @@ void CheckListWidget::drawWidget(bool hilite) _checkList[i]->setDirty(); _checkList[i]->draw(); - // FIXME - properly account for differing font heights - const int y = _y + 2 + _rowHeight * i + 2; + const int y = _y + 2 + _fontHeight * i + 2; GUI::Rect r(getEditRect()); @@ -136,12 +135,12 @@ void CheckListWidget::drawWidget(bool hilite) if (_selectedItem == pos) { if (_hasFocus && !_editMode) - fb.fillRect(_x + r.left - 3, _y + 1 + _rowHeight * i, - _w - r.left, _rowHeight, + fb.fillRect(_x + r.left - 3, _y + 1 + _fontHeight * i, + _w - r.left, _fontHeight, kTextColorHi); else - fb.frameRect(_x + r.left - 3, _y + 1 + _rowHeight * i, - _w - r.left, _rowHeight, + fb.frameRect(_x + r.left - 3, _y + 1 + _fontHeight * i, + _w - r.left, _fontHeight, kTextColorHi); } @@ -171,8 +170,8 @@ void CheckListWidget::drawWidget(bool hilite) // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GUI::Rect CheckListWidget::getEditRect() const { - GUI::Rect r(2, 1, _w, _rowHeight); - const int yoffset = (_selectedItem - _currentPos) * _rowHeight, + GUI::Rect r(2, 1, _w, _fontHeight); + const int yoffset = (_selectedItem - _currentPos) * _fontHeight, xoffset = CheckboxWidget::boxSize() + 10; r.top += yoffset; r.bottom += yoffset; diff --git a/stella/src/gui/CommandDialog.cxx b/stella/src/gui/CommandDialog.cxx index b445bbb90..cbbd0368c 100644 --- a/stella/src/gui/CommandDialog.cxx +++ b/stella/src/gui/CommandDialog.cxx @@ -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: CommandDialog.cxx,v 1.7 2006-01-08 20:55:53 stephena Exp $ +// $Id: CommandDialog.cxx,v 1.8 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -31,7 +31,8 @@ CommandDialog::CommandDialog(OSystem* osystem, DialogContainer* parent) : Dialog(osystem, parent, 0, 0, 16, 16), mySelectedItem(0) { - int lineHeight = osystem->font().getLineHeight(), + const GUI::Font& font = osystem->font(); + int lineHeight = font.getLineHeight(), buttonWidth = 60, buttonHeight = lineHeight + 2, xoffset = 5, @@ -47,88 +48,88 @@ CommandDialog::CommandDialog(OSystem* osystem, DialogContainer* parent) WidgetArray wid; ButtonWidget* b; - b = new ButtonWidget(this, xoffset, yoffset, buttonWidth, buttonHeight, + b = new ButtonWidget(this, font, xoffset, yoffset, buttonWidth, buttonHeight, "Select", kSelectCmd, 0); b->setEditable(true); wid.push_back(b); xoffset += lwidth; - b = new ButtonWidget(this, xoffset, yoffset, buttonWidth, buttonHeight, + b = new ButtonWidget(this, font, xoffset, yoffset, buttonWidth, buttonHeight, "Reset", kResetCmd, 0); b->setEditable(true); wid.push_back(b); xoffset += lwidth; - b = new ButtonWidget(this, xoffset, yoffset, buttonWidth, buttonHeight, + b = new ButtonWidget(this, font, xoffset, yoffset, buttonWidth, buttonHeight, "Color TV", kColorCmd, 0); b->setEditable(true); wid.push_back(b); xoffset += lwidth; - b = new ButtonWidget(this, xoffset, yoffset, buttonWidth, buttonHeight, + b = new ButtonWidget(this, font, xoffset, yoffset, buttonWidth, buttonHeight, "B/W TV", kBWCmd, 0); b->setEditable(true); wid.push_back(b); xoffset = 5; yoffset += buttonHeight + 5; - b = new ButtonWidget(this, xoffset, yoffset, buttonWidth, buttonHeight, + b = new ButtonWidget(this, font, xoffset, yoffset, buttonWidth, buttonHeight, "Left Diff A", kLeftDiffACmd, 0); b->setEditable(true); wid.push_back(b); xoffset += lwidth; - b = new ButtonWidget(this, xoffset, yoffset, buttonWidth, buttonHeight, + b = new ButtonWidget(this, font, xoffset, yoffset, buttonWidth, buttonHeight, "Left Diff B", kLeftDiffBCmd, 0); b->setEditable(true); wid.push_back(b); xoffset += lwidth; - b = new ButtonWidget(this, xoffset, yoffset, buttonWidth, buttonHeight, + b = new ButtonWidget(this, font, xoffset, yoffset, buttonWidth, buttonHeight, "Right Diff A", kRightDiffACmd, 0); b->setEditable(true); wid.push_back(b); xoffset += lwidth; - b = new ButtonWidget(this, xoffset, yoffset, buttonWidth, buttonHeight, + b = new ButtonWidget(this, font, xoffset, yoffset, buttonWidth, buttonHeight, "Right Diff B", kRightDiffBCmd, 0); b->setEditable(true); wid.push_back(b); xoffset = 5; yoffset += buttonHeight + 5; - b = new ButtonWidget(this, xoffset, yoffset, buttonWidth, buttonHeight, + b = new ButtonWidget(this, font, xoffset, yoffset, buttonWidth, buttonHeight, "Save State", kSaveStateCmd, 0); b->setEditable(true); wid.push_back(b); xoffset += lwidth; - b = new ButtonWidget(this, xoffset, yoffset, buttonWidth, buttonHeight, + b = new ButtonWidget(this, font, xoffset, yoffset, buttonWidth, buttonHeight, "State Slot", kStateSlotCmd, 0); b->setEditable(true); wid.push_back(b); xoffset += lwidth; - b = new ButtonWidget(this, xoffset, yoffset, buttonWidth, buttonHeight, + b = new ButtonWidget(this, font, xoffset, yoffset, buttonWidth, buttonHeight, "Load State", kLoadStateCmd, 0); b->setEditable(true); wid.push_back(b); xoffset += lwidth; - b = new ButtonWidget(this, xoffset, yoffset, buttonWidth, buttonHeight, + b = new ButtonWidget(this, font, xoffset, yoffset, buttonWidth, buttonHeight, "Snapshot", kSnapshotCmd, 0); b->setEditable(true); wid.push_back(b); xoffset = 5; yoffset += buttonHeight + 5; - b = new ButtonWidget(this, xoffset, yoffset, buttonWidth, buttonHeight, + b = new ButtonWidget(this, font, xoffset, yoffset, buttonWidth, buttonHeight, "NTSC/PAL", kFormatCmd, 0); b->setEditable(true); wid.push_back(b); xoffset += lwidth; - b = new ButtonWidget(this, xoffset, yoffset, buttonWidth, buttonHeight, + b = new ButtonWidget(this, font, xoffset, yoffset, buttonWidth, buttonHeight, "Palette", kPaletteCmd, 0); b->setEditable(true); wid.push_back(b); xoffset += lwidth; - b = new ButtonWidget(this, xoffset, yoffset, buttonWidth, buttonHeight, + b = new ButtonWidget(this, font, xoffset, yoffset, buttonWidth, buttonHeight, "Reload ROM", kReloadRomCmd, 0); b->setEditable(true); wid.push_back(b); xoffset += lwidth; - b = new ButtonWidget(this, xoffset, yoffset, buttonWidth, buttonHeight, + b = new ButtonWidget(this, font, xoffset, yoffset, buttonWidth, buttonHeight, "Exit Game", kExitCmd, 0); b->setEditable(true); wid.push_back(b); diff --git a/stella/src/gui/Dialog.cxx b/stella/src/gui/Dialog.cxx index 01d265694..f6a917531 100644 --- a/stella/src/gui/Dialog.cxx +++ b/stella/src/gui/Dialog.cxx @@ -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: Dialog.cxx,v 1.41 2006-01-09 16:50:01 stephena Exp $ +// $Id: Dialog.cxx,v 1.42 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -450,8 +450,15 @@ Widget* Dialog::findWidget(int x, int y) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -ButtonWidget* Dialog::addButton(int x, int y, const string& label, - int cmd, char hotkey) +ButtonWidget* Dialog::addButton(const GUI::Font& font, int x, int y, + const string& label, int cmd, char hotkey) { - return new ButtonWidget(this, x, y, kButtonWidth, 16, label, cmd, hotkey); +#if 0 + const int w = 6 * font.getMaxCharWidth(), + h = font.getFontHeight() + 6; + + return new ButtonWidget(this, font, x, y, w, h, label, cmd, hotkey); +#else + return new ButtonWidget(this, font, x, y, kButtonWidth, 16, label, cmd, hotkey); +#endif } diff --git a/stella/src/gui/Dialog.hxx b/stella/src/gui/Dialog.hxx index 1de05b21c..2a0aa5b2c 100644 --- a/stella/src/gui/Dialog.hxx +++ b/stella/src/gui/Dialog.hxx @@ -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: Dialog.hxx,v 1.26 2006-01-09 16:50:01 stephena Exp $ +// $Id: Dialog.hxx,v 1.27 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -36,7 +36,7 @@ class TabWidget; This is the base class for all dialog boxes. @author Stephen Anthony - @version $Id: Dialog.hxx,v 1.26 2006-01-09 16:50:01 stephena Exp $ + @version $Id: Dialog.hxx,v 1.27 2006-02-22 17:38:04 stephena Exp $ */ class Dialog : public GuiObject { @@ -94,7 +94,8 @@ class Dialog : public GuiObject Widget* findWidget(int x, int y); // Find the widget at pos x,y if any - ButtonWidget* addButton(int x, int y, const string& label, int cmd, char hotkey); + ButtonWidget* addButton(const GUI::Font& font, int x, int y, + const string& label = "", int cmd = 0, char hotkey = 0); void setResult(int result) { _result = result; } int getResult() const { return _result; } diff --git a/stella/src/gui/EditTextWidget.cxx b/stella/src/gui/EditTextWidget.cxx index 0e2ccd7be..62024580d 100644 --- a/stella/src/gui/EditTextWidget.cxx +++ b/stella/src/gui/EditTextWidget.cxx @@ -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: EditTextWidget.cxx,v 1.13 2006-01-15 20:46:20 stephena Exp $ +// $Id: EditTextWidget.cxx,v 1.14 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -26,9 +26,9 @@ // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -EditTextWidget::EditTextWidget(GuiObject* boss, int x, int y, int w, int h, - const string& text) - : EditableWidget(boss, x, y - 1, w, h + 2) +EditTextWidget::EditTextWidget(GuiObject* boss, const GUI::Font& font, + int x, int y, int w, int h, const string& text) + : EditableWidget(boss, font, x, y - 1, w, h + 2) { _flags = WIDGET_ENABLED | WIDGET_CLEARBG | WIDGET_RETAIN_FOCUS; _type = kEditTextWidget; diff --git a/stella/src/gui/EditTextWidget.hxx b/stella/src/gui/EditTextWidget.hxx index a0d883718..4c715356d 100644 --- a/stella/src/gui/EditTextWidget.hxx +++ b/stella/src/gui/EditTextWidget.hxx @@ -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: EditTextWidget.hxx,v 1.4 2005-06-30 00:08:01 stephena Exp $ +// $Id: EditTextWidget.hxx,v 1.5 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -30,7 +30,8 @@ class EditTextWidget : public EditableWidget { public: - EditTextWidget(GuiObject* boss, int x, int y, int w, int h, const string& text); + EditTextWidget(GuiObject* boss, const GUI::Font& font, + int x, int y, int w, int h, const string& text); void setEditString(const string& str); diff --git a/stella/src/gui/EditableWidget.cxx b/stella/src/gui/EditableWidget.cxx index e0f0762d2..516fdf5b1 100644 --- a/stella/src/gui/EditableWidget.cxx +++ b/stella/src/gui/EditableWidget.cxx @@ -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: EditableWidget.cxx,v 1.15 2006-01-15 20:46:20 stephena Exp $ +// $Id: EditableWidget.cxx,v 1.16 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -23,8 +23,9 @@ // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -EditableWidget::EditableWidget(GuiObject* boss, int x, int y, int w, int h) - : Widget(boss, x, y, w, h), +EditableWidget::EditableWidget(GuiObject* boss, const GUI::Font& font, + int x, int y, int w, int h) + : Widget(boss, font, x, y, w, h), CommandSender(boss), _editable(true) { diff --git a/stella/src/gui/EditableWidget.hxx b/stella/src/gui/EditableWidget.hxx index e9770df76..e9d754e35 100644 --- a/stella/src/gui/EditableWidget.hxx +++ b/stella/src/gui/EditableWidget.hxx @@ -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: EditableWidget.hxx,v 1.8 2005-10-09 20:41:56 stephena Exp $ +// $Id: EditableWidget.hxx,v 1.9 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -38,7 +38,8 @@ enum { class EditableWidget : public Widget, public CommandSender { public: - EditableWidget(GuiObject *boss, int x, int y, int w, int h); + EditableWidget(GuiObject *boss, const GUI::Font& font, + int x, int y, int w, int h); virtual ~EditableWidget(); virtual void setEditString(const string& str); diff --git a/stella/src/gui/EventMappingWidget.cxx b/stella/src/gui/EventMappingWidget.cxx index 48973fc61..b11c0bfee 100644 --- a/stella/src/gui/EventMappingWidget.cxx +++ b/stella/src/gui/EventMappingWidget.cxx @@ -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: EventMappingWidget.cxx,v 1.11 2006-01-19 00:45:13 stephena Exp $ +// $Id: EventMappingWidget.cxx,v 1.12 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -30,14 +30,15 @@ #include "bspf.hxx" // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -EventMappingWidget::EventMappingWidget(GuiObject* boss, int x, int y, int w, int h) - : Widget(boss, x, y, w, h), +EventMappingWidget::EventMappingWidget(GuiObject* boss, const GUI::Font& font, + int x, int y, int w, int h) + : Widget(boss, font, x, y, w, h), CommandSender(boss), myActionSelected(-1), myRemapStatus(false), myFirstTime(true) { - const GUI::Font& font = instance()->font(); +// FIXME const int fontHeight = font.getFontHeight(), lineHeight = font.getLineHeight(); int xpos = 5, ypos = 5; @@ -52,26 +53,26 @@ EventMappingWidget::EventMappingWidget(GuiObject* boss, int x, int y, int w, int // Add remap, erase, cancel and default buttons xpos += myActionsList->getWidth() + 15; ypos += 5; - myMapButton = new ButtonWidget(boss, xpos, ypos, 50, 16, + myMapButton = new ButtonWidget(boss, font, xpos, ypos, 50, 16, "Map", kStartMapCmd); myMapButton->setTarget(this); ypos += 20; - myEraseButton = new ButtonWidget(boss, xpos, ypos, 50, 16, + myEraseButton = new ButtonWidget(boss, font, xpos, ypos, 50, 16, "Erase", kEraseCmd); myEraseButton->setTarget(this); ypos += 20; - myCancelMapButton = new ButtonWidget(boss, xpos, ypos, 50, 16, + myCancelMapButton = new ButtonWidget(boss, font, xpos, ypos, 50, 16, "Cancel", kStopMapCmd); myCancelMapButton->setTarget(this); myCancelMapButton->clearFlags(WIDGET_ENABLED); ypos += 30; - myDefaultsButton = new ButtonWidget(boss, xpos, ypos, 50, 16, + myDefaultsButton = new ButtonWidget(boss, font, xpos, ypos, 50, 16, "Defaults", kDefaultsCmd); myDefaultsButton->setTarget(this); // Show message for currently selected event xpos = 10; ypos = 5 + myActionsList->getHeight() + 3; - myKeyMapping = new StaticTextWidget(boss, xpos, ypos, _w - 20, fontHeight, + myKeyMapping = new StaticTextWidget(boss, font, xpos, ypos, _w - 20, fontHeight, "Action: ", kTextAlignLeft); myKeyMapping->setFlags(WIDGET_CLEARBG); diff --git a/stella/src/gui/EventMappingWidget.hxx b/stella/src/gui/EventMappingWidget.hxx index 27caf4b84..e6e4ee321 100644 --- a/stella/src/gui/EventMappingWidget.hxx +++ b/stella/src/gui/EventMappingWidget.hxx @@ -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: EventMappingWidget.hxx,v 1.6 2006-01-15 20:46:20 stephena Exp $ +// $Id: EventMappingWidget.hxx,v 1.7 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -41,7 +41,8 @@ class EventMappingWidget : public Widget, public CommandSender friend class InputDialog; public: - EventMappingWidget(GuiObject* boss, int x, int y, int w, int h); + EventMappingWidget(GuiObject* boss, const GUI::Font& font, + int x, int y, int w, int h); ~EventMappingWidget(); virtual bool handleKeyDown(int ascii, int keycode, int modifiers); diff --git a/stella/src/gui/GameInfoDialog.cxx b/stella/src/gui/GameInfoDialog.cxx index 020c0a1ac..474156b9d 100644 --- a/stella/src/gui/GameInfoDialog.cxx +++ b/stella/src/gui/GameInfoDialog.cxx @@ -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: GameInfoDialog.cxx,v 1.22 2006-01-20 15:13:37 stephena Exp $ +// $Id: GameInfoDialog.cxx,v 1.23 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -31,23 +31,22 @@ // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GameInfoDialog::GameInfoDialog( - OSystem* osystem, DialogContainer* parent, GuiObject* boss, - int x, int y, int w, int h) + OSystem* osystem, DialogContainer* parent, const GUI::Font& font, + GuiObject* boss, int x, int y, int w, int h) : Dialog(osystem, parent, x, y, w, h), CommandSender(boss) { - const GUI::Font& font = instance()->font(); const int fontHeight = font.getFontHeight(), lineHeight = font.getLineHeight(); const int vBorder = 4; - int xpos, ypos, lwidth, fwidth, tabID; + int xpos, ypos, lwidth, fwidth, pwidth, tabID; unsigned int i; WidgetArray wid; // The tab widget xpos = 2; ypos = vBorder; - myTab = new TabWidget(this, xpos, ypos, _w - 2*xpos, _h - 24 - 2*ypos); + myTab = new TabWidget(this, font, xpos, ypos, _w - 2*xpos, _h - 24 - 2*ypos); // 1) Cartridge properties wid.clear(); @@ -56,62 +55,63 @@ GameInfoDialog::GameInfoDialog( xpos = 10; lwidth = font.getStringWidth("Manufacturer: "); fwidth = _w - xpos - lwidth - 10; - new StaticTextWidget(myTab, xpos, ypos+1, lwidth, fontHeight, + new StaticTextWidget(myTab, font, xpos, ypos+1, lwidth, fontHeight, "Name:", kTextAlignLeft); - myName = new EditTextWidget(myTab, xpos+lwidth, ypos, fwidth, fontHeight, ""); + myName = new EditTextWidget(myTab, font, xpos+lwidth, ypos, + fwidth, fontHeight, ""); wid.push_back(myName); ypos += lineHeight + 3; - new StaticTextWidget(myTab, xpos, ypos+1, lwidth, fontHeight, + new StaticTextWidget(myTab, font, xpos, ypos+1, lwidth, fontHeight, "MD5:", kTextAlignLeft); - myMD5 = new StaticTextWidget(myTab, xpos+lwidth, ypos, + myMD5 = new StaticTextWidget(myTab, font, xpos+lwidth, ypos, fwidth, fontHeight, "", kTextAlignLeft); ypos += lineHeight + 3; - new StaticTextWidget(myTab, xpos, ypos+1, lwidth, fontHeight, + new StaticTextWidget(myTab, font, xpos, ypos+1, lwidth, fontHeight, "Manufacturer:", kTextAlignLeft); - myManufacturer = new EditTextWidget(myTab, xpos+lwidth, ypos, + myManufacturer = new EditTextWidget(myTab, font, xpos+lwidth, ypos, fwidth, fontHeight, ""); wid.push_back(myManufacturer); ypos += lineHeight + 3; - new StaticTextWidget(myTab, xpos, ypos+1, lwidth, fontHeight, + new StaticTextWidget(myTab, font, xpos, ypos+1, lwidth, fontHeight, "Model:", kTextAlignLeft); - myModelNo = new EditTextWidget(myTab, xpos+lwidth, ypos, + myModelNo = new EditTextWidget(myTab, font, xpos+lwidth, ypos, fwidth, fontHeight, ""); wid.push_back(myModelNo); ypos += lineHeight + 3; - new StaticTextWidget(myTab, xpos, ypos+1, lwidth, fontHeight, + new StaticTextWidget(myTab, font, xpos, ypos+1, lwidth, fontHeight, "Rarity:", kTextAlignLeft); - myRarity = new EditTextWidget(myTab, xpos+lwidth, ypos, + myRarity = new EditTextWidget(myTab, font, xpos+lwidth, ypos, fwidth, fontHeight, ""); wid.push_back(myRarity); ypos += lineHeight + 3; - new StaticTextWidget(myTab, xpos, ypos+1, lwidth, fontHeight, + new StaticTextWidget(myTab, font, xpos, ypos+1, lwidth, fontHeight, "Note:", kTextAlignLeft); - myNote = new EditTextWidget(myTab, xpos+lwidth, ypos, + myNote = new EditTextWidget(myTab, font, xpos+lwidth, ypos, fwidth, fontHeight, ""); wid.push_back(myNote); ypos += lineHeight + 3; - new StaticTextWidget(myTab, xpos, ypos+1, lwidth, fontHeight, + new StaticTextWidget(myTab, font, xpos, ypos+1, lwidth, fontHeight, "Sound:", kTextAlignLeft); - mySound = new PopUpWidget(myTab, xpos+lwidth, ypos, - font.getStringWidth("Stereo") + 15, lineHeight, - "", 0, 0); + pwidth = font.getStringWidth("Stereo"); + mySound = new PopUpWidget(myTab, font, xpos+lwidth, ypos, + pwidth, lineHeight, "", 0, 0); mySound->appendEntry("Mono", 1); mySound->appendEntry("Stereo", 2); wid.push_back(mySound); ypos += lineHeight + 3; - new StaticTextWidget(myTab, xpos, ypos+1, lwidth, fontHeight, + new StaticTextWidget(myTab, font, xpos, ypos+1, lwidth, fontHeight, "Type:", kTextAlignLeft); - myType = new PopUpWidget(myTab, xpos+lwidth, ypos, - font.getStringWidth("CV (Commavid extra ram)") + 15, - lineHeight, "", 0, 0); + pwidth = font.getStringWidth("CV (Commavid extra ram)"); + myType = new PopUpWidget(myTab, font, xpos+lwidth, ypos, + pwidth, lineHeight, "", 0, 0); for(i = 0; i < 21; ++i) myType->appendEntry(ourCartridgeList[i].name, i+1); wid.push_back(myType); @@ -126,41 +126,38 @@ GameInfoDialog::GameInfoDialog( xpos = 10; ypos = vBorder; lwidth = font.getStringWidth("Right Difficulty: "); - new StaticTextWidget(myTab, xpos, ypos+1, lwidth, fontHeight, + pwidth = font.getStringWidth("B & W"); + new StaticTextWidget(myTab, font, xpos, ypos+1, lwidth, fontHeight, "Left Difficulty:", kTextAlignLeft); - myLeftDiff = new PopUpWidget(myTab, xpos+lwidth, ypos, - font.getStringWidth(" ") + 15, lineHeight, - "", 0, 0); + myLeftDiff = new PopUpWidget(myTab, font, xpos+lwidth, ypos, + pwidth, lineHeight, "", 0, 0); myLeftDiff->appendEntry("B", 1); myLeftDiff->appendEntry("A", 2); wid.push_back(myLeftDiff); ypos += lineHeight + 3; - new StaticTextWidget(myTab, xpos, ypos+1, lwidth, fontHeight, + new StaticTextWidget(myTab, font, xpos, ypos+1, lwidth, fontHeight, "Right Difficulty:", kTextAlignLeft); - myRightDiff = new PopUpWidget(myTab, xpos+lwidth, ypos, - font.getStringWidth(" ") + 15, lineHeight, - "", 0, 0); + myRightDiff = new PopUpWidget(myTab, font, xpos+lwidth, ypos, + pwidth, lineHeight, "", 0, 0); myRightDiff->appendEntry("B", 1); myRightDiff->appendEntry("A", 2); wid.push_back(myRightDiff); ypos += lineHeight + 3; - new StaticTextWidget(myTab, xpos, ypos+1, lwidth, fontHeight, + new StaticTextWidget(myTab, font, xpos, ypos+1, lwidth, fontHeight, "TV Type:", kTextAlignLeft); - myTVType = new PopUpWidget(myTab, xpos+lwidth, ypos, - font.getStringWidth("B & W") + 15, lineHeight, - "", 0, 0); + myTVType = new PopUpWidget(myTab, font, xpos+lwidth, ypos, + pwidth, lineHeight, "", 0, 0); myTVType->appendEntry("Color", 1); myTVType->appendEntry("B & W", 2); wid.push_back(myTVType); ypos += lineHeight + 3; - new StaticTextWidget(myTab, xpos, ypos+1, lwidth, fontHeight, + new StaticTextWidget(myTab, font, xpos, ypos+1, lwidth, fontHeight, "Swap ports:", kTextAlignLeft); - mySwapPorts = new PopUpWidget(myTab, xpos+lwidth, ypos, - font.getStringWidth("Yes") + 15, lineHeight, - "", 0, 0); + mySwapPorts = new PopUpWidget(myTab, font, xpos+lwidth, ypos, + pwidth, lineHeight, "", 0, 0); mySwapPorts->appendEntry("Yes", 1); mySwapPorts->appendEntry("No", 2); wid.push_back(mySwapPorts); @@ -175,22 +172,20 @@ GameInfoDialog::GameInfoDialog( xpos = 10; ypos = vBorder; lwidth = font.getStringWidth("Right Controller: "); - fwidth = font.getStringWidth("Booster-Grip"); - new StaticTextWidget(myTab, xpos, ypos+1, lwidth, fontHeight, + pwidth = font.getStringWidth("Booster-Grip"); + new StaticTextWidget(myTab, font, xpos, ypos+1, lwidth, fontHeight, "Left Controller:", kTextAlignLeft); - myLeftController = new PopUpWidget(myTab, xpos+lwidth, ypos, - fwidth + 15, lineHeight, - "", 0, 0); + myLeftController = new PopUpWidget(myTab, font, xpos+lwidth, ypos, + pwidth, lineHeight, "", 0, 0); for(i = 0; i < 5; ++i) myLeftController->appendEntry(ourControllerList[i].name, i+1); wid.push_back(myLeftController); ypos += lineHeight + 3; - new StaticTextWidget(myTab, xpos, ypos+1, lwidth, fontHeight, + new StaticTextWidget(myTab, font, xpos, ypos+1, lwidth, fontHeight, "Right Controller:", kTextAlignLeft); - myRightController = new PopUpWidget(myTab, xpos+lwidth, ypos, - fwidth + 15, lineHeight, - "", 0, 0); + myRightController = new PopUpWidget(myTab, font, xpos+lwidth, ypos, + pwidth, lineHeight, "", 0, 0); for(i = 0; i < 5; ++i) myRightController->appendEntry(ourControllerList[i].name, i+1); wid.push_back(myRightController); @@ -204,60 +199,59 @@ GameInfoDialog::GameInfoDialog( tabID = myTab->addTab("Display"); xpos = 10; ypos = vBorder; - lwidth = font.getStringWidth("Use HMBlanks: "); - new StaticTextWidget(myTab, xpos, ypos+1, lwidth, fontHeight, + lwidth = font.getStringWidth("Use Phosphor: "); + pwidth = font.getStringWidth("NTSC"); + new StaticTextWidget(myTab, font, xpos, ypos+1, lwidth, fontHeight, "Format:", kTextAlignLeft); - myFormat = new PopUpWidget(myTab, xpos+lwidth, ypos, - font.getStringWidth("NTSC") + 15, lineHeight, - "", 0, 0); + myFormat = new PopUpWidget(myTab, font, xpos+lwidth, ypos, + pwidth, lineHeight, "", 0, 0); myFormat->appendEntry("NTSC", 1); myFormat->appendEntry("PAL", 2); wid.push_back(myFormat); ypos += lineHeight + 3; - new StaticTextWidget(myTab, xpos, ypos+1, lwidth, fontHeight, + new StaticTextWidget(myTab, font, xpos, ypos+1, lwidth, fontHeight, "XStart:", kTextAlignLeft); - myXStart = new EditTextWidget(myTab, xpos+lwidth, ypos, + myXStart = new EditTextWidget(myTab, font, xpos+lwidth, ypos, 25, fontHeight, ""); wid.push_back(myXStart); ypos += lineHeight + 3; - new StaticTextWidget(myTab, xpos, ypos+1, lwidth, fontHeight, + new StaticTextWidget(myTab, font, xpos, ypos+1, lwidth, fontHeight, "Width:", kTextAlignLeft); - myWidth = new EditTextWidget(myTab, xpos+lwidth, ypos, + myWidth = new EditTextWidget(myTab, font, xpos+lwidth, ypos, 25, fontHeight, ""); wid.push_back(myWidth); ypos += lineHeight + 3; - new StaticTextWidget(myTab, xpos, ypos+1, lwidth, fontHeight, + new StaticTextWidget(myTab, font, xpos, ypos+1, lwidth, fontHeight, "YStart:", kTextAlignLeft); - myYStart = new EditTextWidget(myTab, xpos+lwidth, ypos, + myYStart = new EditTextWidget(myTab, font, xpos+lwidth, ypos, 25, fontHeight, ""); wid.push_back(myYStart); ypos += lineHeight + 3; - new StaticTextWidget(myTab, xpos, ypos+1, lwidth, fontHeight, + new StaticTextWidget(myTab, font, xpos, ypos+1, lwidth, fontHeight, "Height:", kTextAlignLeft); - myHeight = new EditTextWidget(myTab, xpos+lwidth, ypos, + myHeight = new EditTextWidget(myTab, font, xpos+lwidth, ypos, 25, fontHeight, ""); wid.push_back(myHeight); ypos += lineHeight + 3; - new StaticTextWidget(myTab, xpos, ypos+1, lwidth, fontHeight, + pwidth = font.getStringWidth("Yes"); + new StaticTextWidget(myTab, font, xpos, ypos+1, lwidth, fontHeight, "Use Phosphor:", kTextAlignLeft); - myPhosphor = new PopUpWidget(myTab, xpos+lwidth, ypos, - font.getStringWidth("Yes") + 15, lineHeight, - "", 0, 0); + myPhosphor = new PopUpWidget(myTab, font, xpos+lwidth, ypos, + pwidth, lineHeight, "", 0, 0); myPhosphor->appendEntry("Yes", 1); myPhosphor->appendEntry("No", 2); wid.push_back(myPhosphor); ypos += lineHeight + 3; - new StaticTextWidget(myTab, xpos, ypos+1, lwidth, fontHeight, + new StaticTextWidget(myTab, font, xpos, ypos+1, lwidth, fontHeight, "Use HMBlanks:", kTextAlignLeft); - myHmoveBlanks = new PopUpWidget(myTab, xpos+lwidth, ypos, - font.getStringWidth("Yes") + 15, lineHeight, - "", 0, 0); + myHmoveBlanks = new PopUpWidget(myTab, font, xpos+lwidth, ypos, + pwidth, lineHeight, "", 0, 0); myHmoveBlanks->appendEntry("Yes", 1); myHmoveBlanks->appendEntry("No", 2); wid.push_back(myHmoveBlanks); @@ -270,16 +264,16 @@ GameInfoDialog::GameInfoDialog( myTab->setActiveTab(0); // Add message concerning usage - new StaticTextWidget(this, 10, _h - 20, 120, fontHeight, + new StaticTextWidget(this, font, 10, _h - 20, 120, fontHeight, "(*) Requires a ROM reload", kTextAlignLeft); // Add Defaults, OK and Cancel buttons #ifndef MAC_OSX - addButton(_w - 2 * (kButtonWidth + 7), _h - 24, "OK", kOKCmd, 0); - addButton(_w - (kButtonWidth + 10), _h - 24, "Cancel", kCloseCmd, 0); + addButton(font, _w - 2 * (kButtonWidth + 7), _h - 24, "OK", kOKCmd, 0); + addButton(font, _w - (kButtonWidth + 10), _h - 24, "Cancel", kCloseCmd, 0); #else - addButton(_w - 2 * (kButtonWidth + 7), _h - 24, "Cancel", kCloseCmd, 0); - addButton(_w - (kButtonWidth + 10), _h - 24, "OK", kOKCmd, 0); + addButton(font, _w - 2 * (kButtonWidth + 7), _h - 24, "Cancel", kCloseCmd, 0); + addButton(font, _w - (kButtonWidth + 10), _h - 24, "OK", kOKCmd, 0); #endif } diff --git a/stella/src/gui/GameInfoDialog.hxx b/stella/src/gui/GameInfoDialog.hxx index c82178978..e992bba66 100644 --- a/stella/src/gui/GameInfoDialog.hxx +++ b/stella/src/gui/GameInfoDialog.hxx @@ -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: GameInfoDialog.hxx,v 1.14 2006-01-11 01:17:11 stephena Exp $ +// $Id: GameInfoDialog.hxx,v 1.15 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -43,7 +43,8 @@ struct PropType { class GameInfoDialog : public Dialog, public CommandSender { public: - GameInfoDialog(OSystem* osystem, DialogContainer* parent, GuiObject* boss, + GameInfoDialog(OSystem* osystem, DialogContainer* parent, + const GUI::Font& font, GuiObject* boss, int x, int y, int w, int h); ~GameInfoDialog(); diff --git a/stella/src/gui/GuiObject.hxx b/stella/src/gui/GuiObject.hxx index 8da1e3a13..a215d1960 100644 --- a/stella/src/gui/GuiObject.hxx +++ b/stella/src/gui/GuiObject.hxx @@ -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: GuiObject.hxx,v 1.18 2006-01-15 20:46:20 stephena Exp $ +// $Id: GuiObject.hxx,v 1.19 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -28,7 +28,6 @@ class Widget; #include "Command.hxx" #include "OSystem.hxx" #include "Array.hxx" -#include "Font.hxx" typedef Common::Array WidgetArray; @@ -47,7 +46,7 @@ enum { This is the base class for all GUI objects/widgets. @author Stephen Anthony - @version $Id: GuiObject.hxx,v 1.18 2006-01-15 20:46:20 stephena Exp $ + @version $Id: GuiObject.hxx,v 1.19 2006-02-22 17:38:04 stephena Exp $ */ class GuiObject : public CommandReceiver { @@ -63,7 +62,6 @@ class GuiObject : public CommandReceiver _w(w), _h(h), _dirty(false), - _font((GUI::Font*)&(osystem->font())), _firstWidget(0) {} virtual ~GuiObject() {} @@ -84,9 +82,6 @@ class GuiObject : public CommandReceiver virtual void setDirty() { _dirty = true; } - virtual void setFont(const GUI::Font& font) { _font = (GUI::Font*) &font; } - virtual const GUI::Font* font() { return _font; } - virtual bool isVisible() const = 0; virtual void draw() = 0; @@ -110,8 +105,6 @@ class GuiObject : public CommandReceiver int _w, _h; bool _dirty; - GUI::Font* _font; - Widget* _firstWidget; WidgetArray _focusList; }; diff --git a/stella/src/gui/GuiUtils.hxx b/stella/src/gui/GuiUtils.hxx index b90cea495..f8e633378 100644 --- a/stella/src/gui/GuiUtils.hxx +++ b/stella/src/gui/GuiUtils.hxx @@ -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: GuiUtils.hxx,v 1.21 2005-10-09 17:31:47 stephena Exp $ +// $Id: GuiUtils.hxx,v 1.22 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -29,12 +29,9 @@ Probably not very neat, but at least it works ... @author Stephen Anthony - @version $Id: GuiUtils.hxx,v 1.21 2005-10-09 17:31:47 stephena Exp $ + @version $Id: GuiUtils.hxx,v 1.22 2006-02-22 17:38:04 stephena Exp $ */ -#define kFontHeight 10 -#define kLineHeight 12 - #define kScrollBarWidth 9 // Colors indices to use for the various GUI elements diff --git a/stella/src/gui/HelpDialog.cxx b/stella/src/gui/HelpDialog.cxx index cc6d24ad9..bad2e9a62 100644 --- a/stella/src/gui/HelpDialog.cxx +++ b/stella/src/gui/HelpDialog.cxx @@ -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: HelpDialog.cxx,v 1.14 2005-10-24 18:18:30 stephena Exp $ +// $Id: HelpDialog.cxx,v 1.15 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -29,25 +29,26 @@ // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - HelpDialog::HelpDialog(OSystem* osystem, DialogContainer* parent, - int x, int y, int w, int h) + const GUI::Font& font, int x, int y, int w, int h) : Dialog(osystem, parent, x, y, w, h), myPage(1), myNumPages(4) { // Add Previous, Next and Close buttons - myPrevButton = addButton(10, h - 24, "Previous", kPrevCmd, 'P'); - myNextButton = addButton((kButtonWidth + 15), h - 24, + myPrevButton = addButton(font, 10, h - 24, "Previous", kPrevCmd, 'P'); + myNextButton = addButton(font, (kButtonWidth + 15), h - 24, "Next", kNextCmd, 'N'); - addButton(w - (kButtonWidth + 10), h - 24, "Close", kCloseCmd, 'C'); + addButton(font, w - (kButtonWidth + 10), h - 24, "Close", kCloseCmd, 'C'); myPrevButton->clearFlags(WIDGET_ENABLED); - myTitle = new StaticTextWidget(this, 5, 5, w-10, kFontHeight, "", kTextAlignCenter); + myTitle = new StaticTextWidget(this, font, 5, 5, w - 10, font.getFontHeight(), + "", kTextAlignCenter); for(uInt8 i = 0; i < LINES_PER_PAGE; i++) { - myKey[i] = new StaticTextWidget(this, 10, 18 + (10 * i), 80, kFontHeight, - "", kTextAlignLeft); - myDesc[i] = new StaticTextWidget(this, 90, 18 + (10 * i), 160, kFontHeight, - "", kTextAlignLeft); + myKey[i] = new StaticTextWidget(this, font, 10, 18 + (10 * i), 80, + font.getFontHeight(), "", kTextAlignLeft); + myDesc[i] = new StaticTextWidget(this, font, 90, 18 + (10 * i), 160, + font.getFontHeight(), "", kTextAlignLeft); } } diff --git a/stella/src/gui/HelpDialog.hxx b/stella/src/gui/HelpDialog.hxx index 912b9939d..71a6b00df 100644 --- a/stella/src/gui/HelpDialog.hxx +++ b/stella/src/gui/HelpDialog.hxx @@ -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: HelpDialog.hxx,v 1.6 2005-07-05 15:25:44 stephena Exp $ +// $Id: HelpDialog.hxx,v 1.7 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -41,7 +41,7 @@ class HelpDialog : public Dialog { public: HelpDialog(OSystem* osystem, DialogContainer* parent, - int x, int y, int w, int h); + const GUI::Font& font, int x, int y, int w, int h); ~HelpDialog(); protected: diff --git a/stella/src/gui/InputDialog.cxx b/stella/src/gui/InputDialog.cxx index c689706c1..5f6724715 100644 --- a/stella/src/gui/InputDialog.cxx +++ b/stella/src/gui/InputDialog.cxx @@ -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: InputDialog.cxx,v 1.10 2006-01-15 20:46:20 stephena Exp $ +// $Id: InputDialog.cxx,v 1.11 2006-02-22 17:38:04 stephena Exp $ //============================================================================ #include "OSystem.hxx" @@ -36,7 +36,7 @@ enum { // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - InputDialog::InputDialog(OSystem* osystem, DialogContainer* parent, - int x, int y, int w, int h) + const GUI::Font& font, int x, int y, int w, int h) : Dialog(osystem, parent, x, y, w, h) { const int vBorder = 4; @@ -44,19 +44,19 @@ InputDialog::InputDialog(OSystem* osystem, DialogContainer* parent, // The tab widget xpos = 2; ypos = vBorder; - myTab = new TabWidget(this, xpos, ypos, _w - 2*xpos, _h - 24 - 2*ypos); + myTab = new TabWidget(this, font, xpos, ypos, _w - 2*xpos, _h - 24 - 2*ypos); addTabWidget(myTab); // 1) Event mapper tabID = myTab->addTab("Event Mapping"); - myEventMapper = new EventMappingWidget(myTab, 2, 2, - myTab->getWidth(), - myTab->getHeight() - ypos); + myEventMapper = new EventMappingWidget(myTab, font, 2, 2, + myTab->getWidth(), + myTab->getHeight() - ypos); myTab->setParentWidget(tabID, myEventMapper); addToFocusList(myEventMapper->getFocusList(), tabID); // 2) Virtual device support - addVDeviceTab(); + addVDeviceTab(font); // Finalize the tabs, and activate the first tab myTab->activateTabs(); @@ -64,11 +64,11 @@ InputDialog::InputDialog(OSystem* osystem, DialogContainer* parent, // Add OK and Cancel buttons #ifndef MAC_OSX - addButton(_w - 2 * (kButtonWidth + 7), _h - 24, "OK", kOKCmd, 0); - addButton(_w - (kButtonWidth + 10), _h - 24, "Cancel", kCloseCmd, 0); + addButton(font, _w - 2 * (kButtonWidth + 7), _h - 24, "OK", kOKCmd, 0); + addButton(font, _w - (kButtonWidth + 10), _h - 24, "Cancel", kCloseCmd, 0); #else - addButton(_w - 2 * (kButtonWidth + 7), _h - 24, "Cancel", kCloseCmd, 0); - addButton(_w - (kButtonWidth + 10), _h - 24, "OK", kOKCmd, 0); + addButton(font, _w - 2 * (kButtonWidth + 7), _h - 24, "Cancel", kCloseCmd, 0); + addButton(font, _w - (kButtonWidth + 10), _h - 24, "OK", kOKCmd, 0); #endif } @@ -78,14 +78,11 @@ InputDialog::~InputDialog() } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void InputDialog::addVDeviceTab() +void InputDialog::addVDeviceTab(const GUI::Font& font) { - const GUI::Font& font = instance()->font(); - const int fontHeight = font.getFontHeight(), - lineHeight = font.getLineHeight(); - + const int lineHeight = font.getLineHeight(); + int xpos, ypos, lwidth, pwidth, tabID; WidgetArray wid; - int xpos, ypos, lwidth, fwidth, tabID; // Virtual device/ports tabID = myTab->addTab("Virtual Devices"); @@ -93,20 +90,17 @@ void InputDialog::addVDeviceTab() // Stelladaptor mappings xpos = 5; ypos = 5; lwidth = font.getStringWidth("Stelladaptor 2 is: "); - fwidth = _w - xpos - lwidth - 10; - new StaticTextWidget(myTab, xpos, ypos+1, lwidth, fontHeight, - "Stelladaptor 1 is:", kTextAlignLeft); - myLeftPort = new PopUpWidget(myTab, xpos+lwidth, ypos, - fwidth, lineHeight, "", 0, 0); + pwidth = font.getStringWidth("right virtual port"); + + myLeftPort = new PopUpWidget(myTab, font, xpos, ypos, pwidth, lineHeight, + "Stelladaptor 1 is: ", lwidth); myLeftPort->appendEntry("left virtual port", 1); myLeftPort->appendEntry("right virtual port", 2); wid.push_back(myLeftPort); ypos += lineHeight + 3; - new StaticTextWidget(myTab, xpos, ypos+1, lwidth, fontHeight, - "Stelladaptor 2 is:", kTextAlignLeft); - myRightPort = new PopUpWidget(myTab, xpos+lwidth, ypos, - fwidth, lineHeight, "", 0, 0); + myRightPort = new PopUpWidget(myTab, font, xpos, ypos, pwidth, lineHeight, + "Stelladaptor 2 is: ", lwidth); myRightPort->appendEntry("left virtual port", 1); myRightPort->appendEntry("right virtual port", 2); wid.push_back(myRightPort); @@ -114,60 +108,60 @@ void InputDialog::addVDeviceTab() // Add 'mouse to paddle' mapping ypos += 2*lineHeight; lwidth = font.getStringWidth("Mouse is paddle: "); - myPaddleMode = new SliderWidget(myTab, xpos, ypos, lwidth + 30, lineHeight, - "Mouse is paddle: ", - lwidth, kPaddleChanged); + pwidth = font.getMaxCharWidth() * 5; + myPaddleMode = new SliderWidget(myTab, font, xpos, ypos, pwidth, lineHeight, + "Mouse is paddle: ", lwidth, kPaddleChanged); myPaddleMode->setMinValue(0); myPaddleMode->setMaxValue(3); xpos += myPaddleMode->getWidth() + 5; - myPaddleModeLabel = new StaticTextWidget(myTab, xpos, ypos+1, 24, lineHeight, + myPaddleModeLabel = new StaticTextWidget(myTab, font, xpos, ypos+1, 24, lineHeight, "", kTextAlignLeft); myPaddleModeLabel->setFlags(WIDGET_CLEARBG); wid.push_back(myPaddleMode); // Add paddle 0 speed xpos = 5; ypos += lineHeight + 3; - myPaddleSpeed[0] = new SliderWidget(myTab, xpos, ypos, lwidth + 30, lineHeight, + myPaddleSpeed[0] = new SliderWidget(myTab, font, xpos, ypos, pwidth, lineHeight, "Paddle 1 speed: ", lwidth, kP0SpeedID); myPaddleSpeed[0]->setMinValue(1); myPaddleSpeed[0]->setMaxValue(100); xpos += myPaddleSpeed[0]->getWidth() + 5; - myPaddleLabel[0] = new StaticTextWidget(myTab, xpos, ypos+1, 24, lineHeight, + myPaddleLabel[0] = new StaticTextWidget(myTab, font, xpos, ypos+1, 24, lineHeight, "", kTextAlignLeft); myPaddleLabel[0]->setFlags(WIDGET_CLEARBG); wid.push_back(myPaddleSpeed[0]); // Add paddle 1 speed xpos = 5; ypos += lineHeight + 3; - myPaddleSpeed[1] = new SliderWidget(myTab, xpos, ypos, lwidth + 30, lineHeight, + myPaddleSpeed[1] = new SliderWidget(myTab, font, xpos, ypos, pwidth, lineHeight, "Paddle 2 speed: ", lwidth, kP1SpeedID); myPaddleSpeed[1]->setMinValue(1); myPaddleSpeed[1]->setMaxValue(100); xpos += myPaddleSpeed[1]->getWidth() + 5; - myPaddleLabel[1] = new StaticTextWidget(myTab, xpos, ypos+1, 24, lineHeight, + myPaddleLabel[1] = new StaticTextWidget(myTab, font, xpos, ypos+1, 24, lineHeight, "", kTextAlignLeft); myPaddleLabel[1]->setFlags(WIDGET_CLEARBG); wid.push_back(myPaddleSpeed[1]); // Add paddle 2 speed xpos = 5; ypos += lineHeight + 3; - myPaddleSpeed[2] = new SliderWidget(myTab, xpos, ypos, lwidth + 30, lineHeight, + myPaddleSpeed[2] = new SliderWidget(myTab, font, xpos, ypos, pwidth, lineHeight, "Paddle 3 speed: ", lwidth, kP2SpeedID); myPaddleSpeed[2]->setMinValue(1); myPaddleSpeed[2]->setMaxValue(100); xpos += myPaddleSpeed[2]->getWidth() + 5; - myPaddleLabel[2] = new StaticTextWidget(myTab, xpos, ypos+1, 24, lineHeight, + myPaddleLabel[2] = new StaticTextWidget(myTab, font, xpos, ypos+1, 24, lineHeight, "", kTextAlignLeft); myPaddleLabel[2]->setFlags(WIDGET_CLEARBG); wid.push_back(myPaddleSpeed[2]); // Add paddle 3 speed xpos = 5; ypos += lineHeight + 3; - myPaddleSpeed[3] = new SliderWidget(myTab, xpos, ypos, lwidth + 30, lineHeight, + myPaddleSpeed[3] = new SliderWidget(myTab, font, xpos, ypos, pwidth, lineHeight, "Paddle 4 speed: ", lwidth, kP3SpeedID); myPaddleSpeed[3]->setMinValue(1); myPaddleSpeed[3]->setMaxValue(100); xpos += myPaddleSpeed[3]->getWidth() + 5; - myPaddleLabel[3] = new StaticTextWidget(myTab, xpos, ypos+1, 24, lineHeight, + myPaddleLabel[3] = new StaticTextWidget(myTab, font, xpos, ypos+1, 24, lineHeight, "", kTextAlignLeft); myPaddleLabel[3]->setFlags(WIDGET_CLEARBG); wid.push_back(myPaddleSpeed[3]); diff --git a/stella/src/gui/InputDialog.hxx b/stella/src/gui/InputDialog.hxx index c6511a0ca..54033aa5b 100644 --- a/stella/src/gui/InputDialog.hxx +++ b/stella/src/gui/InputDialog.hxx @@ -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: InputDialog.hxx,v 1.5 2006-01-09 19:30:04 stephena Exp $ +// $Id: InputDialog.hxx,v 1.6 2006-02-22 17:38:04 stephena Exp $ //============================================================================ #ifndef INPUT_DIALOG_HXX @@ -35,7 +35,7 @@ class InputDialog : public Dialog { public: InputDialog(OSystem* osystem, DialogContainer* parent, - int x, int y, int w, int h); + const GUI::Font& font, int x, int y, int w, int h); ~InputDialog(); protected: @@ -49,7 +49,7 @@ class InputDialog : public Dialog void saveConfig(); private: - void addVDeviceTab(); + void addVDeviceTab(const GUI::Font& font); private: TabWidget* myTab; diff --git a/stella/src/gui/InputTextDialog.cxx b/stella/src/gui/InputTextDialog.cxx index 2ab4d3983..276799a19 100644 --- a/stella/src/gui/InputTextDialog.cxx +++ b/stella/src/gui/InputTextDialog.cxx @@ -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.10 2005-12-20 19:05:16 stephena Exp $ +// $Id: InputTextDialog.cxx,v 1.11 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -66,16 +66,13 @@ InputTextDialog::InputTextDialog(GuiObject* boss, const GUI::Font& font, for(i = 0; i < labels.size(); ++i) { xpos = 10; - StaticTextWidget* t = - new StaticTextWidget(this, xpos, ypos, - lwidth, fontHeight, - labels[i], kTextAlignLeft); - t->setFont(font); + new StaticTextWidget(this, font, xpos, ypos, + lwidth, fontHeight, + labels[i], kTextAlignLeft); xpos += lwidth + fontWidth; - EditTextWidget* w = new EditTextWidget(this, xpos, ypos, + EditTextWidget* w = new EditTextWidget(this, font, xpos, ypos, _w - xpos - 10, lineHeight, ""); - w->setFont(font); wid.push_back(w); myInput.push_back(w); @@ -84,16 +81,16 @@ InputTextDialog::InputTextDialog(GuiObject* boss, const GUI::Font& font, addToFocusList(wid); xpos = 10; - myTitle = new StaticTextWidget(this, xpos, ypos, _w - 2*xpos, fontHeight, + myTitle = new StaticTextWidget(this, font, xpos, ypos, _w - 2*xpos, fontHeight, "", kTextAlignCenter); myTitle->setColor(kTextColorEm); #ifndef MAC_OSX - addButton(_w - 2 * (kButtonWidth + 10), _h - 24, "OK", kAcceptCmd, 0); - addButton(_w - (kButtonWidth+10), _h - 24, "Cancel", kCloseCmd, 0); + addButton(font, _w - 2 * (kButtonWidth + 10), _h - 24, "OK", kAcceptCmd, 0); + addButton(font, _w - (kButtonWidth+10), _h - 24, "Cancel", kCloseCmd, 0); #else - addButton(_w - 2 * (kButtonWidth + 10), _h - 24, "Cancel", kCloseCmd, 0); - addButton(_w - (kButtonWidth+10), _h - 24, "OK", kAcceptCmd, 0); + addButton(font, _w - 2 * (kButtonWidth + 10), _h - 24, "Cancel", kCloseCmd, 0); + addButton(font, _w - (kButtonWidth+10), _h - 24, "OK", kAcceptCmd, 0); #endif } diff --git a/stella/src/gui/Launcher.hxx b/stella/src/gui/Launcher.hxx index 0ea8abad2..d26f211f4 100644 --- a/stella/src/gui/Launcher.hxx +++ b/stella/src/gui/Launcher.hxx @@ -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: Launcher.hxx,v 1.4 2005-06-16 00:55:59 stephena Exp $ +// $Id: Launcher.hxx,v 1.5 2006-02-22 17:38:04 stephena Exp $ //============================================================================ #ifndef LAUNCHER_HXX @@ -24,15 +24,17 @@ class OSystem; #include "DialogContainer.hxx" enum { - kLauncherWidth = 320, + kLauncherWidth = 320, kLauncherHeight = 240 +// kLauncherWidth = 639, +// kLauncherHeight = 479 }; /** The base dialog for the ROM launcher in Stella. @author Stephen Anthony - @version $Id: Launcher.hxx,v 1.4 2005-06-16 00:55:59 stephena Exp $ + @version $Id: Launcher.hxx,v 1.5 2006-02-22 17:38:04 stephena Exp $ */ class Launcher : public DialogContainer { diff --git a/stella/src/gui/LauncherDialog.cxx b/stella/src/gui/LauncherDialog.cxx index 0f8e6fde7..700702270 100644 --- a/stella/src/gui/LauncherDialog.cxx +++ b/stella/src/gui/LauncherDialog.cxx @@ -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: LauncherDialog.cxx,v 1.38 2006-01-15 16:31:01 stephena Exp $ +// $Id: LauncherDialog.cxx,v 1.39 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -39,9 +39,6 @@ #include "bspf.hxx" -///////////////////////////////////////// -// TODO - make this dialog font sensitive -///////////////////////////////////////// // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - LauncherDialog::LauncherDialog(OSystem* osystem, DialogContainer* parent, @@ -56,80 +53,98 @@ LauncherDialog::LauncherDialog(OSystem* osystem, DialogContainer* parent, myProgressBar(NULL), mySelectedItem(0) { - const GUI::Font& font = instance()->font(); - const int fontHeight = font.getFontHeight(); + const GUI::Font& font = instance()->launcherFont(); +// const GUI::Font& font = instance()->font(); + const int fontHeight = font.getFontHeight(); + const int bwidth = (_w - 2 * 10 - 8 * (4 - 1)) / 4; + const int bheight = font.getLineHeight() + 4; + int xpos = 0, ypos = 0, lwidth = 0; WidgetArray wid; // Show game name - new StaticTextWidget(this, 10, 8, 200, fontHeight, + lwidth = font.getStringWidth("Select a game from the list ..."); + xpos += 10; ypos += 8; + new StaticTextWidget(this, font, xpos, ypos, lwidth, fontHeight, "Select a game from the list ...", kTextAlignLeft); - myRomCount = new StaticTextWidget(this, _w - 100, 8, 90, fontHeight, + lwidth = font.getStringWidth("XXXX files found"); + xpos = _w - lwidth - 10; + myRomCount = new StaticTextWidget(this, font, xpos, ypos, + lwidth, fontHeight, "", kTextAlignRight); - // Add four buttons at the bottom - const int border = 10; - const int space = 8; - const int buttons = 4; - const int width = (_w - 2 * border - space * (buttons - 1)) / buttons; - int xpos = border; - -#ifndef MAC_OSX - myStartButton = new ButtonWidget(this, xpos, _h - 24, width, 16, "Play", kStartCmd, 'S'); - myStartButton->setEditable(true); - wid.push_back(myStartButton); - xpos += space + width; - myOptionsButton = new ButtonWidget(this, xpos, _h - 24, width, 16, "Options", kOptionsCmd, 'O'); - myOptionsButton->setEditable(true); - wid.push_back(myOptionsButton); - xpos += space + width; - myReloadButton = new ButtonWidget(this, xpos, _h - 24, width, 16, "Reload", kReloadCmd, 'R'); - myReloadButton->setEditable(true); - wid.push_back(myReloadButton); - xpos += space + width; - myQuitButton = new ButtonWidget(this, xpos, _h - 24, width, 16, "Quit", kQuitCmd, 'Q'); - myQuitButton->setEditable(true); - wid.push_back(myQuitButton); - xpos += space + width; - mySelectedItem = 0; // Highlight 'Play' button -#else - myQuitButton = new ButtonWidget(this, xpos, _h - 24, width, 16, "Quit", kQuitCmd, 'Q'); - myQuitButton->setEditable(true); - wid.push_back(myQuitButton); - xpos += space + width; - myOptionsButton = new ButtonWidget(this, xpos, _h - 24, width, 16, "Options", kOptionsCmd, 'O'); - myOptionsButton->setEditable(true); - wid.push_back(myOptionsButton); - xpos += space + width; - myReloadButton = new ButtonWidget(this, xpos, _h - 24, width, 16, "Reload", kReloadCmd, 'R'); - myReloadButton->setEditable(true); - wid.push_back(myReloadButton); - xpos += space + width; - myStartButton = new ButtonWidget(this, xpos, _h - 24, width, 16, "Start", kStartCmd, 'Q'); - myStartButton->setEditable(true); - wid.push_back(myStartButton); - xpos += space + width; - mySelectedItem = 3; // Highlight 'Play' button -#endif - // Add list with game titles // The list isn't added to focus objects, but is instead made 'sticky' // This means it will act as if it were focused (wrt how it's drawn), but // won't actually be able to lose focus - myList = new StringListWidget(this, instance()->font(), - 10, 24, _w - 20, _h - 24 - 26 - 10 - 10); + xpos = 10; ypos += fontHeight + 5; + myList = new StringListWidget(this, font, xpos, ypos, + _w - 20, _h - 28 - bheight - 2*fontHeight); myList->setNumberingMode(kListNumberingOff); myList->setEditable(false); myList->setFlags(WIDGET_STICKY_FOCUS); // Add note textwidget to show any notes for the currently selected ROM - new StaticTextWidget(this, 20, _h - 43, 30, fontHeight, "Note:", kTextAlignLeft); - myNote = new StaticTextWidget(this, 50, _h - 43, w - 70, fontHeight, + xpos += 5; ypos += myList->getHeight() + 4; + lwidth = font.getStringWidth("Note:"); + new StaticTextWidget(this, font, xpos, ypos, lwidth, fontHeight, + "Note:", kTextAlignLeft); + xpos += lwidth + 5; + myNote = new StaticTextWidget(this, font, xpos, ypos, + _w - xpos - 10, fontHeight, "", kTextAlignLeft); + // Add four buttons at the bottom + xpos = 10; ypos += myNote->getHeight() + 4; +#ifndef MAC_OSX + myStartButton = new ButtonWidget(this, font, xpos, ypos, bwidth, bheight, + "Play", kStartCmd, 'S'); + myStartButton->setEditable(true); + wid.push_back(myStartButton); + xpos += bwidth + 8; + myOptionsButton = new ButtonWidget(this, font, xpos, ypos, bwidth, bheight, + "Options", kOptionsCmd, 'O'); + myOptionsButton->setEditable(true); + wid.push_back(myOptionsButton); + xpos += bwidth + 8; + myReloadButton = new ButtonWidget(this, font, xpos, ypos, bwidth, bheight, + "Reload", kReloadCmd, 'R'); + myReloadButton->setEditable(true); + wid.push_back(myReloadButton); + xpos += bwidth + 8; + myQuitButton = new ButtonWidget(this, font, xpos, ypos, bwidth, bheight, + "Quit", kQuitCmd, 'Q'); + myQuitButton->setEditable(true); + wid.push_back(myQuitButton); + xpos += bwidth + 8; + mySelectedItem = 0; // Highlight 'Play' button +#else + myQuitButton = new ButtonWidget(this, font, xpos, ypos, bwidth, bheight, + "Quit", kQuitCmd, 'Q'); + myQuitButton->setEditable(true); + wid.push_back(myQuitButton); + xpos += bwidth + 8; + myOptionsButton = new ButtonWidget(this, font, xpos, ypos, bwidth, bheight, + "Options", kOptionsCmd, 'O'); + myOptionsButton->setEditable(true); + wid.push_back(myOptionsButton); + xpos += bwidth + 8; + myReloadButton = new ButtonWidget(this, font, xpos, ypos, bwidth, bheight, + "Reload", kReloadCmd, 'R'); + myReloadButton->setEditable(true); + wid.push_back(myReloadButton); + xpos += bwidth + 8; + myStartButton = new ButtonWidget(this, font, xpos, ypos, bwidth, bheight, + "Start", kStartCmd, 'Q'); + myStartButton->setEditable(true); + wid.push_back(myStartButton); + xpos += bwidth + 8; + mySelectedItem = 3; // Highlight 'Play' button +#endif + // Create the launcher options dialog, where you can change ROM // and snapshot paths - myOptions = new LauncherOptionsDialog(osystem, parent, this, + myOptions = new LauncherOptionsDialog(osystem, parent, font, this, 20, 60, _w - 40, _h - 120); // Create a game list, which contains all the information about a ROM that @@ -253,7 +268,7 @@ void LauncherDialog::loadListFromDisk() // Create a progress dialog box to show the progress of processing // the ROMs, since this is usually a time-consuming operation - ProgressDialog progress(this, instance()->font(), + ProgressDialog progress(this, instance()->launcherFont(), "Loading ROM's from disk ..."); progress.setRange(0, files.size() - 1, 10); diff --git a/stella/src/gui/LauncherOptionsDialog.cxx b/stella/src/gui/LauncherOptionsDialog.cxx index f42bb7ed0..595390a2f 100644 --- a/stella/src/gui/LauncherOptionsDialog.cxx +++ b/stella/src/gui/LauncherOptionsDialog.cxx @@ -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: LauncherOptionsDialog.cxx,v 1.13 2005-09-15 19:43:36 stephena Exp $ +// $Id: LauncherOptionsDialog.cxx,v 1.14 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -30,31 +30,33 @@ // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - LauncherOptionsDialog::LauncherOptionsDialog( - OSystem* osystem, DialogContainer* parent, GuiObject* boss, + OSystem* osystem, DialogContainer* parent, + const GUI::Font& font, GuiObject* boss, int x, int y, int w, int h) : Dialog(osystem, parent, x, y, w, h), CommandSender(boss), myBrowser(NULL) { - const GUI::Font& font = instance()->font(); - const int vBorder = 4; - int xpos, ypos; + int xpos, ypos, bwidth, bheight; + + bwidth = font.getStringWidth("Cancel") + 20; + bheight = font.getLineHeight() + 4; // The tab widget xpos = 2; ypos = vBorder; - myTab = new TabWidget(this, xpos, ypos, _w - 2*xpos, _h - 24 - 2*ypos); + myTab = new TabWidget(this, font, xpos, ypos, _w - 2*xpos, _h - 2*bheight - ypos); // 1) The ROM locations tab myTab->addTab("ROM Settings"); // ROM path - xpos = 15; - new ButtonWidget(myTab, xpos, ypos, kButtonWidth + 14, 16, "Path", + xpos = 15; ypos += 5; + new ButtonWidget(myTab, font, xpos, ypos, bwidth, bheight, "Path", kChooseRomDirCmd, 0); - xpos += kButtonWidth + 30; - myRomPath = new StaticTextWidget(myTab, xpos, ypos + 3, - _w - xpos - 10, kLineHeight, + xpos += bwidth + 20; + myRomPath = new StaticTextWidget(myTab, font, xpos, ypos + 3, + _w - xpos - 10, font.getLineHeight(), "", kTextAlignLeft); // 2) The snapshot settings tab @@ -62,22 +64,25 @@ LauncherOptionsDialog::LauncherOptionsDialog( // Snapshot path xpos = 15; - new ButtonWidget(myTab, xpos, ypos, kButtonWidth + 14, 16, "Path", + new ButtonWidget(myTab, font, xpos, ypos, bwidth, bheight, "Path", kChooseSnapDirCmd, 0); - xpos += kButtonWidth + 30; - mySnapPath = new StaticTextWidget(myTab, xpos, ypos + 3, - _w - xpos - 10, kLineHeight, - "", kTextAlignLeft); + xpos += bwidth + 20; + mySnapPath = new StaticTextWidget(myTab, font, xpos, ypos + 3, + _w - xpos - 10, font.getLineHeight(), + "", kTextAlignLeft); // Snapshot save name - xpos = 10; ypos += 22; - mySnapTypePopup = new PopUpWidget(myTab, xpos, ypos, 140, kLineHeight, - "Save snapshot as: ", 87, 0); + xpos = 10; ypos += mySnapPath->getHeight() + 8; + mySnapTypePopup = new PopUpWidget(myTab, font, xpos, ypos, + font.getStringWidth("romname"), + font.getLineHeight(), + "Save snapshot as: ", + font.getStringWidth("Save snapshot as: "), 0); mySnapTypePopup->appendEntry("romname", 1); mySnapTypePopup->appendEntry("md5sum", 2); // Snapshot single or multiple saves - xpos = 30; ypos += 18; + xpos = 30; ypos += mySnapTypePopup->getHeight() + 8; mySnapSingleCheckbox = new CheckboxWidget(myTab, font, xpos, ypos, "Multiple snapshots"); @@ -86,17 +91,25 @@ LauncherOptionsDialog::LauncherOptionsDialog( // Add OK & Cancel buttons #ifndef MAC_OSX - addButton(_w - 2 *(kButtonWidth + 10), _h - 24, "OK", kOKCmd, 0); - addButton(_w - (kButtonWidth + 10), _h - 24, "Cancel", kCloseCmd, 0); + xpos = _w - 2 *(bwidth + 10); ypos = _h - bheight - 8; + new ButtonWidget(this, font, xpos, ypos, bwidth, bheight, "OK", + kOKCmd, 0); + xpos += bwidth + 10; + new ButtonWidget(this, font, xpos, ypos, bwidth, bheight, "Cancel", + kCloseCmd, 0); #else - addButton(_w - 2 *(kButtonWidth + 10), _h - 24, "Cancel", kCloseCmd, 0); - addButton(_w - (kButtonWidth + 10), _h - 24, "OK", kOKCmd, 0); + xpos = _w - 2 *(bwidth + 10); ypos = _h - bheight - 8; + new ButtonWidget(this, font, xpos, ypos, bwidth, bheight, "Cancel", + kCloseCmd, 0); + xpos += bwidth + 10; + new ButtonWidget(this, font, xpos, ypos, bwidth, bheight, "OK", + kOKCmd, 0); #endif // Create file browser dialog int baseW = instance()->frameBuffer().baseWidth(); int baseH = instance()->frameBuffer().baseHeight(); - myBrowser = new BrowserDialog(this, 60, 20, baseW - 120, baseH - 40); + myBrowser = new BrowserDialog(this, font, 60, 20, baseW - 120, baseH - 40); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/stella/src/gui/LauncherOptionsDialog.hxx b/stella/src/gui/LauncherOptionsDialog.hxx index 82a4b1891..175a57e72 100644 --- a/stella/src/gui/LauncherOptionsDialog.hxx +++ b/stella/src/gui/LauncherOptionsDialog.hxx @@ -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: LauncherOptionsDialog.hxx,v 1.7 2005-08-01 22:33:15 stephena Exp $ +// $Id: LauncherOptionsDialog.hxx,v 1.8 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -38,7 +38,7 @@ class LauncherOptionsDialog : public Dialog, public CommandSender { public: LauncherOptionsDialog(OSystem* osystem, DialogContainer* parent, - GuiObject* boss, + const GUI::Font& font, GuiObject* boss, int x, int y, int w, int h); ~LauncherOptionsDialog(); diff --git a/stella/src/gui/ListWidget.cxx b/stella/src/gui/ListWidget.cxx index efbc5a518..0c5d42954 100644 --- a/stella/src/gui/ListWidget.cxx +++ b/stella/src/gui/ListWidget.cxx @@ -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: ListWidget.cxx,v 1.39 2006-01-15 20:46:20 stephena Exp $ +// $Id: ListWidget.cxx,v 1.40 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -33,7 +33,7 @@ // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ListWidget::ListWidget(GuiObject* boss, const GUI::Font& font, int x, int y, int w, int h) - : EditableWidget(boss, x, y, 16, 16), + : EditableWidget(boss, font, x, y, 16, 16), _rows(0), _cols(0), _currentPos(0), @@ -47,19 +47,15 @@ ListWidget::ListWidget(GuiObject* boss, const GUI::Font& font, _flags = WIDGET_ENABLED | WIDGET_CLEARBG | WIDGET_RETAIN_FOCUS; _type = kListWidget; - setFont(font); - - _colWidth = font.getMaxCharWidth(); - _rowHeight = font.getLineHeight(); - _cols = w / _colWidth; - _rows = h / _rowHeight; + _cols = w / _fontWidth; + _rows = h / _fontHeight; // Set real dimensions _w = w - kScrollBarWidth; _h = h + 2; // Create scrollbar and attach to the list - _scrollBar = new ScrollBarWidget(boss, _x + _w, _y, kScrollBarWidth, _h); + _scrollBar = new ScrollBarWidget(boss, font, _x + _w, _y, kScrollBarWidth, _h); _scrollBar->setTarget(this); } @@ -200,7 +196,7 @@ void ListWidget::handleMouseWheel(int x, int y, int direction) // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - int ListWidget::findItem(int x, int y) const { - return (y - 1) / _rowHeight + _currentPos; + return (y - 1) / _fontHeight + _currentPos; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/stella/src/gui/ListWidget.hxx b/stella/src/gui/ListWidget.hxx index 14384b625..2a60b2a5c 100644 --- a/stella/src/gui/ListWidget.hxx +++ b/stella/src/gui/ListWidget.hxx @@ -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: ListWidget.hxx,v 1.15 2006-01-04 01:24:17 stephena Exp $ +// $Id: ListWidget.hxx,v 1.16 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -95,8 +95,6 @@ class ListWidget : public EditableWidget protected: int _rows; int _cols; - int _rowHeight; - int _colWidth; int _currentPos; int _selectedItem; int _highlightedItem; diff --git a/stella/src/gui/OptionsDialog.cxx b/stella/src/gui/OptionsDialog.cxx index f8ac98fee..e47f25104 100644 --- a/stella/src/gui/OptionsDialog.cxx +++ b/stella/src/gui/OptionsDialog.cxx @@ -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: OptionsDialog.cxx,v 1.35 2005-12-18 18:37:03 stephena Exp $ +// $Id: OptionsDialog.cxx,v 1.36 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -57,7 +57,7 @@ enum { }; #define addBigButton(label, cmd, hotkey) \ - new ButtonWidget(this, xoffset, yoffset, kBigButtonWidth, 18, label, cmd, hotkey); yoffset += kRowHeight + new ButtonWidget(this, font, xoffset, yoffset, kBigButtonWidth, 18, label, cmd, hotkey); yoffset += kRowHeight // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - OptionsDialog::OptionsDialog(OSystem* osystem, DialogContainer* parent) @@ -76,6 +76,7 @@ OptionsDialog::OptionsDialog(OSystem* osystem, DialogContainer* parent) int yoffset = 7; const int xoffset = (_w - kBigButtonWidth) / 2; + const GUI::Font& font = instance()->font(); // FIXME - change reference to optionsFont() ButtonWidget* b = NULL; b = addBigButton("Video Settings", kVidCmd, 0); @@ -105,33 +106,33 @@ OptionsDialog::OptionsDialog(OSystem* osystem, DialogContainer* parent) // Now create all the dialogs attached to each menu button w = 230; h = 130; checkBounds(fbWidth, fbHeight, &x, &y, &w, &h); - myVideoDialog = new VideoDialog(myOSystem, parent, x, y, w, h); + myVideoDialog = new VideoDialog(myOSystem, parent, font, x, y, w, h); w = 200; h = 110; checkBounds(fbWidth, fbHeight, &x, &y, &w, &h); - myAudioDialog = new AudioDialog(myOSystem, parent, x, y, w, h); + myAudioDialog = new AudioDialog(myOSystem, parent, font, x, y, w, h); w = 230; h = 170; checkBounds(fbWidth, fbHeight, &x, &y, &w, &h); - myInputDialog = new InputDialog(myOSystem, parent, x, y, w, h); + myInputDialog = new InputDialog(myOSystem, parent, font, x, y, w, h); w = 255; h = 175; checkBounds(fbWidth, fbHeight, &x, &y, &w, &h); - myGameInfoDialog = new GameInfoDialog(myOSystem, parent, this, x, y, w, h); + myGameInfoDialog = new GameInfoDialog(myOSystem, parent, font, this, x, y, w, h); #ifdef CHEATCODE_SUPPORT w = 230; h = 150; checkBounds(fbWidth, fbHeight, &x, &y, &w, &h); - myCheatCodeDialog = new CheatCodeDialog(myOSystem, parent, x, y, w, h); + myCheatCodeDialog = new CheatCodeDialog(myOSystem, parent, font, x, y, w, h); #endif w = 255; h = 150; checkBounds(fbWidth, fbHeight, &x, &y, &w, &h); - myHelpDialog = new HelpDialog(myOSystem, parent, x, y, w, h); + myHelpDialog = new HelpDialog(myOSystem, parent, font, x, y, w, h); w = 255; h = 150; checkBounds(fbWidth, fbHeight, &x, &y, &w, &h); - myAboutDialog = new AboutDialog(myOSystem, parent, x, y, w, h); + myAboutDialog = new AboutDialog(myOSystem, parent, font, x, y, w, h); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/stella/src/gui/PopUpWidget.cxx b/stella/src/gui/PopUpWidget.cxx index c55659661..0cbb4824a 100644 --- a/stella/src/gui/PopUpWidget.cxx +++ b/stella/src/gui/PopUpWidget.cxx @@ -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.23 2006-01-15 20:46:20 stephena Exp $ +// $Id: PopUpWidget.cxx,v 1.24 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -53,8 +53,8 @@ PopUpDialog::PopUpDialog(PopUpWidget* boss, int clickX, int clickY) // Calculate real popup dimensions _x = _popUpBoss->getAbsX() + _popUpBoss->_labelWidth; - _y = _popUpBoss->getAbsY() - _popUpBoss->_selectedItem * kLineHeight; - _w = _popUpBoss->_w - kLineHeight + 2 - _popUpBoss->_labelWidth; + _y = _popUpBoss->getAbsY() - _popUpBoss->_selectedItem * _popUpBoss->_fontHeight; + _w = _popUpBoss->_w - _popUpBoss->_labelWidth - 10; _h = 2; } @@ -86,8 +86,8 @@ void PopUpDialog::drawDialog() // The last entry may be empty. Fill it with black. if(_twoColumns && (count & 1)) - fb.fillRect(_x + 1 + _w / 2, _y + 1 + kLineHeight * (_entriesPerColumn - 1), - _w / 2 - 1, kLineHeight, kBGColor); + fb.fillRect(_x + 1 + _w / 2, _y + 1 + _popUpBoss->_fontHeight * (_entriesPerColumn - 1), + _w / 2 - 1, _popUpBoss->_fontHeight, kBGColor); _dirty = false; fb.addDirtyRect(_x, _y, _w, _h); @@ -178,12 +178,12 @@ void PopUpDialog::drawMenuEntry(int entry, bool hilite) if (entry >= n) { x = _x + 1 + _w / 2; - y = _y + 1 + kLineHeight * (entry - n); + y = _y + 1 + _popUpBoss->_fontHeight * (entry - n); } else { x = _x + 1; - y = _y + 1 + kLineHeight * entry; + y = _y + 1 + _popUpBoss->_fontHeight * entry; } w = _w / 2 - 1; @@ -191,18 +191,18 @@ void PopUpDialog::drawMenuEntry(int entry, bool hilite) else { x = _x + 1; - y = _y + 1 + kLineHeight * entry; + y = _y + 1 + _popUpBoss->_fontHeight * entry; w = _w - 2; } string& name = _popUpBoss->_entries[entry].name; - fb.fillRect(x, y, w, kLineHeight, hilite ? kTextColorHi : kBGColor); + fb.fillRect(x, y, w, _popUpBoss->_fontHeight, hilite ? kTextColorHi : kBGColor); if(name.size() == 0) { // Draw a separator - fb.hLine(x - 1, y + kLineHeight / 2, x + w, kShadowColor); - fb.hLine(x, y + 1 + kLineHeight / 2, x + w, kColor); + fb.hLine(x - 1, y + _popUpBoss->_fontHeight / 2, x + w, kShadowColor); + fb.hLine(x, y + 1 + _popUpBoss->_fontHeight / 2, x + w, kColor); } else fb.drawString(_popUpBoss->font(), name, x + 1, y + 2, w - 2, @@ -215,7 +215,7 @@ void PopUpDialog::recalc() // Perform clipping / switch to scrolling mode if we don't fit on the screen const int height = instance()->frameBuffer().baseHeight(); - _h = _popUpBoss->_entries.size() * kLineHeight + 2; + _h = _popUpBoss->_entries.size() * _popUpBoss->_fontHeight + 2; // HACK: For now, we do not do scrolling. Instead, we draw the dialog // in two columns if it's too tall. @@ -229,13 +229,13 @@ void PopUpDialog::recalc() if(_popUpBoss->_entries.size() & 1) _entriesPerColumn++; - _h = _entriesPerColumn * kLineHeight + 2; + _h = _entriesPerColumn * _popUpBoss->_fontHeight + 2; _w = 0; // Find width of largest item for(unsigned int i = 0; i < _popUpBoss->_entries.size(); i++) { - int width = _font->getStringWidth(_popUpBoss->_entries[i].name); + int width = _popUpBoss->_font->getStringWidth(_popUpBoss->_entries[i].name); if(width > _w) _w = width; @@ -249,7 +249,8 @@ void PopUpDialog::recalc() if(_popUpBoss->_selectedItem >= _entriesPerColumn) { _x -= _w / 2; - _y = _popUpBoss->getAbsY() - (_popUpBoss->_selectedItem - _entriesPerColumn) * kLineHeight; + _y = _popUpBoss->getAbsY() - (_popUpBoss->_selectedItem - _entriesPerColumn) * + _popUpBoss->_fontHeight; } if(_w >= width) @@ -279,7 +280,7 @@ int PopUpDialog::findItem(int x, int y) const { if(_twoColumns) { - unsigned int entry = (y - 2) / kLineHeight; + unsigned int entry = (y - 2) / _popUpBoss->_fontHeight; if(x > _w / 2) { entry += _entriesPerColumn; @@ -289,7 +290,7 @@ int PopUpDialog::findItem(int x, int y) const } return entry; } - return (y - 2) / kLineHeight; + return (y - 2) / _popUpBoss->_fontHeight; } return -1; @@ -379,9 +380,10 @@ void PopUpDialog::moveDown() // PopUpWidget // // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -PopUpWidget::PopUpWidget(GuiObject* boss, int x, int y, int w, int h, +PopUpWidget::PopUpWidget(GuiObject* boss, const GUI::Font& font, + int x, int y, int w, int h, const string& label, int labelWidth, int cmd) - : Widget(boss, x, y - 1, w, h + 2), + : Widget(boss, font, x, y - 1, w, h + 2), CommandSender(boss), _label(label), _labelWidth(labelWidth), @@ -396,6 +398,12 @@ PopUpWidget::PopUpWidget(GuiObject* boss, int x, int y, int w, int h, if(!_label.empty() && _labelWidth == 0) _labelWidth = _font->getStringWidth(_label); + _w = w + _labelWidth + 15; + + // vertically center the arrows and text + myTextY = (_h - _font->getFontHeight()) / 2; + myArrowsY = (_h - 8) / 2; + myPopUpDialog = new PopUpDialog(this, x + getAbsX(), y + getAbsY()); } @@ -476,7 +484,7 @@ void PopUpWidget::drawWidget(bool hilite) // Draw the label, if any if (_labelWidth > 0) - fb.drawString(_font, _label, _x, _y + 3, _labelWidth, + fb.drawString(_font, _label, _x, _y + myTextY, _labelWidth, isEnabled() ? kTextColor : kColor, kTextAlignRight); // Draw a thin frame around us. @@ -486,7 +494,7 @@ void PopUpWidget::drawWidget(bool hilite) fb.vLine(x + w - 1, _y, _y +_h - 1, kShadowColor); // Draw an arrow pointing down at the right end to signal this is a dropdown/popup - fb.drawBitmap(up_down_arrows, x+w - 10, _y+2, + fb.drawBitmap(up_down_arrows, x+w - 10, _y + myArrowsY, !isEnabled() ? kColor : hilite ? kTextColorHi : kTextColor); // Draw the selected entry, if any @@ -494,7 +502,7 @@ void PopUpWidget::drawWidget(bool hilite) { TextAlignment align = (_font->getStringWidth(_entries[_selectedItem].name) > w-6) ? kTextAlignRight : kTextAlignLeft; - fb.drawString(_font, _entries[_selectedItem].name, x+2, _y+3, w-6, + fb.drawString(_font, _entries[_selectedItem].name, x+2, _y+myTextY, w-6, !isEnabled() ? kColor : kTextColor, align); } } diff --git a/stella/src/gui/PopUpWidget.hxx b/stella/src/gui/PopUpWidget.hxx index 7097dc32b..3dce6e462 100644 --- a/stella/src/gui/PopUpWidget.hxx +++ b/stella/src/gui/PopUpWidget.hxx @@ -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.hxx,v 1.11 2005-12-09 01:16:14 stephena Exp $ +// $Id: PopUpWidget.hxx,v 1.12 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -59,7 +59,8 @@ class PopUpWidget : public Widget, public CommandSender int _labelWidth; public: - PopUpWidget(GuiObject* boss, int x, int y, int w, int h, + PopUpWidget(GuiObject* boss, const GUI::Font& font, + int x, int y, int w, int h, const string& label, int labelWidth = 0, int cmd = 0); ~PopUpWidget(); @@ -86,6 +87,8 @@ class PopUpWidget : public Widget, public CommandSender private: PopUpDialog* myPopUpDialog; + int myArrowsY; + int myTextY; }; // diff --git a/stella/src/gui/ProgressDialog.cxx b/stella/src/gui/ProgressDialog.cxx index e69f08fe8..76fbb718d 100644 --- a/stella/src/gui/ProgressDialog.cxx +++ b/stella/src/gui/ProgressDialog.cxx @@ -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: ProgressDialog.cxx,v 1.5 2005-08-04 22:59:54 stephena Exp $ +// $Id: ProgressDialog.cxx,v 1.6 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -51,12 +51,12 @@ ProgressDialog::ProgressDialog(GuiObject* boss, const GUI::Font& font, _y = (boss->getHeight() - _h) / 2; xpos = fontWidth; ypos = lineHeight; - myMessage = new StaticTextWidget(this, xpos, ypos, lwidth, fontHeight, + myMessage = new StaticTextWidget(this, font, xpos, ypos, lwidth, fontHeight, message, kTextAlignCenter); myMessage->setColor(kTextColorEm); xpos = fontWidth; ypos += 2 * lineHeight; - mySlider = new SliderWidget(this, xpos, ypos, lwidth, lineHeight, "", 0, 0); + mySlider = new SliderWidget(this, font, xpos, ypos, lwidth, lineHeight, "", 0, 0); mySlider->setMinValue(100); mySlider->setMaxValue(200); mySlider->setValue(100); // Prevents the slider from initially drawing diff --git a/stella/src/gui/ScrollBarWidget.cxx b/stella/src/gui/ScrollBarWidget.cxx index e66087620..7e8f2745a 100644 --- a/stella/src/gui/ScrollBarWidget.cxx +++ b/stella/src/gui/ScrollBarWidget.cxx @@ -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: ScrollBarWidget.cxx,v 1.12 2006-01-15 20:46:20 stephena Exp $ +// $Id: ScrollBarWidget.cxx,v 1.13 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -63,8 +63,9 @@ static unsigned int down_arrow[8] = { }; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -ScrollBarWidget::ScrollBarWidget(GuiObject* boss, int x, int y, int w, int h) - : Widget(boss, x, y, w, h), CommandSender(boss) +ScrollBarWidget::ScrollBarWidget(GuiObject* boss, const GUI::Font& font, + int x, int y, int w, int h) + : Widget(boss, font, x, y, w, h), CommandSender(boss) { _flags = WIDGET_ENABLED | WIDGET_TRACK_MOUSE | WIDGET_CLEARBG; _type = kScrollBarWidget; diff --git a/stella/src/gui/ScrollBarWidget.hxx b/stella/src/gui/ScrollBarWidget.hxx index ee390b21a..be0aec618 100644 --- a/stella/src/gui/ScrollBarWidget.hxx +++ b/stella/src/gui/ScrollBarWidget.hxx @@ -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: ScrollBarWidget.hxx,v 1.5 2005-08-01 22:33:16 stephena Exp $ +// $Id: ScrollBarWidget.hxx,v 1.6 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -41,7 +41,8 @@ class ScrollBarWidget : public Widget, public CommandSender } Part; public: - ScrollBarWidget(GuiObject* boss, int x, int y, int w, int h); + ScrollBarWidget(GuiObject* boss, const GUI::Font& font, + int x, int y, int w, int h); virtual void handleMouseDown(int x, int y, int button, int clickCount); virtual void handleMouseUp(int x, int y, int button, int clickCount); diff --git a/stella/src/gui/StringListWidget.cxx b/stella/src/gui/StringListWidget.cxx index e418bbc49..702a9c9c5 100644 --- a/stella/src/gui/StringListWidget.cxx +++ b/stella/src/gui/StringListWidget.cxx @@ -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: StringListWidget.cxx,v 1.4 2006-01-15 20:46:20 stephena Exp $ +// $Id: StringListWidget.cxx,v 1.5 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -63,15 +63,15 @@ void StringListWidget::drawWidget(bool hilite) { const OverlayColor textColor = (_selectedItem == pos && _editMode) ? kColor : kTextColor; - const int y = _y + 2 + kLineHeight * i; + const int y = _y + 2 + _fontHeight * i; // Draw the selected item inverted, on a highlighted background. if (_selectedItem == pos) { if ((_hasFocus && !_editMode) || isSticky()) - fb.fillRect(_x + 1, _y + 1 + kLineHeight * i, _w - 1, kLineHeight, kTextColorHi); + fb.fillRect(_x + 1, _y + 1 + _fontHeight * i, _w - 1, _fontHeight, kTextColorHi); else - fb.frameRect(_x + 1, _y + 1 + kLineHeight * i, _w - 1, kLineHeight, kTextColorHi); + fb.frameRect(_x + 1, _y + 1 + _fontHeight * i, _w - 1, _fontHeight, kTextColorHi); } // If in numbering mode, we first print a number prefix @@ -110,8 +110,8 @@ void StringListWidget::drawWidget(bool hilite) // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GUI::Rect StringListWidget::getEditRect() const { - GUI::Rect r(2, 1, _w - 2 , kLineHeight); - const int offset = (_selectedItem - _currentPos) * kLineHeight; + GUI::Rect r(2, 1, _w - 2 , _fontHeight); + const int offset = (_selectedItem - _currentPos) * _fontHeight; r.top += offset; r.bottom += offset; diff --git a/stella/src/gui/TabWidget.cxx b/stella/src/gui/TabWidget.cxx index d66b33dd9..0fbd54a5e 100644 --- a/stella/src/gui/TabWidget.cxx +++ b/stella/src/gui/TabWidget.cxx @@ -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: TabWidget.cxx,v 1.20 2006-01-15 20:46:20 stephena Exp $ +// $Id: TabWidget.cxx,v 1.21 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -28,15 +28,10 @@ #include "Dialog.hxx" #include "TabWidget.hxx" -enum { - kTabLeftOffset = 4, - kTabSpacing = 2, - kTabPadding = 3 -}; - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -TabWidget::TabWidget(GuiObject* boss, int x, int y, int w, int h) - : Widget(boss, x, y, w, h), +TabWidget::TabWidget(GuiObject* boss, const GUI::Font& font, + int x, int y, int w, int h) + : Widget(boss, font, x, y, w, h), CommandSender(boss), _tabWidth(40), _activeTab(-1), @@ -44,6 +39,8 @@ TabWidget::TabWidget(GuiObject* boss, int x, int y, int w, int h) { _flags = WIDGET_ENABLED | WIDGET_CLEARBG; _type = kTabWidget; + + _tabHeight = font.getLineHeight() + 4; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -61,7 +58,7 @@ TabWidget::~TabWidget() // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - int TabWidget::getChildY() const { - return getAbsY() + kTabHeight; + return getAbsY() + _tabHeight; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -170,7 +167,7 @@ void TabWidget::setParentWidget(int tabID, Widget* parent) // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void TabWidget::handleMouseDown(int x, int y, int button, int clickCount) { - assert(y < kTabHeight); + assert(y < _tabHeight); // Determine which tab was clicked int tabID = -1; @@ -251,8 +248,8 @@ void TabWidget::drawWidget(bool hilite) const int right2 = _x + _w - 2; // Draw horizontal line - fb.hLine(left1, _y + kTabHeight - 2, right1, kShadowColor); - fb.hLine(left2, _y + kTabHeight - 2, right2, kShadowColor); + fb.hLine(left1, _y + _tabHeight - 2, right1, kShadowColor); + fb.hLine(left2, _y + _tabHeight - 2, right2, kShadowColor); // Iterate over all tabs and draw them int i, x = _x + kTabLeftOffset; @@ -260,26 +257,26 @@ void TabWidget::drawWidget(bool hilite) { OverlayColor color = (i == _activeTab) ? kColor : kShadowColor; int yOffset = (i == _activeTab) ? 0 : 2; - box(x, _y + yOffset, _tabWidth, kTabHeight - yOffset, color, color, (i == _activeTab)); + box(x, _y + yOffset, _tabWidth, _tabHeight - yOffset, color, color, (i == _activeTab)); fb.drawString(_font, _tabs[i].title, x + kTabPadding, - _y + yOffset / 2 + (kTabHeight - kLineHeight - 1), + _y + yOffset / 2 + (_tabHeight - _fontHeight - 1), _tabWidth - 2 * kTabPadding, kTextColor, kTextAlignCenter); x += _tabWidth + kTabSpacing; } // Draw a frame around the widget area (belows the tabs) - fb.hLine(left1, _y + kTabHeight - 1, right1, kColor); - fb.hLine(left2, _y + kTabHeight - 1, right2, kColor); + fb.hLine(left1, _y + _tabHeight - 1, right1, kColor); + fb.hLine(left2, _y + _tabHeight - 1, right2, kColor); fb.hLine(_x+1, _y + _h - 2, _x + _w - 2, kShadowColor); fb.hLine(_x+1, _y + _h - 1, _x + _w - 2, kColor); - fb.vLine(_x + _w - 2, _y + kTabHeight - 1, _y + _h - 2, kColor); - fb.vLine(_x + _w - 1, _y + kTabHeight - 1, _y + _h - 2, kShadowColor); + fb.vLine(_x + _w - 2, _y + _tabHeight - 1, _y + _h - 2, kColor); + fb.vLine(_x + _w - 1, _y + _tabHeight - 1, _y + _h - 2, kShadowColor); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Widget *TabWidget::findWidget(int x, int y) { - if (y < kTabHeight) + if (y < _tabHeight) { // Click was in the tab area return this; @@ -287,6 +284,6 @@ Widget *TabWidget::findWidget(int x, int y) else { // Iterate over all child widgets and find the one which was clicked - return Widget::findWidgetInChain(_firstWidget, x, y - kTabHeight); + return Widget::findWidgetInChain(_firstWidget, x, y - _tabHeight); } } diff --git a/stella/src/gui/TabWidget.hxx b/stella/src/gui/TabWidget.hxx index b12e8f047..6c9247f18 100644 --- a/stella/src/gui/TabWidget.hxx +++ b/stella/src/gui/TabWidget.hxx @@ -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: TabWidget.hxx,v 1.11 2005-12-21 01:50:16 stephena Exp $ +// $Id: TabWidget.hxx,v 1.12 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -28,10 +28,6 @@ #include "Array.hxx" #include "bspf.hxx" -enum { - kTabHeight = 16 -}; - class TabWidget : public Widget, public CommandSender { struct Tab { @@ -42,7 +38,7 @@ class TabWidget : public Widget, public CommandSender typedef Common::Array TabList; public: - TabWidget(GuiObject* boss, int x, int y, int w, int h); + TabWidget(GuiObject* boss, const GUI::Font& font, int x, int y, int w, int h); ~TabWidget(); virtual int getChildY() const; @@ -64,6 +60,9 @@ class TabWidget : public Widget, public CommandSender // will be added to the active tab. void setParentWidget(int tabID, Widget* parent); + int getTabWidth() { return _tabWidth; } + int getTabHeight() { return _tabHeight; } + virtual void handleMouseDown(int x, int y, int button, int clickCount); virtual void handleCommand(CommandSender* sender, int cmd, int data, int id); @@ -76,9 +75,16 @@ class TabWidget : public Widget, public CommandSender protected: TabList _tabs; int _tabWidth; + int _tabHeight; int _activeTab; bool _firstTime; + enum { + kTabLeftOffset = 4, + kTabSpacing = 2, + kTabPadding = 3 + }; + private: void box(int x, int y, int width, int height, OverlayColor colorA, OverlayColor colorB, bool omitBottom); diff --git a/stella/src/gui/VideoDialog.cxx b/stella/src/gui/VideoDialog.cxx index 0be35af71..a89de846c 100644 --- a/stella/src/gui/VideoDialog.cxx +++ b/stella/src/gui/VideoDialog.cxx @@ -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: VideoDialog.cxx,v 1.26 2005-10-24 18:18:30 stephena Exp $ +// $Id: VideoDialog.cxx,v 1.27 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -33,34 +33,29 @@ #include "bspf.hxx" -enum { - kVideoRowHeight = 12, - kVideoWidth = 200, - kVideoHeight = 100 -}; - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - VideoDialog::VideoDialog(OSystem* osystem, DialogContainer* parent, - int x, int y, int w, int h) + const GUI::Font& font, int x, int y, int w, int h) : Dialog(osystem, parent, x, y, w, h) { - const GUI::Font& font = instance()->font(); - - int yoff = 10, - xoff = 5, - woff = 110, - labelWidth = 55; + const int lineHeight = font.getLineHeight(), + fontHeight = font.getFontHeight(); + int xpos, ypos; + int lwidth = font.getStringWidth("Dirty Rects: "), + pwidth = font.getStringWidth("Software"); // Use dirty rectangle updates - myDirtyPopup = new PopUpWidget(this, xoff, yoff, woff, kLineHeight, - "Dirty Rects: ", labelWidth); + xpos = 5; ypos = 10; + myDirtyPopup = new PopUpWidget(this, font, xpos, ypos, + pwidth, lineHeight, "Dirty Rects: ", lwidth); myDirtyPopup->appendEntry("Yes", 1); myDirtyPopup->appendEntry("No", 2); - yoff += kVideoRowHeight + 4; + ypos += lineHeight + 4; // Video renderer - myRendererPopup = new PopUpWidget(this, xoff, yoff, woff, kLineHeight, - "Renderer: ", labelWidth, kRendererChanged); + myRendererPopup = new PopUpWidget(this, font, xpos, ypos, + pwidth, lineHeight, "Renderer: ", lwidth, + kRendererChanged); myRendererPopup->appendEntry("Software", 1); #ifdef PSP myRendererPopup->appendEntry("Hardware", 2); @@ -68,69 +63,75 @@ VideoDialog::VideoDialog(OSystem* osystem, DialogContainer* parent, #ifdef DISPLAY_OPENGL myRendererPopup->appendEntry("OpenGL", 3); #endif - yoff += kVideoRowHeight + 4; + ypos += lineHeight + 4; // Video filter - myFilterPopup = new PopUpWidget(this, xoff, yoff, woff, kLineHeight, - "GL Filter: ", labelWidth); + myFilterPopup = new PopUpWidget(this, font, xpos, ypos, + pwidth, lineHeight, "GL Filter: ", lwidth); myFilterPopup->appendEntry("Linear", 1); myFilterPopup->appendEntry("Nearest", 2); - yoff += kVideoRowHeight + 4; + ypos += lineHeight + 4; // Aspect ratio - myAspectRatioSlider = new SliderWidget(this, xoff, yoff, woff - 14, kLineHeight, - "GL Aspect: ", labelWidth, kAspectRatioChanged); + myAspectRatioSlider = new SliderWidget(this, font, xpos, ypos, pwidth, lineHeight, + "GL Aspect: ", lwidth, kAspectRatioChanged); myAspectRatioSlider->setMinValue(1); myAspectRatioSlider->setMaxValue(100); - myAspectRatioLabel = new StaticTextWidget(this, xoff + woff - 11, yoff, 15, kLineHeight, - "", kTextAlignLeft); + myAspectRatioLabel = new StaticTextWidget(this, font, + xpos + myAspectRatioSlider->getWidth() + 4, + ypos + 1, + 15, fontHeight, "", kTextAlignLeft); myAspectRatioLabel->setFlags(WIDGET_CLEARBG); - yoff += kVideoRowHeight + 4; + ypos += lineHeight + 4; // Palette - myPalettePopup = new PopUpWidget(this, xoff, yoff, woff, kLineHeight, "Palette: ", labelWidth); + myPalettePopup = new PopUpWidget(this, font, xpos, ypos, pwidth, + lineHeight, "Palette: ", lwidth); myPalettePopup->appendEntry("Standard", 1); myPalettePopup->appendEntry("Original", 2); myPalettePopup->appendEntry("Z26", 3); - yoff += kVideoRowHeight + 4; + ypos += lineHeight + 4; // Move over to the next column - yoff = 10; - xoff = xoff + 115; + xpos += 115; ypos = 10; // Framerate - myFrameRateSlider = new SliderWidget(this, xoff, yoff, woff - 25, kLineHeight, - "Framerate: ", labelWidth, kFrameRateChanged); + myFrameRateSlider = new SliderWidget(this, font, xpos, ypos, 30, lineHeight, + "Framerate: ", lwidth, kFrameRateChanged); myFrameRateSlider->setMinValue(1); myFrameRateSlider->setMaxValue(300); - myFrameRateLabel = new StaticTextWidget(this, xoff + woff - 22, yoff, 20, kLineHeight, - "", kTextAlignLeft); + myFrameRateLabel = new StaticTextWidget(this, font, + xpos + myFrameRateSlider->getWidth() + 4, + ypos + 1, + 15, fontHeight, "", kTextAlignLeft); myFrameRateLabel->setFlags(WIDGET_CLEARBG); - yoff += kVideoRowHeight + 4; + ypos += lineHeight + 4; // Zoom level - myZoomSlider = new SliderWidget(this, xoff, yoff, woff - 25, kLineHeight, - "Zoom: ", labelWidth, kZoomChanged); + myZoomSlider = new SliderWidget(this, font, xpos, ypos, 30, lineHeight, + "Zoom: ", lwidth, kZoomChanged); myZoomSlider->setMinValue(0); myZoomSlider->setMaxValue(50); - myZoomLabel = new StaticTextWidget(this, xoff + woff - 22, yoff, 20, kLineHeight, - "", kTextAlignLeft); + myZoomLabel = new StaticTextWidget(this, font, + xpos + myZoomSlider->getWidth() + 4, + ypos + 1, + 15, fontHeight, "", kTextAlignLeft); myZoomLabel->setFlags(WIDGET_CLEARBG); - yoff += kVideoRowHeight + 10; + ypos += lineHeight + 10; - myFullscreenCheckbox = new CheckboxWidget(this, font, xoff + 5, yoff, + myFullscreenCheckbox = new CheckboxWidget(this, font, xpos + 5, ypos, "Fullscreen mode"); - yoff += kVideoRowHeight + 4; + ypos += lineHeight + 4; - myUseDeskResCheckbox = new CheckboxWidget(this, font, xoff + 5, yoff, + myUseDeskResCheckbox = new CheckboxWidget(this, font, xpos + 5, ypos, "Desktop Res in FS"); - yoff += kVideoRowHeight + 20; + ypos += lineHeight + 20; // Add Defaults, OK and Cancel buttons - addButton( 10, _h - 24, "Defaults", kDefaultsCmd, 0); + addButton(font, 10, _h - 24, "Defaults", kDefaultsCmd, 0); #ifndef MAC_OSX - addButton(_w - 2 * (kButtonWidth + 7), _h - 24, "OK", kOKCmd, 0); - addButton(_w - (kButtonWidth + 10), _h - 24, "Cancel", kCloseCmd, 0); + addButton(font, _w - 2 * (kButtonWidth + 7), _h - 24, "OK", kOKCmd, 0); + addButton(font, _w - (kButtonWidth + 10), _h - 24, "Cancel", kCloseCmd, 0); #else - addButton(_w - 2 * (kButtonWidth + 7), _h - 24, "Cancel", kCloseCmd, 0); - addButton(_w - (kButtonWidth + 10), _h - 24, "OK", kOKCmd, 0); + addButton(font, _w - 2 * (kButtonWidth + 7), _h - 24, "Cancel", kCloseCmd, 0); + addButton(font, _w - (kButtonWidth + 10), _h - 24, "OK", kOKCmd, 0); #endif } diff --git a/stella/src/gui/VideoDialog.hxx b/stella/src/gui/VideoDialog.hxx index d7e98f6a2..bd32f8a05 100644 --- a/stella/src/gui/VideoDialog.hxx +++ b/stella/src/gui/VideoDialog.hxx @@ -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: VideoDialog.hxx,v 1.10 2005-10-18 18:49:46 stephena Exp $ +// $Id: VideoDialog.hxx,v 1.11 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -44,7 +44,7 @@ class VideoDialog : public Dialog { public: VideoDialog(OSystem* osystem, DialogContainer* parent, - int x, int y, int w, int h); + const GUI::Font& font, int x, int y, int w, int h); ~VideoDialog(); protected: diff --git a/stella/src/gui/Widget.cxx b/stella/src/gui/Widget.cxx index 43fa664a8..0bef09811 100644 --- a/stella/src/gui/Widget.cxx +++ b/stella/src/gui/Widget.cxx @@ -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: Widget.cxx,v 1.41 2006-01-08 20:55:54 stephena Exp $ +// $Id: Widget.cxx,v 1.42 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -32,10 +32,12 @@ #include "EditableWidget.hxx" // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Widget::Widget(GuiObject* boss, int x, int y, int w, int h) +Widget::Widget(GuiObject* boss, const GUI::Font& font, + int x, int y, int w, int h) : GuiObject(boss->instance(), boss->parent(), x, y, w, h), _type(0), _boss(boss), + _font((GUI::Font*)&font), _id(-1), _flags(0), _hasFocus(false), @@ -44,6 +46,9 @@ Widget::Widget(GuiObject* boss, int x, int y, int w, int h) // Insert into the widget list of the boss _next = _boss->_firstWidget; _boss->_firstWidget = this; + + _fontWidth = _font->getMaxCharWidth(); + _fontHeight = _font->getLineHeight(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -294,9 +299,10 @@ void Widget::setDirtyInChain(Widget* start) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -StaticTextWidget::StaticTextWidget(GuiObject *boss, int x, int y, int w, int h, +StaticTextWidget::StaticTextWidget(GuiObject *boss, const GUI::Font& font, + int x, int y, int w, int h, const string& text, TextAlignment align) - : Widget(boss, x, y, w, h), + : Widget(boss, font, x, y, w, h), _align(align) { _flags = WIDGET_ENABLED | WIDGET_CLEARBG; @@ -330,9 +336,10 @@ void StaticTextWidget::drawWidget(bool hilite) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -ButtonWidget::ButtonWidget(GuiObject *boss, int x, int y, int w, int h, +ButtonWidget::ButtonWidget(GuiObject *boss, const GUI::Font& font, + int x, int y, int w, int h, const string& label, int cmd, uInt8 hotkey) - : StaticTextWidget(boss, x, y, w, h, label, kTextAlignCenter), + : StaticTextWidget(boss, font, x, y, w, h, label, kTextAlignCenter), CommandSender(boss), _cmd(cmd), _editable(false), @@ -411,7 +418,7 @@ void ButtonWidget::setEditable(bool editable) void ButtonWidget::drawWidget(bool hilite) { FrameBuffer& fb = _boss->instance()->frameBuffer(); - fb.drawString(_font, _label, _x, _y + (_h - kLineHeight)/2 + 1, _w, + fb.drawString(_font, _label, _x, _y + (_h - _fontHeight)/2 + 1, _w, !isEnabled() ? kColor : hilite ? kTextColorHi : _color, _align); } @@ -433,23 +440,32 @@ static unsigned int checked_img[8] = CheckboxWidget::CheckboxWidget(GuiObject *boss, const GUI::Font& font, int x, int y, const string& label, int cmd) - : ButtonWidget(boss, x, y, 16, 16, label, cmd, 0), + : ButtonWidget(boss, font, x, y, 16, 16, label, cmd, 0), _state(false), _editable(true), _holdFocus(true), _fillRect(false), _drawBox(true), - _fillColor(kColor) + _fillColor(kColor), + _boxY(0), + _textY(0) { _flags = WIDGET_ENABLED | WIDGET_RETAIN_FOCUS; _type = kCheckboxWidget; - setFont(font); if(label == "") _w = 14; else _w = font.getStringWidth(label) + 20; _h = font.getFontHeight() < 14 ? 14 : font.getFontHeight(); + + + // Depending on font size, either the font or box will need to be + // centered vertically + if(_h > 14) // center box + _boxY = (_h - 14) / 2; + else // center text + _textY = (14 - _font->getFontHeight()) / 2; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -512,40 +528,33 @@ void CheckboxWidget::drawWidget(bool hilite) { FrameBuffer& fb = _boss->instance()->frameBuffer(); - // Depending on font size, either the font or box will need to be - // centered vertically - int box_yoff = 0, text_yoff = 0; - if(_h > 14) // center box - box_yoff = (_h - 14) / 2; - else // center text - text_yoff = (14 - _font->getFontHeight()) / 2; - // Draw the box if(_drawBox) - fb.box(_x, _y + box_yoff, 14, 14, kColor, kShadowColor); + fb.box(_x, _y + _boxY, 14, 14, kColor, kShadowColor); // If checked, draw cross inside the box if(_state) { if(_fillRect) - fb.fillRect(_x + 2, _y + box_yoff + 2, 10, 10, + fb.fillRect(_x + 2, _y + _boxY + 2, 10, 10, isEnabled() ? _color : kColor); else - fb.drawBitmap(checked_img, _x + 3, _y + box_yoff + 3, + fb.drawBitmap(checked_img, _x + 3, _y + _boxY + 3, isEnabled() ? _color : kColor); } else - fb.fillRect(_x + 2, _y + box_yoff + 2, 10, 10, kBGColor); + fb.fillRect(_x + 2, _y + _boxY + 2, 10, 10, kBGColor); // Finally draw the label - fb.drawString(_font, _label, _x + 20, _y + text_yoff, _w, + fb.drawString(_font, _label, _x + 20, _y + _textY, _w, isEnabled() ? _color : kColor); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -SliderWidget::SliderWidget(GuiObject *boss, int x, int y, int w, int h, +SliderWidget::SliderWidget(GuiObject *boss, const GUI::Font& font, + int x, int y, int w, int h, const string& label, int labelWidth, int cmd, uInt8 hotkey) - : ButtonWidget(boss, x, y, w, h, label, cmd, hotkey), + : ButtonWidget(boss, font, x, y, w, h, label, cmd, hotkey), _value(0), _oldValue(0), _valueMin(0), @@ -555,6 +564,11 @@ SliderWidget::SliderWidget(GuiObject *boss, int x, int y, int w, int h, { _flags = WIDGET_ENABLED | WIDGET_TRACK_MOUSE | WIDGET_CLEARBG; _type = kSliderWidget; + + if(!_label.empty() && _labelWidth == 0) + _labelWidth = _font->getStringWidth(_label); + + _w = w + _labelWidth; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/stella/src/gui/Widget.hxx b/stella/src/gui/Widget.hxx index f85a0c2ba..027a1be3f 100644 --- a/stella/src/gui/Widget.hxx +++ b/stella/src/gui/Widget.hxx @@ -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: Widget.hxx,v 1.46 2006-01-09 16:50:01 stephena Exp $ +// $Id: Widget.hxx,v 1.47 2006-02-22 17:38:04 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -32,6 +32,7 @@ class Dialog; #include "GuiUtils.hxx" #include "Array.hxx" #include "Rect.hxx" +#include "Font.hxx" #include "bspf.hxx" enum { @@ -75,14 +76,14 @@ enum { This is the base class for all widgets. @author Stephen Anthony - @version $Id: Widget.hxx,v 1.46 2006-01-09 16:50:01 stephena Exp $ + @version $Id: Widget.hxx,v 1.47 2006-02-22 17:38:04 stephena Exp $ */ class Widget : public GuiObject { friend class Dialog; public: - Widget(GuiObject* boss, int x, int y, int w, int h); + Widget(GuiObject* boss, const GUI::Font& font, int x, int y, int w, int h); virtual ~Widget(); virtual int getAbsX() const { return _x + _boss->getChildX(); } @@ -126,6 +127,7 @@ class Widget : public GuiObject int getID() { return _id; } void setColor(OverlayColor color) { _color = color; } + virtual const GUI::Font* font() { return _font; } virtual void loadConfig() {} @@ -146,11 +148,14 @@ class Widget : public GuiObject protected: int _type; GuiObject* _boss; + GUI::Font* _font; Widget* _next; int _id; int _flags; bool _hasFocus; OverlayColor _color; + int _fontWidth; + int _fontHeight; public: static Widget* findWidgetInChain(Widget* start, int x, int y); @@ -175,7 +180,7 @@ class Widget : public GuiObject class StaticTextWidget : public Widget { public: - StaticTextWidget(GuiObject* boss, + StaticTextWidget(GuiObject* boss, const GUI::Font& font, int x, int y, int w, int h, const string& text, TextAlignment align); void setValue(int value); @@ -198,7 +203,7 @@ class StaticTextWidget : public Widget class ButtonWidget : public StaticTextWidget, public CommandSender { public: - ButtonWidget(GuiObject* boss, + ButtonWidget(GuiObject* boss, const GUI::Font& font, int x, int y, int w, int h, const string& label, int cmd = 0, uInt8 hotkey = 0); @@ -260,6 +265,10 @@ class CheckboxWidget : public ButtonWidget bool _drawBox; OverlayColor _fillColor; + + private: + int _boxY; + int _textY; }; @@ -267,7 +276,8 @@ class CheckboxWidget : public ButtonWidget class SliderWidget : public ButtonWidget { public: - SliderWidget(GuiObject *boss, int x, int y, int w, int h, const string& label = "", + SliderWidget(GuiObject *boss, const GUI::Font& font, + int x, int y, int w, int h, const string& label = "", int labelWidth = 0, int cmd = 0, uInt8 hotkey = 0); void setValue(int value);