The event router is working well and I can do drag-n-drop but I'll have to rethink where to use it.
This commit is contained in:
parent
5aa54d875f
commit
c509162be1
8 changed files with 126 additions and 63 deletions
|
@ -1,4 +1,3 @@
|
|||
#define FSM_DEBUG 1
|
||||
#include "event_router.hpp"
|
||||
#include "dbc.hpp"
|
||||
#include "events.hpp"
|
||||
|
@ -44,6 +43,7 @@ namespace gui {
|
|||
FSM_STATE(State, IDLE, ev);
|
||||
FSM_STATE(State, MOUSE_ACTIVE, ev);
|
||||
FSM_STATE(State, MOUSE_MOVING, ev);
|
||||
FSM_STATE(State, MOUSE_DRAGGING, ev);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -54,17 +54,15 @@ namespace gui {
|
|||
void Router::IDLE(Event ev) {
|
||||
switch(ev) {
|
||||
case MOUSE_DOWN:
|
||||
move_count=0;
|
||||
set_event(gui::Event::TICK);
|
||||
state(State::MOUSE_ACTIVE);
|
||||
break;
|
||||
case MOUSE_UP:
|
||||
dbc::log("mouse up in IDLE");
|
||||
break;
|
||||
case MOUSE_MOVE:
|
||||
dbc::log("mouse move, send moved event");
|
||||
set_event(gui::Event::MOUSE_MOVE);
|
||||
break;
|
||||
case KEY_PRESS:
|
||||
dbc::log("key pressed");
|
||||
set_event(gui::Event::KEY_PRESS);
|
||||
break;
|
||||
default:
|
||||
dbc::sentinel("invalid event");
|
||||
|
@ -73,18 +71,17 @@ namespace gui {
|
|||
|
||||
void Router::MOUSE_ACTIVE(Event ev) {
|
||||
switch(ev) {
|
||||
case MOUSE_DOWN:
|
||||
dbc::log("mouse down in MOUSE_ACTIVE");
|
||||
break;
|
||||
case MOUSE_UP:
|
||||
dbc::log("mouse up, send click event");
|
||||
set_event(gui::Event::MOUSE_CLICK);
|
||||
state(State::IDLE);
|
||||
break;
|
||||
case MOUSE_MOVE:
|
||||
move_count++;
|
||||
set_event(gui::Event::MOUSE_DRAG);
|
||||
state(State::MOUSE_MOVING);
|
||||
break;
|
||||
case KEY_PRESS:
|
||||
dbc::log("send the key but cancel");
|
||||
set_event(gui::Event::KEY_PRESS);
|
||||
state(State::IDLE);
|
||||
break;
|
||||
default:
|
||||
|
@ -94,23 +91,46 @@ namespace gui {
|
|||
|
||||
void Router::MOUSE_MOVING(Event ev) {
|
||||
switch(ev) {
|
||||
case MOUSE_DOWN:
|
||||
dbc::log("mouse down in MOUSE_MOVING state");
|
||||
break;
|
||||
case MOUSE_UP:
|
||||
dbc::log("mouse up, send drop event");
|
||||
case MOUSE_UP: {
|
||||
dbc::check(move_count < $drag_tolerance, "mouse up but not in dragging state");
|
||||
set_event(gui::Event::MOUSE_CLICK);
|
||||
state(State::IDLE);
|
||||
break;
|
||||
} break;
|
||||
case MOUSE_MOVE:
|
||||
dbc::log("mouse move, send drag event");
|
||||
move_count++;
|
||||
|
||||
if(move_count < $drag_tolerance) {
|
||||
set_event(gui::Event::MOUSE_DRAG);
|
||||
} else {
|
||||
set_event(gui::Event::MOUSE_DRAG_START);
|
||||
state(State::MOUSE_DRAGGING);
|
||||
}
|
||||
break;
|
||||
case KEY_PRESS:
|
||||
dbc::log("send the key but cancel");
|
||||
state(State::IDLE);
|
||||
set_event(gui::Event::KEY_PRESS);
|
||||
break;
|
||||
default:
|
||||
dbc::sentinel("invalid event");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Router::MOUSE_DRAGGING(Event ev) {
|
||||
switch(ev) {
|
||||
case MOUSE_UP:
|
||||
set_event(gui::Event::MOUSE_DROP);
|
||||
state(State::IDLE);
|
||||
break;
|
||||
case MOUSE_MOVE:
|
||||
move_count++;
|
||||
set_event(gui::Event::MOUSE_DRAG);
|
||||
break;
|
||||
case KEY_PRESS:
|
||||
set_event(gui::Event::KEY_PRESS);
|
||||
break;
|
||||
default:
|
||||
dbc::sentinel("invalid events");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue