added mouse over effect
svn-id: r4466
This commit is contained in:
parent
71080f98ab
commit
671678a6c5
7 changed files with 54 additions and 24 deletions
|
@ -43,6 +43,19 @@ void Dialog::handleClick(int x, int y, int button)
|
||||||
w->handleClick(button);
|
w->handleClick(button);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Dialog::handleMouseMoved(int x, int y, int button)
|
||||||
|
{
|
||||||
|
Widget *w = findWidget(x - _x, y - _y);
|
||||||
|
if (_mouseWidget != w) {
|
||||||
|
if (_mouseWidget)
|
||||||
|
_mouseWidget->handleMouseLeft(button);
|
||||||
|
if (w)
|
||||||
|
w->handleMouseEntered(button);
|
||||||
|
_mouseWidget = w;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Determine the widget at location (x,y) if any. Assumes the coordinates are
|
* Determine the widget at location (x,y) if any. Assumes the coordinates are
|
||||||
* in the local coordinate system, i.e. relative to the top left of the dialog.
|
* in the local coordinate system, i.e. relative to the top left of the dialog.
|
||||||
|
|
|
@ -35,9 +35,10 @@ protected:
|
||||||
Widget *_firstWidget;
|
Widget *_firstWidget;
|
||||||
int16 _x, _y;
|
int16 _x, _y;
|
||||||
uint16 _w, _h;
|
uint16 _w, _h;
|
||||||
|
Widget *_mouseWidget;
|
||||||
public:
|
public:
|
||||||
Dialog(NewGui *gui, int x, int y, int w, int h)
|
Dialog(NewGui *gui, int x, int y, int w, int h)
|
||||||
: _gui(gui), _firstWidget(0), _x(x), _y(y), _w(w), _h(h)
|
: _gui(gui), _firstWidget(0), _x(x), _y(y), _w(w), _h(h), _mouseWidget(0)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
virtual void draw();
|
virtual void draw();
|
||||||
|
@ -46,6 +47,7 @@ public:
|
||||||
virtual void handleClick(int x, int y, int button);
|
virtual void handleClick(int x, int y, int button);
|
||||||
virtual void handleKey(char key, int modifiers) // modifiers = alt/shift/ctrl etc.
|
virtual void handleKey(char key, int modifiers) // modifiers = alt/shift/ctrl etc.
|
||||||
{ if (key == 27) close(); }
|
{ if (key == 27) close(); }
|
||||||
|
virtual void handleMouseMoved(int x, int y, int button);
|
||||||
virtual void handleCommand(uint32 cmd)
|
virtual void handleCommand(uint32 cmd)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
|
@ -53,7 +53,7 @@ void Widget::draw()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Now perform the actual widget draw
|
// Now perform the actual widget draw
|
||||||
drawWidget(false);
|
drawWidget(_flags & WIDGET_HILITED);
|
||||||
|
|
||||||
if (_flags & WIDGET_BORDER) {
|
if (_flags & WIDGET_BORDER) {
|
||||||
_x -= 4;
|
_x -= 4;
|
||||||
|
|
16
gui/widget.h
16
gui/widget.h
|
@ -29,9 +29,10 @@ class Dialog;
|
||||||
enum {
|
enum {
|
||||||
WIDGET_ENABLED = 1 << 0,
|
WIDGET_ENABLED = 1 << 0,
|
||||||
WIDGET_INVISIBLE = 1 << 1,
|
WIDGET_INVISIBLE = 1 << 1,
|
||||||
WIDGET_BORDER = 1 << 2,
|
WIDGET_HILITED = 1 << 2,
|
||||||
WIDGET_CLEARBG = 1 << 3,
|
WIDGET_BORDER = 1 << 3,
|
||||||
WIDGET_WANT_TICKLE = 1 << 4,
|
WIDGET_CLEARBG = 1 << 4,
|
||||||
|
WIDGET_WANT_TICKLE = 1 << 5,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Widget */
|
/* Widget */
|
||||||
|
@ -47,7 +48,9 @@ protected:
|
||||||
public:
|
public:
|
||||||
Widget(Dialog *boss, int x, int y, int w, int h);
|
Widget(Dialog *boss, int x, int y, int w, int h);
|
||||||
|
|
||||||
virtual void handleClick(int button) {}
|
virtual void handleClick(int button) {}
|
||||||
|
virtual void handleMouseEntered(int button) {}
|
||||||
|
virtual void handleMouseLeft(int button) {}
|
||||||
void draw();
|
void draw();
|
||||||
|
|
||||||
void setFlags(int flags) { _flags |= flags; }
|
void setFlags(int flags) { _flags |= flags; }
|
||||||
|
@ -76,13 +79,16 @@ protected:
|
||||||
/* ButtonWidget */
|
/* ButtonWidget */
|
||||||
class ButtonWidget : public StaticTextWidget {
|
class ButtonWidget : public StaticTextWidget {
|
||||||
protected:
|
protected:
|
||||||
uint8 _hotkey;
|
|
||||||
uint32 _cmd;
|
uint32 _cmd;
|
||||||
|
uint8 _hotkey;
|
||||||
public:
|
public:
|
||||||
ButtonWidget(Dialog *boss, int x, int y, int w, int h, const char *label, uint32 cmd);
|
ButtonWidget(Dialog *boss, int x, int y, int w, int h, const char *label, uint32 cmd);
|
||||||
void setCmd(uint32 cmd);
|
void setCmd(uint32 cmd);
|
||||||
uint32 getCmd();
|
uint32 getCmd();
|
||||||
void handleClick(int button);
|
void handleClick(int button);
|
||||||
|
|
||||||
|
void handleMouseEntered(int button) { printf("handleMouseEntered\n"); setFlags(WIDGET_HILITED); draw(); }
|
||||||
|
void handleMouseLeft(int button) { printf("handleMouseLeft\n"); clearFlags(WIDGET_HILITED); draw(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -61,6 +61,10 @@ void NewGui::loop()
|
||||||
_activeDialog->handleClick(_s->mouse.x, _s->mouse.y, _s->_mouseButStat);
|
_activeDialog->handleClick(_s->mouse.x, _s->mouse.y, _s->_mouseButStat);
|
||||||
} else if (_s->_lastKeyHit) {
|
} else if (_s->_lastKeyHit) {
|
||||||
_activeDialog->handleKey(_s->_lastKeyHit, 0);
|
_activeDialog->handleKey(_s->_lastKeyHit, 0);
|
||||||
|
} else if (_old_mouse.x != _s->mouse.x || _old_mouse.y != _s->mouse.y) {
|
||||||
|
_activeDialog->handleMouseMoved(_s->mouse.x, _s->mouse.y, _s->_mouseButStat);
|
||||||
|
_old_mouse.x = _s->mouse.x;
|
||||||
|
_old_mouse.y = _s->mouse.y;
|
||||||
}
|
}
|
||||||
|
|
||||||
_s->drawDirtyScreenParts();
|
_s->drawDirtyScreenParts();
|
||||||
|
|
25
newgui.h
25
newgui.h
|
@ -44,21 +44,26 @@ public:
|
||||||
NewGui(Scumm *s);
|
NewGui(Scumm *s);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Scumm *_s;
|
Scumm *_s;
|
||||||
bool _active;
|
bool _active;
|
||||||
bool _need_redraw;
|
bool _need_redraw;
|
||||||
Dialog *_activeDialog;
|
Dialog *_activeDialog;
|
||||||
|
|
||||||
Dialog *_pauseDialog;
|
Dialog *_pauseDialog;
|
||||||
Dialog *_saveLoadDialog;
|
Dialog *_saveLoadDialog;
|
||||||
|
|
||||||
// sound state
|
// sound state
|
||||||
bool _old_soundsPaused;
|
bool _old_soundsPaused;
|
||||||
|
|
||||||
// mouse cursor state
|
// mouse cursor state
|
||||||
bool _old_cursor_mode;
|
bool _old_cursor_mode;
|
||||||
int _old_cursorHotspotX, _old_cursorHotspotY, _old_cursorWidth, _old_cursorHeight;
|
int _old_cursorHotspotX, _old_cursorHotspotY, _old_cursorWidth, _old_cursorHeight;
|
||||||
byte _old_grabbedCursor[2048];
|
byte _old_grabbedCursor[2048];
|
||||||
|
|
||||||
|
// mouse pos
|
||||||
|
struct {
|
||||||
|
int16 x,y;
|
||||||
|
} _old_mouse;
|
||||||
|
|
||||||
void saveState();
|
void saveState();
|
||||||
void restoreState();
|
void restoreState();
|
||||||
|
|
14
scumm.h
14
scumm.h
|
@ -74,7 +74,7 @@ enum {
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ScummPoint {
|
struct ScummPoint {
|
||||||
int x,y;
|
int x, y;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct MemBlkHeader {
|
struct MemBlkHeader {
|
||||||
|
@ -417,12 +417,12 @@ struct ArrayHeader {
|
||||||
};
|
};
|
||||||
|
|
||||||
struct SentenceTab {
|
struct SentenceTab {
|
||||||
byte unk5;
|
byte unk5;
|
||||||
byte unk2;
|
byte unk2;
|
||||||
uint16 unk4;
|
uint16 unk4;
|
||||||
uint16 unk3;
|
uint16 unk3;
|
||||||
byte unk;
|
byte unk;
|
||||||
byte pad;
|
byte pad;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct StringTab {
|
struct StringTab {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue