#pragma once #include #include class DraggingState { public: DraggingState(const std::function& keyUpdateCallback); ~DraggingState() = default; void Enable(); void Disable(); void UpdateDraggingState() noexcept; bool IsDragging() const noexcept; bool IsSelectManyZonesState() const noexcept; void SetShiftState(bool value) noexcept; private: void OnSecondaryMouseDown(); void OnMiddleMouseDown(); std::atomic m_secondaryMouseState; std::atomic m_middleMouseState; MouseButtonsHook m_mouseHook; KeyState m_ctrlKeyState; bool m_shift{}; std::function m_keyUpdateCallback; bool m_dragging{}; // True if we should be showing zone hints while dragging };