MeshLib C++ Docs
Loading...
Searching...
No Matches
MRMouseController.h
Go to the documentation of this file.
1#pragma once
2#include "MRViewerFwd.h"
4#include "MRMesh/MRBitSet.h"
5#include "MRMesh/MRphmap.h"
6#include "MRMouse.h"
7#include "MRAsyncTimer.h"
8#include "MRMesh/MRVector2.h"
9#include "MRMesh/MRVector3.h"
10#include <optional>
11
12namespace MR
13{
16
23class MRVIEWER_CLASS MouseController
24{
25public:
28 {
29 MouseButton btn{ MouseButton::Left };
30 int mod{ 0 };
31 };
32
34 MRVIEWER_API void connect();
35
39 MRVIEWER_API void setMouseControl( const MouseControlKey& key, MouseMode mode );
40
42 const Vector2i& getDownMousePos() const { return downMousePos_; }
44 const Vector2i& getMousePos() const { return currentMousePos_; }
46 MRVIEWER_API bool isPressed( MouseButton button ) const;
48 MRVIEWER_API bool isPressedAny() const;
49
50 bool isCursorInside() const { return isCursorInside_; }
51
53 bool isDropOldEventOnNewActive() const { return dropOldEventsOnNew_; }
54 void dropOldEventsOnNew( bool on ) { dropOldEventsOnNew_ = on; };
55
57 MRVIEWER_API std::optional<MouseControlKey> findControlByMode( MouseMode mode ) const;
59 MRVIEWER_API static std::string getControlString( const MouseControlKey& key );
60
62 MRVIEWER_API static int mouseAndModToKey( const MouseControlKey& key );
64 MRVIEWER_API static MouseControlKey keyToMouseAndMod( int key );
65
67 void setTrasformModifierCb( std::function<void( AffineXf3f& )> cb ) { transformModifierCb_ = cb; }
68
70 void setFOVModifierCb( std::function<void( float& )> cb ) { fovModifierCb_ = cb; }
71
75
76private:
77 bool preMouseDown_( MouseButton button, int modifier );
78 bool mouseDown_( MouseButton button, int modifier );
79 bool preMouseUp_( MouseButton button, int modifier );
80 bool preDragDrop_( const std::vector<std::filesystem::path>& paths );
81 bool preMouseMove_( int x, int y );
82 bool mouseScroll_( float delta );
83
84 bool isCursorInside_{ false };
85 void cursorEntrance_( bool entered );
86
87 bool dropOldEventsOnNew_{ false };
88 void resetAllIfNeeded_();
89
90 Vector3f downTranslation_;
92 Vector2i downMousePos_;
93 Vector2i prevMousePos_;
94 Vector2i currentMousePos_;
95
96 BitSet downState_;
97 MouseMode currentMode_{ MouseMode::None };
98
100 MouseButton clickButton_{ MouseButton::NoButton };
101 int clickModifiers_{};
102 Time clickTime_{};
103 MouseButton clickPendingDown_{ MouseButton::NoButton };
104 MouseButton dragButton_{ MouseButton::NoButton };
105 bool dragActive_{};
106
107 using MouseModeMap = HashMap<int, MouseMode>;
108 using MouseModeBackMap = HashMap<MouseMode, int>;
109
110 MouseModeMap map_;
111 MouseModeBackMap backMap_;
112
113 std::function<void( AffineXf3f& )> transformModifierCb_;
114 std::function<void( float& )> fovModifierCb_;
115};
116
117}
Definition MRMouseController.h:24
MouseMode
Standard mouse functions for camera control.
Definition MRMouse.h:22
MouseButton
Definition MRMouse.h:12
std::chrono::time_point< std::chrono::system_clock > Time
Definition MRAsyncTimer.h:20
MRVIEWER_API std::optional< MouseControlKey > findControlByMode(MouseMode mode) const
returns nullopt if no control is present for given mode, otherwise returns associated control
MRVIEWER_API bool isPressed(MouseButton button) const
returns state of mouse button
static MRVIEWER_API int mouseAndModToKey(const MouseControlKey &key)
cast mouse button and modifier to simple int key
bool isCursorInside() const
Definition MRMouseController.h:50
MRVIEWER_API void setMouseControl(const MouseControlKey &key, MouseMode mode)
MRVIEWER_API bool isPressedAny() const
returns true if any mouse btn is down
MRVIEWER_API void connect()
called in Viewer init, connects to Viewer mouse signals
const Vector2i & getDownMousePos() const
returns previous mouse down (if several mouse buttons are down returns position of first one)
Definition MRMouseController.h:42
static MRVIEWER_API MouseControlKey keyToMouseAndMod(int key)
cast simple int key to mouse button and modifier
bool isDropOldEventOnNewActive() const
dropOldEventsOnNew flag - drop active mouse down state (calling mouseUp) if new mouse event happens
Definition MRMouseController.h:53
void setTrasformModifierCb(std::function< void(AffineXf3f &)> cb)
set callback to modify view transform before it is applied to viewport
Definition MRMouseController.h:67
void dropOldEventsOnNew(bool on)
Definition MRMouseController.h:54
void setFOVModifierCb(std::function< void(float &)> cb)
set callback to modify new field of view before it is applied to viewport
Definition MRMouseController.h:70
const Vector2i & getMousePos() const
returns current mouse position
Definition MRMouseController.h:44
MR_ADD_CTOR_DELETE_MOVE(MouseController)
static MRVIEWER_API std::string getControlString(const MouseControlKey &key)
make string from mouse button and modifier
only for bindings generation
Definition MRCameraOrientationPlugin.h:8
Definition MRMouseController.h:28