aboutsummaryrefslogtreecommitdiff
path: root/gui
diff options
context:
space:
mode:
authorMax Horn2002-07-13 18:32:09 +0000
committerMax Horn2002-07-13 18:32:09 +0000
commit1238d7422705e88097d21a3d0e34683262be4331 (patch)
tree1c91aec348222a0955b638e9308ab7a85f5965ec /gui
parent101613f6fd6226bd0d205efe395de4e2b1009731 (diff)
downloadscummvm-rg350-1238d7422705e88097d21a3d0e34683262be4331.tar.gz
scummvm-rg350-1238d7422705e88097d21a3d0e34683262be4331.tar.bz2
scummvm-rg350-1238d7422705e88097d21a3d0e34683262be4331.zip
took painelf's change, modified it a lot, and now here's the result :-)
svn-id: r4540
Diffstat (limited to 'gui')
-rw-r--r--gui/ListWidget.cpp4
-rw-r--r--gui/ListWidget.h4
-rw-r--r--gui/ScrollBarWidget.cpp9
-rw-r--r--gui/ScrollBarWidget.h7
-rw-r--r--gui/dialog.cpp28
-rw-r--r--gui/dialog.h12
-rw-r--r--gui/widget.cpp23
-rw-r--r--gui/widget.h13
8 files changed, 73 insertions, 27 deletions
diff --git a/gui/ListWidget.cpp b/gui/ListWidget.cpp
index ca501fe617..096c8cd1d5 100644
--- a/gui/ListWidget.cpp
+++ b/gui/ListWidget.cpp
@@ -83,7 +83,7 @@ ListWidget::~ListWidget()
{
}
-void ListWidget::handleClick(int x, int y, int button)
+void ListWidget::handleMouseDown(int x, int y, int button)
{
if (_flags & WIDGET_ENABLED) {
_selectedItem = (y - 2) / LINE_HEIGHT + _currentPos;
@@ -91,7 +91,7 @@ void ListWidget::handleClick(int x, int y, int button)
}
}
-void ListWidget::handleKey(char key, int modifiers)
+void ListWidget::handleKeyDown(char key, int modifiers)
{
}
diff --git a/gui/ListWidget.h b/gui/ListWidget.h
index 35a827e017..d3f7b7760d 100644
--- a/gui/ListWidget.h
+++ b/gui/ListWidget.h
@@ -51,8 +51,8 @@ public:
int getSelected() const { return _selectedItem; }
void setNumberingMode(int numberingMode) { _numberingMode = numberingMode; }
- virtual void handleClick(int x, int y, int button);
- virtual void handleKey(char key, int modifiers);
+ virtual void handleMouseDown(int x, int y, int button);
+ virtual void handleKeyDown(char key, int modifiers);
virtual void handleCommand(CommandSender *sender, uint32 cmd, uint32 data);
protected:
diff --git a/gui/ScrollBarWidget.cpp b/gui/ScrollBarWidget.cpp
index d5a9607f4c..79db84ca30 100644
--- a/gui/ScrollBarWidget.cpp
+++ b/gui/ScrollBarWidget.cpp
@@ -68,7 +68,7 @@ ScrollBarWidget::ScrollBarWidget(Dialog *boss, int x, int y, int w, int h)
}
-void ScrollBarWidget::handleClick(int x, int y, int button)
+void ScrollBarWidget::handleMouseDown(int x, int y, int button)
{
int old_pos = _currentPos;
@@ -97,11 +97,14 @@ void ScrollBarWidget::handleClick(int x, int y, int button)
}
}
-void ScrollBarWidget::handleMouseMoved(int x, int y, int button)
+void ScrollBarWidget::handleMouseUp(int x, int y, int button)
{
- if (button == 0)
+ if (_isDraggingSlider)
_isDraggingSlider = false;
+}
+void ScrollBarWidget::handleMouseMoved(int x, int y, int button)
+{
if (_isDraggingSlider) {
int old_pos = _currentPos;
_sliderPos = y - _sliderDeltaMouseDownPos;
diff --git a/gui/ScrollBarWidget.h b/gui/ScrollBarWidget.h
index 842e0e767d..c4b54b446c 100644
--- a/gui/ScrollBarWidget.h
+++ b/gui/ScrollBarWidget.h
@@ -54,13 +54,14 @@ public:
int _currentPos;
public:
ScrollBarWidget(Dialog *boss, int x, int y, int w, int h);
-// virtual ~ScrollBarWidget();
- void handleClick(int x, int y, int button);
+ void handleMouseDown(int x, int y, int button);
+ void handleMouseUp(int x, int y, int button);
void handleMouseMoved(int x, int y, int button);
void handleMouseEntered(int button) { setFlags(WIDGET_HILITED); }
- void handleMouseLeft(int button) { clearFlags(WIDGET_HILITED); _part = kNoPart; _isDraggingSlider = false; draw(); }
+ void handleMouseLeft(int button) { clearFlags(WIDGET_HILITED); _part = kNoPart; draw(); }
+ // FIXME: Shouldn't these be private?
void recalc();
protected:
diff --git a/gui/dialog.cpp b/gui/dialog.cpp
index 828a630168..52556d5fcf 100644
--- a/gui/dialog.cpp
+++ b/gui/dialog.cpp
@@ -80,25 +80,38 @@ void Dialog::draw()
}
}
-void Dialog::handleClick(int x, int y, int button)
+void Dialog::handleMouseDown(int x, int y, int button)
+{
+ // FIXME: If outside focused widget, widget loses focus
+
+ Widget *w = findWidget(x - _x, y - _y);
+ if (w)
+ w->handleMouseDown(x - _x - w->_x, y - _y - w->_y, button);
+}
+
+void Dialog::handleMouseUp(int x, int y, int button)
{
Widget *w = findWidget(x - _x, y - _y);
if (w)
- w->handleClick(x - _x - w->_x, y - _y - w->_y, button);
+ w->handleMouseUp(x - _x - w->_x, y - _y - w->_y, button);
}
-void Dialog::handleKey(char key, int modifiers)
+void Dialog::handleKeyDown(char key, int modifiers)
{
// ESC closes all dialogs by default
if (key == 27)
close();
+ // FIXME: Only if not focused widget
+
// Hotkey handling
Widget *w = _firstWidget;
key = toupper(key);
while (w) {
if (w->_type == kButtonWidget && key == toupper(((ButtonWidget *)w)->_hotkey)) {
- w->handleClick(0, 0, 1);
+ // FIXME: Calling both handlers is bad style, but we don't really know which one we're supposed to call
+ w->handleMouseDown(0, 0, 1);
+ w->handleMouseUp(0, 0, 1);
break;
}
w = w->_next;
@@ -109,6 +122,11 @@ void Dialog::handleKey(char key, int modifiers)
// and also for an editable list widget.
}
+void Dialog::handleKeyUp(char key, int modifiers)
+{
+ // FIXME: Focused widget recieves keyup
+}
+
void Dialog::handleMouseMoved(int x, int y, int button)
{
Widget *w = findWidget(x - _x, y - _y);
@@ -127,6 +145,8 @@ void Dialog::handleMouseMoved(int x, int y, int button)
if (w->getFlags() & WIDGET_TRACK_MOUSE) {
w->handleMouseMoved(x - _x - w->_x, y - _y - w->_y, button);
}
+
+ //FIXME: Focused widget recieves mouseup
}
diff --git a/gui/dialog.h b/gui/dialog.h
index 29a4b76795..460fa6e0bf 100644
--- a/gui/dialog.h
+++ b/gui/dialog.h
@@ -53,8 +53,10 @@ public:
virtual void draw();
//virtual void handleIdle(); // Called periodically
- virtual void handleClick(int x, int y, int button);
- virtual void handleKey(char key, int modifiers); // modifiers = alt/shift/ctrl etc.
+ virtual void handleMouseDown(int x, int y, int button);
+ virtual void handleMouseUp(int x, int y, int button);
+ virtual void handleKeyDown(char key, int modifiers); // modifiers = alt/shift/ctrl etc.
+ virtual void handleKeyUp(char key, int modifiers); // modifiers = alt/shift/ctrl etc.
virtual void handleMouseMoved(int x, int y, int button);
virtual void handleCommand(CommandSender *sender, uint32 cmd, uint32 data);
@@ -102,14 +104,14 @@ class PauseDialog : public Dialog {
public:
PauseDialog(NewGui *gui);
- virtual void handleClick(int x, int y, int button)
+ virtual void handleMouseDown(int x, int y, int button)
{ close(); }
- virtual void handleKey(char key, int modifiers)
+ virtual void handleKeyDown(char key, int modifiers)
{
if (key == 32)
close();
else
- Dialog::handleKey(key, modifiers);
+ Dialog::handleKeyDown(key, modifiers);
}
};
diff --git a/gui/widget.cpp b/gui/widget.cpp
index f170ddadc2..22bf54096c 100644
--- a/gui/widget.cpp
+++ b/gui/widget.cpp
@@ -127,7 +127,7 @@ ButtonWidget::~ButtonWidget()
}
}
-void ButtonWidget::handleClick(int x, int y, int button)
+void ButtonWidget::handleMouseDown(int x, int y, int button)
{
if (_flags & WIDGET_ENABLED)
sendCommand(_cmd, 0);
@@ -155,7 +155,7 @@ CheckboxWidget::CheckboxWidget(Dialog *boss, int x, int y, int w, int h, const c
_type = kCheckboxWidget;
}
-void CheckboxWidget::handleClick(int x, int y, int button)
+void CheckboxWidget::handleMouseDown(int x, int y, int button)
{
if (_flags & WIDGET_ENABLED) {
_state = !_state;
@@ -190,8 +190,8 @@ SliderWidget::SliderWidget(Dialog *boss, int x, int y, int w, int h, const char
_type = kSliderWidget;
}
-void SliderWidget::handleMouseMoved(int x, int y, int state) {
- if (state == 1) {
+void SliderWidget::handleMouseMoved(int x, int y, int button) {
+ if (_isDragging) {
int newvalue = x * 100 / _w;
if (newvalue != _value) {
@@ -217,3 +217,18 @@ void SliderWidget::drawWidget(bool hilite)
// Draw the 'bar'
gui->fillRect(_x + 2 + ((_w - 5) * _value / 100), _y + 2, 2, _h - 4, hilite ? gui->_textcolorhi : gui->_textcolor);
}
+
+void SliderWidget::handleMouseDown(int x, int y, int button) {
+ int barx;
+
+ barx=2 + ((_w - 5) * _old_value / 100);
+
+ // only start dragging if mouse is over bar
+ if (x > (barx-3) && x < (barx+3))
+ _isDragging=true;
+}
+
+void SliderWidget::handleMouseUp(int x, int y, int button) {
+ if (_isDragging)
+ _isDragging=false;
+}
diff --git a/gui/widget.h b/gui/widget.h
index b9fc92cc52..e237e24824 100644
--- a/gui/widget.h
+++ b/gui/widget.h
@@ -86,11 +86,13 @@ public:
Widget(Dialog *boss, int x, int y, int w, int h);
virtual ~Widget() {}
- virtual void handleClick(int x, int y, int button) {}
+ virtual void handleMouseDown(int x, int y, int button) {}
+ virtual void handleMouseUp(int x, int y, int button) {}
virtual void handleMouseEntered(int button) {}
virtual void handleMouseLeft(int button) {}
virtual void handleMouseMoved(int x, int y, int button) {}
- virtual void handleKey(char key, int modifiers) {}
+ virtual void handleKeyDown(char key, int modifiers) {}
+ virtual void handleKeyUp(char key, int modifiers) {}
void draw();
void setFlags(int flags) { _flags |= flags; }
@@ -130,7 +132,7 @@ public:
void setCmd(uint32 cmd) { _cmd = cmd; }
uint32 getCmd() const { return _cmd; }
- void handleClick(int x, int y, int button);
+ void handleMouseDown(int x, int y, int button);
void handleMouseEntered(int button) { setFlags(WIDGET_HILITED); draw(); }
void handleMouseLeft(int button) { clearFlags(WIDGET_HILITED); draw(); }
};
@@ -144,7 +146,7 @@ public:
void setState(bool state) { _state = state; }
bool getState() const { return _state; }
- void handleClick(int x, int y, int button);
+ void handleMouseDown(int x, int y, int button);
virtual void handleMouseEntered(int button) {}
virtual void handleMouseLeft(int button) {}
@@ -156,12 +158,15 @@ protected:
class SliderWidget : public ButtonWidget {
protected:
uint8 _value, _old_value;
+ bool _isDragging;
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() const { return _value; }
void handleMouseMoved(int x, int y, int button);
+ void handleMouseDown(int x, int y, int button);
+ void handleMouseUp(int x, int y, int button);
protected:
void drawWidget(bool hilite);