diff options
author | Max Horn | 2003-11-02 18:57:20 +0000 |
---|---|---|
committer | Max Horn | 2003-11-02 18:57:20 +0000 |
commit | ac4b9ccdb8f0d0491c80ec026d8ed510f729cabf (patch) | |
tree | a15d861ad395b869ae480c1dbe26e9f8fa1e7f2e | |
parent | 7ec257ae3f48275a911bc503aa7ed4591b06ceac (diff) | |
download | scummvm-rg350-ac4b9ccdb8f0d0491c80ec026d8ed510f729cabf.tar.gz scummvm-rg350-ac4b9ccdb8f0d0491c80ec026d8ed510f729cabf.tar.bz2 scummvm-rg350-ac4b9ccdb8f0d0491c80ec026d8ed510f729cabf.zip |
refactored code in Dialog::findWidget to Widget::findWidgetInChain; changed NewGui::box() to take colors as param (instead of hard coding _color and _shadowColor)
svn-id: r11061
-rw-r--r-- | gui/dialog.cpp | 13 | ||||
-rw-r--r-- | gui/newgui.cpp | 5 | ||||
-rw-r--r-- | gui/newgui.h | 2 | ||||
-rw-r--r-- | gui/widget.cpp | 36 | ||||
-rw-r--r-- | gui/widget.h | 3 |
5 files changed, 33 insertions, 26 deletions
diff --git a/gui/dialog.cpp b/gui/dialog.cpp index 401f84549d..ffa0b191e8 100644 --- a/gui/dialog.cpp +++ b/gui/dialog.cpp @@ -103,7 +103,7 @@ void Dialog::drawDialog() { return; g_gui.blendRect(_x, _y, _w, _h, g_gui._bgcolor); - g_gui.box(_x, _y, _w, _h); + g_gui.box(_x, _y, _w, _h, g_gui._color, g_gui._shadowcolor); while (w) { w->draw(); @@ -267,16 +267,7 @@ void Dialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 data) { * in the local coordinate system, i.e. relative to the top left of the dialog. */ Widget *Dialog::findWidget(int x, int y) { - Widget *w = _firstWidget; - while (w) { - // Stop as soon as we find a widget that contains the point (x,y) - if (x >= w->_x && x < w->_x + w->_w && y >= w->_y && y < w->_y + w->_h) - break; - w = w->_next; - } - if (w) - w = w->findWidget(x - w->_x, y - w->_y); - return w; + return Widget::findWidgetInChain(_firstWidget, x, y); } ButtonWidget *Dialog::addButton(int x, int y, const Common::String &label, uint32 cmd, char hotkey) { diff --git a/gui/newgui.cpp b/gui/newgui.cpp index 0a9b44074c..c46b3664f8 100644 --- a/gui/newgui.cpp +++ b/gui/newgui.cpp @@ -285,10 +285,7 @@ NewGuiColor *NewGui::getBasePtr(int x, int y) { return _screen + x + y * _screenPitch; } -void NewGui::box(int x, int y, int width, int height, bool inverted) { - NewGuiColor colorA = inverted ? _shadowcolor : _color; - NewGuiColor colorB = inverted ? _color : _shadowcolor; - +void NewGui::box(int x, int y, int width, int height, NewGuiColor colorA, NewGuiColor colorB) { hLine(x + 1, y, x + width - 2, colorA); hLine(x, y + 1, x + width - 1, colorA); vLine(x, y + 1, y + height - 2, colorA); diff --git a/gui/newgui.h b/gui/newgui.h index 7cec44d567..ac0c454df0 100644 --- a/gui/newgui.h +++ b/gui/newgui.h @@ -128,7 +128,7 @@ public: // Drawing primitives NewGuiColor *getBasePtr(int x, int y); - void box(int x, int y, int width, int height, bool inverted = false); + void box(int x, int y, int width, int height, NewGuiColor colorA, NewGuiColor colorB); void line(int x, int y, int x2, int y2, NewGuiColor color); void blendRect(int x, int y, int w, int h, NewGuiColor color, int level = 3); void fillRect(int x, int y, int w, int h, NewGuiColor color); diff --git a/gui/widget.cpp b/gui/widget.cpp index b0ab5889b0..2a337b9dd2 100644 --- a/gui/widget.cpp +++ b/gui/widget.cpp @@ -19,9 +19,10 @@ */ #include "stdafx.h" -#include "widget.h" -#include "dialog.h" -#include "newgui.h" +#include "common/util.h" +#include "gui/widget.h" +#include "gui/dialog.h" +#include "gui/newgui.h" Widget::Widget(GuiObject *boss, int x, int y, int w, int h) @@ -39,8 +40,8 @@ void Widget::draw() { return; // Account for our relative position in the dialog - _x += _boss->_x; - _y += _boss->_y; + _x += _boss->getAbsX(); + _y += _boss->getAbsY(); // Clear background (unless alpha blending is enabled) if (_flags & WIDGET_CLEARBG) @@ -48,7 +49,11 @@ void Widget::draw() { // Draw border if (_flags & WIDGET_BORDER) { - gui->box(_x, _y, _w, _h, (_flags & WIDGET_INV_BORDER) == WIDGET_INV_BORDER); + NewGuiColor colorA = gui->_color; + NewGuiColor colorB = gui->_shadowcolor; + if ((_flags & WIDGET_INV_BORDER) == WIDGET_INV_BORDER) + SWAP(colorA, colorB); + gui->box(_x, _y, _w, _h, colorA, colorB); _x += 4; _y += 4; _w -= 8; @@ -69,10 +74,21 @@ void Widget::draw() { // Flag the draw area as dirty gui->addDirtyRect(_x, _y, _w, _h); - _x -= _boss->_x; - _y -= _boss->_y; + _x -= _boss->getAbsX(); + _y -= _boss->getAbsY(); } +Widget *Widget::findWidgetInChain(Widget *w, int x, int y) { + while (w) { + // Stop as soon as we find a widget that contains the point (x,y) + if (x >= w->_x && x < w->_x + w->_w && y >= w->_y && y < w->_y + w->_h) + break; + w = w->_next; + } + if (w) + w = w->findWidget(x - w->_x, y - w->_y); + return w; +} #pragma mark - @@ -161,7 +177,7 @@ void CheckboxWidget::drawWidget(bool hilite) { NewGui *gui = &g_gui; // Draw the box - gui->box(_x, _y, 14, 14); + gui->box(_x, _y, 14, 14, gui->_color, gui->_shadowcolor); // If checked, draw cross inside the box if (_state) @@ -218,7 +234,7 @@ void SliderWidget::drawWidget(bool hilite) { NewGui *gui = &g_gui; // Draw the box - gui->box(_x, _y, _w, _h); + gui->box(_x, _y, _w, _h, gui->_color, gui->_shadowcolor); // Draw the 'bar' gui->fillRect(_x + 2, _y + 2, valueToPos(_value), _h - 4, hilite ? gui->_textcolorhi : gui->_textcolor); diff --git a/gui/widget.h b/gui/widget.h index 08e519558f..11722aacac 100644 --- a/gui/widget.h +++ b/gui/widget.h @@ -73,6 +73,9 @@ protected: bool _hasFocus; public: + static Widget *findWidgetInChain(Widget *start, int x, int y); + +public: Widget(GuiObject *boss, int x, int y, int w, int h); virtual ~Widget() {} |