/* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ #pragma once #include "GesturePan.hpp" #include "GesturePinch.hpp" #include "GestureTap.hpp" #include #include #include namespace OpenVulkano::Input { class GestureProcessor final { friend class InputDeviceTouch; GesturePan m_gesturePan; GesturePan m_gesturePanTwoFingers; GesturePinch m_gesturePinch; GestureTap m_gestureTap; GestureTap m_gestureTapTwoFingers; // TODO std::vector m_gestures; public: GestureProcessor(); ~GestureProcessor(); void Init(); void Close(); void AddGesture(Gesture* gesture); void RemoveGesture(Gesture* gesture); bool ResolveConflicts(Gesture* gesture); void Reset(); void TouchDown(const Touch& touch); void TouchUp(const Touch& touch); void TouchMoved(const Touch& touch); //region conflict resolution enum class ConflictResult { NeitherGesture, ExistingGesture, NewGesture, BothGestures }; using ConflictResolutionDelegate = std::function; void SetConflictResolutionDelegate(const ConflictResolutionDelegate& delegate) { m_conflictResolutionDelegate = delegate; } private: ConflictResolutionDelegate m_conflictResolutionDelegate; //endregion }; }