aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Horn2002-07-08 22:11:47 +0000
committerMax Horn2002-07-08 22:11:47 +0000
commit0a9baabbdc173f772c4278b1f5c90f59121d4ee9 (patch)
treec09de90e88d5062603d71f59399192a71ff56e17
parent5fa2ab9e006e041e78b966ec5baa42872e69114f (diff)
downloadscummvm-rg350-0a9baabbdc173f772c4278b1f5c90f59121d4ee9.tar.gz
scummvm-rg350-0a9baabbdc173f772c4278b1f5c90f59121d4ee9.tar.bz2
scummvm-rg350-0a9baabbdc173f772c4278b1f5c90f59121d4ee9.zip
replaced clearArea with the more general fillArea; added get/setValue methods to SliderWidget; changed look of SliderWidget a little bit; optimized drawing of SliderWidget
svn-id: r4500
-rw-r--r--gui/dialog.cpp2
-rw-r--r--gui/dialog.h12
-rw-r--r--gui/widget.cpp19
-rw-r--r--gui/widget.h5
-rw-r--r--newgui.cpp4
-rw-r--r--newgui.h2
6 files changed, 33 insertions, 11 deletions
diff --git a/gui/dialog.cpp b/gui/dialog.cpp
index 2131f21983..9031e0e210 100644
--- a/gui/dialog.cpp
+++ b/gui/dialog.cpp
@@ -29,7 +29,7 @@ void Dialog::draw()
{
Widget *w = _firstWidget;
- _gui->clearArea(_x, _y, _w, _h);
+ _gui->fillArea(_x, _y, _w, _h, _gui->_bgcolor);
_gui->box(_x, _y, _w, _h);
_gui->setAreaDirty(_x, _y, _w, _h);
diff --git a/gui/dialog.h b/gui/dialog.h
index 9473ebf690..f91bc681a6 100644
--- a/gui/dialog.h
+++ b/gui/dialog.h
@@ -43,6 +43,7 @@ protected:
int16 _x, _y;
uint16 _w, _h;
Widget *_mouseWidget;
+
public:
Dialog(NewGui *gui, int x, int y, int w, int h)
: _gui(gui), _firstWidget(0), _x(x), _y(y), _w(w), _h(h), _mouseWidget(0)
@@ -66,6 +67,7 @@ protected:
void addButton(int x, int y, int w, int h, const char *label, uint32 cmd, char hotkey);
};
+
class SaveLoadDialog : public Dialog {
public:
SaveLoadDialog(NewGui *gui);
@@ -73,7 +75,17 @@ public:
virtual void handleCommand(uint32 cmd);
};
+
+class SoundDialog;
+class KeysDialog;
+class MiscDialog;
+
class OptionsDialog : public Dialog {
+protected:
+ SoundDialog *_soundDialog;
+ KeysDialog *_keysDialog;
+ MiscDialog *_miscDialog;
+
public:
OptionsDialog(NewGui *gui);
diff --git a/gui/widget.cpp b/gui/widget.cpp
index dc65a1422a..510eb8428b 100644
--- a/gui/widget.cpp
+++ b/gui/widget.cpp
@@ -45,7 +45,7 @@ void Widget::draw()
// Clear background
if (_flags & WIDGET_CLEARBG)
- gui->clearArea(_x, _y, _w, _h);
+ gui->fillArea(_x, _y, _w, _h, gui->_bgcolor);
// Draw border
if (_flags & WIDGET_BORDER) {
@@ -148,15 +148,16 @@ void CheckboxWidget::drawWidget(bool hilite)
if (_state)
gui->drawBitmap(checked_img, _x + 3, _y + 3, gui->_textcolor);
else
- gui->clearArea(_x + 3, _y + 3, 8, 8);
+ gui->fillArea(_x + 3, _y + 3, 8, 8, gui->_bgcolor);
// Finally draw the label
gui->drawString(_text, _x + 20, _y + 3, _w, gui->_textcolor);
}
#pragma mark -
+
SliderWidget::SliderWidget(Dialog *boss, int x, int y, int w, int h, const char *label, uint32 cmd, uint8 hotkey)
- : ButtonWidget(boss, x, y, w, h, label, cmd, hotkey)
+ : ButtonWidget(boss, x, y, w, h, label, cmd, hotkey), _value(0), _old_value(1)
{
_flags = WIDGET_ENABLED | WIDGET_TRACK_MOUSE;
_type = kSliderWidget;
@@ -168,9 +169,15 @@ void SliderWidget::drawWidget(bool hilite)
// Draw the box
gui->box(_x, _y, _w, _h);
+
+ // Remove old 'bar' if necessary
+ if (_value != _old_value) {
+ gui->fillArea(_x + 2 + ((_w - 5) * _old_value / 100), _y + 2, 2, _h - 4, gui->_bgcolor);
+ _old_value = _value;
+ }
// Draw the 'bar'
- gui->line(_x + 2 + ((_w - 5)* _value / 100), _y + 2, _x + 2 + ((_w - 5)* _value / 100), _y + _h - 3, hilite ? gui->_textcolorhi : gui->_textcolor);
+ gui->fillArea(_x + 2 + ((_w - 5) * _value / 100), _y + 2, 2, _h - 4, hilite ? gui->_textcolorhi : gui->_textcolor);
}
void SliderWidget::handleMouseMoved(int x, int y, int state) {
@@ -179,7 +186,7 @@ void SliderWidget::handleMouseMoved(int x, int y, int state) {
if (newvalue != _value) {
_value = newvalue;
- setFlags(WIDGET_CLEARBG); draw(); clearFlags(WIDGET_CLEARBG);
+ draw();
}
}
-} \ No newline at end of file
+}
diff --git a/gui/widget.h b/gui/widget.h
index b89d0b00bc..651b86a12d 100644
--- a/gui/widget.h
+++ b/gui/widget.h
@@ -122,9 +122,12 @@ protected:
/* SliderWidget */
class SliderWidget : public ButtonWidget {
protected:
- int _value;
+ uint8 _value, _old_value;
public:
SliderWidget(Dialog *boss, int x, int y, int w, int h, const char *label, uint32 cmd = 0, uint8 hotkey = 0);
+ void setValue(uint8 value) { _value = value; }
+ uint8 getValue() { return _value; }
+
void handleMouseMoved(int x, int y, int button);
protected:
diff --git a/newgui.cpp b/newgui.cpp
index 059980b67e..be0e706823 100644
--- a/newgui.cpp
+++ b/newgui.cpp
@@ -242,7 +242,7 @@ void NewGui::line(int x, int y, int x2, int y2, byte color)
}
}
-void NewGui::clearArea(int x, int y, int w, int h)
+void NewGui::fillArea(int x, int y, int w, int h, byte color)
{
byte *ptr = getBasePtr(x, y);
if (ptr == NULL)
@@ -250,7 +250,7 @@ void NewGui::clearArea(int x, int y, int w, int h)
while (h--) {
for (int i = 0; i < w; i++)
- ptr[i] = _bgcolor;
+ ptr[i] = color;
ptr += 320;
}
}
diff --git a/newgui.h b/newgui.h
index 3bab0773e7..da405c9639 100644
--- a/newgui.h
+++ b/newgui.h
@@ -95,7 +95,7 @@ public:
byte *getBasePtr(int x, int y);
void box(int x, int y, int width, int height);
void line(int x, int y, int x2, int y2, byte color);
- void clearArea(int x, int y, int w, int h);
+ void fillArea(int x, int y, int w, int h, byte color);
void setAreaDirty(int x, int y, int w, int h);
void drawChar(const char c, int x, int y);
void drawString(const char *str, int x, int y, int w, byte color);