MeshLib C++ Docs
Loading...
Searching...
No Matches
MRTouchesController.h
Go to the documentation of this file.
1#pragma once
3#include "MRViewerFwd.h"
5#include "MRMesh/MRVector2.h"
7#include "MRMouse.h"
8#include <vector>
9#include <optional>
10#include <functional>
11
12namespace MR
13{
16
19class MRVIEWER_CLASS TouchesController : public MultiListener<TouchStartListener,TouchMoveListener,TouchEndListener>
20{
21public:
23
25 void setTrasformModifierCb( std::function<void( AffineXf3f& )> cb ) { transformModifierCb_ = cb; }
26
28 enum class ModeBit : unsigned char
29 {
30 Translate = 0b001,
31 Rotate = 0b010,
32 Zoom = 0b100,
33 All = Translate | Rotate | Zoom,
34 Any = All
35 };
37
38
39 ModeBit getModeMask() const { return touchModeMask_; }
40 void setModeMask( ModeBit mask ){ touchModeMask_ = mask; }
41private:
42 virtual bool onTouchStart_( int id, int x, int y ) override;
43 virtual bool onTouchMove_( int id, int x, int y ) override;
44 virtual bool onTouchEnd_( int id, int x, int y ) override;
45
46 struct Info
47 {
48 int id{-1};
49 Vector2f position;
50 };
51
52 class MultiInfo
53 {
54 public:
55 bool update( Info info, bool remove = false );
56 enum class Finger
57 {
58 First,
59 Second
60 };
61 std::optional<Vector2f> getPosition( Finger fing ) const;
62 std::optional<Vector2f> getPosition( int id ) const;
63 std::optional<Finger> getFingerById( int id ) const;
64 std::optional<int> getIdByFinger( Finger fing ) const;
65 int getNumPressed() const;
66 private:
67 std::array<Info,2> info_;
68 };
69
70 MultiInfo multiInfo_;
71 MultiInfo multiPrevInfo_;
72 bool mouseMode_{ false };
73 ModeBit touchModeMask_{ ModeBit::All };
74
75 std::function<void( AffineXf3f& )> transformModifierCb_;
76};
77
78}
#define MR_MAKE_FLAG_OPERATORS_IN_CLASS(T)
Generates operators for a enum (at class scope).
Definition MRFlagOperators.h:9
Definition MRTouchesController.h:20
std::optional< Finger > getFingerById(int id) const
std::optional< Vector2f > getPosition(Finger fing) const
bool update(Info info, bool remove=false)
Vector2f position
Definition MRTouchesController.h:49
MR_ADD_CTOR_DELETE_MOVE(TouchesController)
void setModeMask(ModeBit mask)
Definition MRTouchesController.h:40
std::optional< int > getIdByFinger(Finger fing) const
Finger
Definition MRTouchesController.h:57
void setTrasformModifierCb(std::function< void(AffineXf3f &)> cb)
set callback to modify view transform before it is applied to viewport
Definition MRTouchesController.h:25
ModeBit
bit meaning for mode mask
Definition MRTouchesController.h:29
std::optional< Vector2f > getPosition(int id) const
only for bindings generation
Definition MRCameraOrientationPlugin.h:8
Definition MRViewerEventsListener.h:32