diff options
| author | nakeee <nakeee@gmail.com> | 2008-12-30 10:35:52 +0000 |
|---|---|---|
| committer | nakeee <nakeee@gmail.com> | 2008-12-30 10:35:52 +0000 |
| commit | 443e5051541b6e6fb495c5576c2c98dda915b7a7 (patch) | |
| tree | 079abdb571b242da87766f4cf5c05bb8b83892ef /Source/Core | |
| parent | e8949267f03e4ee9416e192ee83f9e6fb5b89712 (diff) | |
more event handler stuff
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@1721 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/Core')
| -rw-r--r-- | Source/Core/Core/Src/EventHandler.cpp | 28 | ||||
| -rw-r--r-- | Source/Core/Core/Src/EventHandler.h | 19 |
2 files changed, 41 insertions, 6 deletions
diff --git a/Source/Core/Core/Src/EventHandler.cpp b/Source/Core/Core/Src/EventHandler.cpp index bb296d8468..f252524343 100644 --- a/Source/Core/Core/Src/EventHandler.cpp +++ b/Source/Core/Core/Src/EventHandler.cpp @@ -1,6 +1,34 @@ #include "EventHandler.h" #include <wx/wx.h> +bool EventHandler::RegisterEventListener(listenFuncPtr func, Keys key) { + if (key.inputType == KeyboardInput) { + if (keys[key.keyCode][key.mods]) + return false; + keys[key.keyCode][key.mods] = func; + } else if (key.inputType == MouseInput) { + if (mouse[key.mouseButton]) + return false; + mouse[key.mouseButton] = func; + } + + return true; +} + +void EventHandler::Update() { + for (unsigned int i = 0; i < eventQueue.size();i++) { + sf::Event ev = eventQueue.front(); + eventQueue.pop(); + keys[ev.Key.Code][ev.Key.Alt+2*ev.Key.Shift+4*ev.Key.Control](ev); + } +} + +bool EventHandler::addEvent(sf::Event *ev) { + eventQueue.push(*ev); + return true; +} + + bool EventHandler::TestEvent (Keys k, sf::Event e) { //Mouse event diff --git a/Source/Core/Core/Src/EventHandler.h b/Source/Core/Core/Src/EventHandler.h index 3ced661036..0141f46802 100644 --- a/Source/Core/Core/Src/EventHandler.h +++ b/Source/Core/Core/Src/EventHandler.h @@ -3,7 +3,7 @@ #include <queue> #include "Event.hpp" -typedef bool (*listenFuncPtr) (sf::Event *); +typedef bool (*listenFuncPtr) (sf::Event); enum InputType { KeyboardInput, @@ -11,25 +11,32 @@ enum InputType JoystickInput }; +enum Modifiers { + UseAlt = 1, + UseShift = 2, + UseCtrl = 4 +}; + struct Keys { InputType inputType; - sf::Event::EventType eventType; + sf::Event::EventType eventType; sf::Key::Code keyCode; + int mods; sf::Mouse::Button mouseButton; }; class EventHandler { private: - listenFuncPtr keys[sf::Key::Count][6]; + listenFuncPtr keys[sf::Key::Count][8]; listenFuncPtr mouse[sf::Mouse::Count]; listenFuncPtr joys[sf::Joy::Count]; - std::queue<Keys> eventQueue; + std::queue<sf::Event> eventQueue; public: - bool RegisterEventListener(listenFuncPtr func, int event, int type); + bool RegisterEventListener(listenFuncPtr func, Keys key); void Update(); - bool addEvent(sf::Event *); + bool addEvent(sf::Event *e); static bool TestEvent (Keys k, sf::Event e); static int wxCharCodeWXToSF(int id); static void SFKeyToString(unsigned int keycode, char *keyStr); |
