// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #pragma once #include #include "input_common/input_engine.h" namespace InputCommon { /** * A touch device factory representing a touch screen. It receives touch events and forward them * to all touch devices it created. */ class TouchScreen final : public InputEngine { public: explicit TouchScreen(std::string input_engine_); /** * Signals that touch has moved and marks this touch point as active * @param x new horizontal position * @param y new vertical position * @param finger_id of the touch point to be updated */ void TouchMoved(float x, float y, std::size_t finger_id); /** * Signals and creates a new touch point with this finger id * @param x starting horizontal position * @param y starting vertical position * @param finger_id to be assigned to the new touch point */ void TouchPressed(float x, float y, std::size_t finger_id); /** * Signals and resets the touch point related to the this finger id * @param finger_id to be released */ void TouchReleased(std::size_t finger_id); /// Resets the active flag for each touch point void ClearActiveFlag(); /// Releases all touch that haven't been marked as active void ReleaseInactiveTouch(); /// Resets all inputs to their initial value void ReleaseAllTouch(); private: static constexpr std::size_t MAX_FINGER_COUNT = 16; struct TouchStatus { std::size_t finger_id{}; bool is_enabled{}; bool is_active{}; }; std::optional GetIndexFromFingerId(std::size_t finger_id) const; std::optional GetNextFreeIndex() const; std::array fingers{}; }; } // namespace InputCommon