diff options
Diffstat (limited to 'src/common')
| -rw-r--r-- | src/common/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | src/common/emu_window.cpp | 17 | ||||
| -rw-r--r-- | src/common/emu_window.h | 19 | ||||
| -rw-r--r-- | src/common/key_map.cpp | 18 | ||||
| -rw-r--r-- | src/common/key_map.h | 46 | 
5 files changed, 61 insertions, 40 deletions
| diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt index 4ae34bea9..9d5a90762 100644 --- a/src/common/CMakeLists.txt +++ b/src/common/CMakeLists.txt @@ -4,6 +4,7 @@ configure_file("${CMAKE_CURRENT_SOURCE_DIR}/scm_rev.cpp.in" "${CMAKE_CURRENT_SOU  set(SRCS              break_points.cpp              console_listener.cpp +            emu_window.cpp              extended_trace.cpp              file_search.cpp              file_util.cpp diff --git a/src/common/emu_window.cpp b/src/common/emu_window.cpp new file mode 100644 index 000000000..7a2c50ac8 --- /dev/null +++ b/src/common/emu_window.cpp @@ -0,0 +1,17 @@ +// Copyright 2014 Citra Emulator Project +// Licensed under GPLv2 +// Refer to the license.txt file included. + +#include "emu_window.h" + +void EmuWindow::KeyPressed(KeyMap::HostDeviceKey key) { +    HID_User::PadState mapped_key = KeyMap::GetPadKey(key); + +    HID_User::PadButtonPress(mapped_key); +} + +void EmuWindow::KeyReleased(KeyMap::HostDeviceKey key) { +    HID_User::PadState mapped_key = KeyMap::GetPadKey(key); + +    HID_User::PadButtonRelease(mapped_key); +} diff --git a/src/common/emu_window.h b/src/common/emu_window.h index 90fbd9335..23f178fdf 100644 --- a/src/common/emu_window.h +++ b/src/common/emu_window.h @@ -8,7 +8,6 @@  #include "common/scm_rev.h"  #include "common/key_map.h" -#include "core/hle/service/hid.h"  // Abstraction class used to provide an interface between emulation code and the frontend (e.g. SDL,   //  QGLWidget, GLFW, etc...) @@ -35,21 +34,11 @@ public:      /// Releases (dunno if this is the "right" word) the GLFW context from the caller thread      virtual void DoneCurrent() = 0; -    static void KeyPressed(KeyMap::CitraKey key) { -        HID_User::PADState mapped_key = KeyMap::Get3DSKey(key); +    /// Signals a key press action to the HID module +    static void KeyPressed(KeyMap::HostDeviceKey key); -        if (mapped_key.hex != HID_User::PAD_NONE.hex) { -            HID_User::PADButtonPress(mapped_key); -        } -    } - -    static void KeyReleased(KeyMap::CitraKey key) { -        HID_User::PADState mapped_key = KeyMap::Get3DSKey(key); - -        if (mapped_key.hex != HID_User::PAD_NONE.hex) { -            HID_User::PADButtonRelease(mapped_key); -        } -    } +    /// Signals a key release action to the HID module +    static void KeyReleased(KeyMap::HostDeviceKey key);      Config GetConfig() const {           return m_config; diff --git a/src/common/key_map.cpp b/src/common/key_map.cpp index 5941a105b..309caab98 100644 --- a/src/common/key_map.cpp +++ b/src/common/key_map.cpp @@ -1,21 +1,25 @@ -// Copyright 2013 Dolphin Emulator Project +// Copyright 2014 Citra Emulator Project  // Licensed under GPLv2  // Refer to the license.txt file included.  #include "key_map.h"  #include <map> -  namespace KeyMap { -std::map<CitraKey, HID_User::PADState> g_key_map; +static std::map<HostDeviceKey, HID_User::PadState> key_map; +static int next_device_id = 0; + +int NewDeviceId() { +    return next_device_id++; +} -void SetKeyMapping(CitraKey key, HID_User::PADState padState) { -    g_key_map[key].hex = padState.hex; +void SetKeyMapping(HostDeviceKey key, HID_User::PadState padState) { +    key_map[key].hex = padState.hex;  } -HID_User::PADState Get3DSKey(CitraKey key) { -    return g_key_map[key]; +HID_User::PadState GetPadKey(HostDeviceKey key) { +    return key_map[key];  }  } diff --git a/src/common/key_map.h b/src/common/key_map.h index 7e94df618..b5acfbab0 100644 --- a/src/common/key_map.h +++ b/src/common/key_map.h @@ -1,4 +1,4 @@ -// Copyright 2013 Dolphin Emulator Project +// Copyright 2014 Citra Emulator Project  // Licensed under GPLv2  // Refer to the license.txt file included. @@ -8,28 +8,38 @@  namespace KeyMap { -class CitraKey { -public: -    CitraKey() : keyCode(0) {} -    CitraKey(int code) : keyCode(code) {} - -    int keyCode; - -    bool operator < (const CitraKey &other) const { -        return keyCode < other.keyCode; +/** + * Represents a key for a specific host device. + */ +struct HostDeviceKey { +    int key_code; +    int device_id; ///< Uniquely identifies a host device + +    bool operator < (const HostDeviceKey &other) const { +        if (device_id == other.device_id) { +            return key_code < other.key_code; +        } +        return device_id < other.device_id;      } -    bool operator == (const CitraKey &other) const { -        return keyCode == other.keyCode; +    bool operator == (const HostDeviceKey &other) const { +        return device_id == other.device_id && key_code == other.key_code;      }  }; -struct DefaultKeyMapping { -    KeyMap::CitraKey key; -    HID_User::PADState state; -}; +/** + * Generates a new device id, which uniquely identifies a host device within KeyMap. + */ +int NewDeviceId(); + +/** + * Maps a device-specific key to a PadState. + */ +void SetKeyMapping(HostDeviceKey key, HID_User::PadState padState); -void SetKeyMapping(CitraKey key, HID_User::PADState padState); -HID_User::PADState Get3DSKey(CitraKey key); +/** + * Gets the PadState that's mapped to the provided device-specific key. + */ +HID_User::PadState GetPadKey(HostDeviceKey key);  } | 
