From e2bd162d1d1ed386719cc99f394801bd59726d3d Mon Sep 17 00:00:00 2001 From: nakeee Date: Mon, 29 Dec 2008 14:30:38 +0000 Subject: [PATCH] A suggestion for event handler API event.hpp is taken from SMFL code. This allows me to use their code to make X11/Win events into ones we can handle git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@1715 8ced0084-cf51-0410-be5f-012b33b47a6e --- Source/Core/Core/Src/Event.hpp | 309 ++++++++++++++++++++++++++ Source/Core/Core/Src/EventHandler.cpp | 1 + Source/Core/Core/Src/EventHandler.h | 22 ++ Source/Core/Core/Src/SConscript | 1 + 4 files changed, 333 insertions(+) create mode 100755 Source/Core/Core/Src/Event.hpp create mode 100644 Source/Core/Core/Src/EventHandler.cpp create mode 100644 Source/Core/Core/Src/EventHandler.h diff --git a/Source/Core/Core/Src/Event.hpp b/Source/Core/Core/Src/Event.hpp new file mode 100755 index 0000000000..8da9399739 --- /dev/null +++ b/Source/Core/Core/Src/Event.hpp @@ -0,0 +1,309 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2008 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_EVENT_HPP +#define SFML_EVENT_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +//#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// Definition of key codes for keyboard events +//////////////////////////////////////////////////////////// +namespace Key +{ + enum Code + { + A = 'a', + B = 'b', + C = 'c', + D = 'd', + E = 'e', + F = 'f', + G = 'g', + H = 'h', + I = 'i', + J = 'j', + K = 'k', + L = 'l', + M = 'm', + N = 'n', + O = 'o', + P = 'p', + Q = 'q', + R = 'r', + S = 's', + T = 't', + U = 'u', + V = 'v', + W = 'w', + X = 'x', + Y = 'y', + Z = 'z', + Num0 = '0', + Num1 = '1', + Num2 = '2', + Num3 = '3', + Num4 = '4', + Num5 = '5', + Num6 = '6', + Num7 = '7', + Num8 = '8', + Num9 = '9', + Escape = 256, + LControl, + LShift, + LAlt, + LSystem, ///< OS specific key (left side) : windows (Win and Linux), apple (MacOS), ... + RControl, + RShift, + RAlt, + RSystem, ///< OS specific key (right side) : windows (Win and Linux), apple (MacOS), ... + Menu, + LBracket, ///< [ + RBracket, ///< ] + SemiColon, ///< ; + Comma, ///< , + Period, ///< . + Quote, ///< ' + Slash, ///< / + BackSlash, + Tilde, ///< ~ + Equal, ///< = + Dash, ///< - + Space, + Return, + Back, + Tab, + PageUp, + PageDown, + End, + Home, + Insert, + Delete, + Add, ///< + + Subtract, ///< - + Multiply, ///< * + Divide, ///< / + Left, ///< Left arrow + Right, ///< Right arrow + Up, ///< Up arrow + Down, ///< Down arrow + Numpad0, + Numpad1, + Numpad2, + Numpad3, + Numpad4, + Numpad5, + Numpad6, + Numpad7, + Numpad8, + Numpad9, + F1, + F2, + F3, + F4, + F5, + F6, + F7, + F8, + F9, + F10, + F11, + F12, + F13, + F14, + F15, + Pause, + + Count // For internal use + }; +} + + +//////////////////////////////////////////////////////////// +/// Definition of button codes for mouse events +//////////////////////////////////////////////////////////// +namespace Mouse +{ + enum Button + { + Left, + Right, + Middle, + XButton1, + XButton2, + + Count // For internal use + }; +} + + +//////////////////////////////////////////////////////////// +/// Definition of joystick axis for joystick events +//////////////////////////////////////////////////////////// +namespace Joy +{ + enum Axis + { + AxisX, + AxisY, + AxisZ, + AxisR, + AxisU, + AxisV, + AxisPOV, + + Count // For internal use + }; +} + + +//////////////////////////////////////////////////////////// +/// Event defines a system event and its parameters +//////////////////////////////////////////////////////////// +class Event +{ +public : + + //////////////////////////////////////////////////////////// + /// Keyboard event parameters + //////////////////////////////////////////////////////////// + struct KeyEvent + { + Key::Code Code; + bool Alt; + bool Control; + bool Shift; + }; + + //////////////////////////////////////////////////////////// + /// Text event parameters + //////////////////////////////////////////////////////////// + struct TextEvent + { + unsigned short Unicode; + }; + + //////////////////////////////////////////////////////////// + /// Mouse move event parameters + //////////////////////////////////////////////////////////// + struct MouseMoveEvent + { + unsigned int X; + unsigned int Y; + }; + + //////////////////////////////////////////////////////////// + /// Mouse buttons events parameters + //////////////////////////////////////////////////////////// + struct MouseButtonEvent + { + Mouse::Button Button; + }; + + //////////////////////////////////////////////////////////// + /// Mouse wheel events parameters + //////////////////////////////////////////////////////////// + struct MouseWheelEvent + { + int Delta; + }; + + //////////////////////////////////////////////////////////// + /// Joystick axis move event parameters + //////////////////////////////////////////////////////////// + struct JoyMoveEvent + { + unsigned int JoystickId; + Joy::Axis Axis; + float Position; + }; + + //////////////////////////////////////////////////////////// + /// Joystick buttons events parameters + //////////////////////////////////////////////////////////// + struct JoyButtonEvent + { + unsigned int JoystickId; + unsigned int Button; + }; + + //////////////////////////////////////////////////////////// + /// Size events parameters + //////////////////////////////////////////////////////////// + struct SizeEvent + { + unsigned int Width; + unsigned int Height; + }; + + //////////////////////////////////////////////////////////// + /// Enumeration of the different types of events + //////////////////////////////////////////////////////////// + enum EventType + { + Closed, + Resized, + LostFocus, + GainedFocus, + TextEntered, + KeyPressed, + KeyReleased, + MouseWheelMoved, + MouseButtonPressed, + MouseButtonReleased, + MouseMoved, + JoyButtonPressed, + JoyButtonReleased, + JoyMoved + }; + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + EventType Type; ///< Type of the event + + union + { + KeyEvent Key; + TextEvent Text; + MouseMoveEvent MouseMove; + MouseButtonEvent MouseButton; + MouseWheelEvent MouseWheel; + JoyMoveEvent JoyMove; + JoyButtonEvent JoyButton; + SizeEvent Size; + }; +}; + +} // namespace sf + + +#endif // SFML_EVENT_HPP diff --git a/Source/Core/Core/Src/EventHandler.cpp b/Source/Core/Core/Src/EventHandler.cpp new file mode 100644 index 0000000000..3b04535897 --- /dev/null +++ b/Source/Core/Core/Src/EventHandler.cpp @@ -0,0 +1 @@ +#include "EventHandler.h" diff --git a/Source/Core/Core/Src/EventHandler.h b/Source/Core/Core/Src/EventHandler.h new file mode 100644 index 0000000000..da79e865a6 --- /dev/null +++ b/Source/Core/Core/Src/EventHandler.h @@ -0,0 +1,22 @@ +#ifndef EVENTHANDER_H +#define EVENTHANDER_H 1 +#include +#include "Event.hpp" + +typedef bool (*listenFuncPtr) (sf::Event *); + +class EventHandler { + +private: + listenFuncPtr keys[100][6]; + listenFuncPtr mouse[6]; + listenFuncPtr joys[10]; + std::queue eventQueue; +public: + bool RegisterEventListener(listenFuncPtr func, int event, int type); + void Update(); + bool addEvent(sf::Event *); + +}; + +#endif diff --git a/Source/Core/Core/Src/SConscript b/Source/Core/Core/Src/SConscript index 2c73e3d347..8a03a814e8 100644 --- a/Source/Core/Core/Src/SConscript +++ b/Source/Core/Core/Src/SConscript @@ -15,6 +15,7 @@ files = ["Console.cpp", "State.cpp", "Tracer.cpp", "VolumeHandler.cpp", + "EventHandler.cpp", "Boot/Boot.cpp", "Boot/Boot_BIOSEmu.cpp", "Boot/Boot_DOL.cpp",