diff options
author | german77 <juangerman-13@hotmail.com> | 2021-09-21 00:20:56 +0200 |
---|---|---|
committer | Narr the Reg <juangerman-13@hotmail.com> | 2021-11-25 03:30:22 +0100 |
commit | fa8e23b84281022bf6b4e8916231a17e9997e5aa (patch) | |
tree | d74ffb84e5c2e391963db69bcdfb94be42edeac1 /src | |
parent | input_common: Rewrite mouse (diff) | |
download | yuzu-fa8e23b84281022bf6b4e8916231a17e9997e5aa.tar yuzu-fa8e23b84281022bf6b4e8916231a17e9997e5aa.tar.gz yuzu-fa8e23b84281022bf6b4e8916231a17e9997e5aa.tar.bz2 yuzu-fa8e23b84281022bf6b4e8916231a17e9997e5aa.tar.lz yuzu-fa8e23b84281022bf6b4e8916231a17e9997e5aa.tar.xz yuzu-fa8e23b84281022bf6b4e8916231a17e9997e5aa.tar.zst yuzu-fa8e23b84281022bf6b4e8916231a17e9997e5aa.zip |
Diffstat (limited to 'src')
-rw-r--r-- | src/input_common/CMakeLists.txt | 2 | ||||
-rw-r--r-- | src/input_common/drivers/touch_screen.cpp | 47 | ||||
-rw-r--r-- | src/input_common/drivers/touch_screen.h | 50 |
3 files changed, 99 insertions, 0 deletions
diff --git a/src/input_common/CMakeLists.txt b/src/input_common/CMakeLists.txt index 34b41ce01..71091767d 100644 --- a/src/input_common/CMakeLists.txt +++ b/src/input_common/CMakeLists.txt @@ -3,6 +3,8 @@ add_library(input_common STATIC drivers/keyboard.h drivers/mouse.cpp drivers/mouse.h + drivers/touch_screen.cpp + drivers/touch_screen.h helpers/stick_from_buttons.cpp helpers/stick_from_buttons.h helpers/touch_from_buttons.cpp diff --git a/src/input_common/drivers/touch_screen.cpp b/src/input_common/drivers/touch_screen.cpp new file mode 100644 index 000000000..e13835e9f --- /dev/null +++ b/src/input_common/drivers/touch_screen.cpp @@ -0,0 +1,47 @@ +// Copyright 2021 yuzu Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included + +#include "common/param_package.h" +#include "input_common/drivers/touch_screen.h" + +namespace InputCommon { + +TouchScreen::TouchScreen(const std::string input_engine_) : InputEngine(input_engine_) { + PreSetController(identifier); +} + +void TouchScreen::TouchMoved(float x, float y, std::size_t finger) { + if (finger >= 16) { + return; + } + TouchPressed(x, y, finger); +} + +void TouchScreen::TouchPressed(float x, float y, std::size_t finger) { + if (finger >= 16) { + return; + } + SetButton(identifier, static_cast<int>(finger), true); + SetAxis(identifier, static_cast<int>(finger * 2), x); + SetAxis(identifier, static_cast<int>(finger * 2 + 1), y); +} + +void TouchScreen::TouchReleased(std::size_t finger) { + if (finger >= 16) { + return; + } + SetButton(identifier, static_cast<int>(finger), false); + SetAxis(identifier, static_cast<int>(finger * 2), 0.0f); + SetAxis(identifier, static_cast<int>(finger * 2 + 1), 0.0f); +} + +void TouchScreen::ReleaseAllTouch() { + for (int index = 0; index < 16; ++index) { + SetButton(identifier, index, false); + SetAxis(identifier, index * 2, 0.0f); + SetAxis(identifier, index * 2 + 1, 0.0f); + } +} + +} // namespace InputCommon diff --git a/src/input_common/drivers/touch_screen.h b/src/input_common/drivers/touch_screen.h new file mode 100644 index 000000000..5fbb2f47f --- /dev/null +++ b/src/input_common/drivers/touch_screen.h @@ -0,0 +1,50 @@ +// Copyright 2021 yuzu Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included + +#pragma once + +#include "input_common/input_engine.h" + +namespace InputCommon { + +/** + * A button device factory representing a keyboard. It receives keyboard events and forward them + * to all button devices it created. + */ +class TouchScreen final : public InputCommon::InputEngine { +public: + explicit TouchScreen(const std::string input_engine_); + + /** + * Signals that mouse has moved. + * @param x the x-coordinate of the cursor + * @param y the y-coordinate of the cursor + * @param center_x the x-coordinate of the middle of the screen + * @param center_y the y-coordinate of the middle of the screen + */ + void TouchMoved(float x, float y, std::size_t finger); + + /** + * Sets the status of all buttons bound with the key to pressed + * @param key_code the code of the key to press + */ + void TouchPressed(float x, float y, std::size_t finger); + + /** + * Sets the status of all buttons bound with the key to released + * @param key_code the code of the key to release + */ + void TouchReleased(std::size_t finger); + + void ReleaseAllTouch(); + +private: + const PadIdentifier identifier = { + .guid = Common::UUID{""}, + .port = 0, + .pad = 0, + }; +}; + +} // namespace InputCommon |