-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathGestureAdapter.cpp
More file actions
71 lines (61 loc) · 2.29 KB
/
GestureAdapter.cpp
File metadata and controls
71 lines (61 loc) · 2.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <functional>
#include "Core/util/WeakPointer.h"
#include "GestureAdapter.h"
GestureAdapter::GestureAdapter() {
this->mouseEventAdapter = std::make_shared<PipedEventAdapter<MouseAdapter::MouseEvent>>(std::bind(&GestureAdapter::onMouseEvent, this, std::placeholders::_1));
}
void GestureAdapter::setMouseAdapter(MouseAdapter& mouseAdapter) {
mouseAdapter.setPipedEventAdapter(this->mouseEventAdapter);
}
bool GestureAdapter::setPipedEventAdapter(Core::WeakPointer<PipedEventAdapter<GestureEvent>> adapter) {
if(!this->pipedEventAdapter) {
this->pipedEventAdapter = adapter;
return true;
}
else {
return false;
}
}
void GestureAdapter::onMouseEvent(MouseAdapter::MouseEvent event) {
unsigned int pointerIndex = event.buttons;
if (pointerIndex >= MAX_POINTERS) return;
PointerState& pointerState = pointerStates[pointerIndex];
switch(event.getType()){
case MouseAdapter::MouseEventType::ButtonPress:
pointerState.active = true;
pointerState.startPosition = event.position;
pointerState.position = event.position;
break;
case MouseAdapter::MouseEventType::ButtonRelease:
pointerState.active = false;
pointerState.position = event.position;
break;
case MouseAdapter::MouseEventType::MouseMove:
{
GestureEvent gestureEvent;
gestureEvent.start = pointerState.position;
gestureEvent.end = event.position;
pointerState.position = event.position;
if (pointerState.active) {
gestureEvent.setType(GestureEventType::Drag);
gestureEvent.pointer = (GesturePointer)pointerIndex;
}
else {
gestureEvent.setType(GestureEventType::Move);
}
if (this->pipedEventAdapter) {
this->pipedEventAdapter->accept(gestureEvent);
}
}
break;
case MouseAdapter::MouseEventType::WheelScroll:
{
GestureEvent gestureEvent(GestureEventType::Scroll);
gestureEvent.scrollDistance = event.scrollDelta;
if (this->pipedEventAdapter) {
this->pipedEventAdapter->accept(gestureEvent);
}
}
break;
}
}