-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMouse.cpp
More file actions
121 lines (95 loc) · 2.36 KB
/
Mouse.cpp
File metadata and controls
121 lines (95 loc) · 2.36 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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#include "Mouse.h"
#include "Windows.h"
//Public Methods
std::pair<int, int> Mouse::GetPos() const noexcept {
return { x,y };
}
int Mouse::GetPosX() const noexcept {
return x;
}
int Mouse::GetPosY() const noexcept {
return y;
}
bool Mouse::LeftIsPressed() const noexcept {
return leftIsPressed;
}
bool Mouse::RightIsPressed() const noexcept {
return rightIsPressed;
}
bool Mouse::IsInWindow() const noexcept {
return isInWindow;
}
Mouse::Event Mouse::Read() noexcept {
if (buffer.size() > 0u) {
Mouse::Event e = buffer.front();
buffer.pop();
return e;
}
else {
return Mouse::Event();
}
}
void Mouse::Flush() noexcept {
buffer = std::queue<Event>();
}
//Private Methods
void Mouse::OnMouseMove(int newx, int newy) noexcept {
x = newx;
y = newy;
buffer.push(Mouse::Event(Mouse::Event::Type::Move, *this));
TrimBuffer();
}
void Mouse::OnMouseLeave() noexcept {
isInWindow = false;
buffer.push(Mouse::Event(Mouse::Event::Type::Leave, *this));
TrimBuffer();
}
void Mouse::OnMouseEnter() noexcept {
isInWindow = true;
buffer.push(Mouse::Event(Mouse::Event::Type::Enter, *this));
TrimBuffer();
}
void Mouse::OnLeftPressed(int x, int y) noexcept {
leftIsPressed = true;
buffer.push(Mouse::Event(Mouse::Event::Type::LPress, *this));
TrimBuffer();
}
void Mouse::OnLeftReleased(int x, int y) noexcept {
leftIsPressed = false;
buffer.push(Mouse::Event(Mouse::Event::Type::LRelease, *this));
TrimBuffer();
}
void Mouse::OnRightPressed(int x, int y) noexcept {
rightIsPressed = true;
buffer.push(Mouse::Event(Mouse::Event::Type::RPress, *this));
TrimBuffer();
}
void Mouse::OnRightReleased(int x, int y) noexcept {
rightIsPressed = false;
buffer.push(Mouse::Event(Mouse::Event::Type::LRelease, *this));
TrimBuffer();
}
void Mouse::OnWheelUp(int x, int y) noexcept {
buffer.push(Mouse::Event(Mouse::Event::Type::WheelUp, *this));
TrimBuffer();
}
void Mouse::OnWheelDown(int x, int y) noexcept {
buffer.push(Mouse::Event(Mouse::Event::Type::WheelDown, *this));
TrimBuffer();
}
void Mouse::TrimBuffer() noexcept {
while (buffer.size() > bufferSize) {
buffer.pop();
}
}
void Mouse::OnWheelDelta(int x, int y, int delta) noexcept {
wheelDeltaCarry += delta;
while (wheelDeltaCarry >= WHEEL_DELTA) {
wheelDeltaCarry -= WHEEL_DELTA;
OnWheelUp(x, y);
}
while (wheelDeltaCarry <= -WHEEL_DELTA) {
wheelDeltaCarry += WHEEL_DELTA;
OnWheelDown(x, y);
}
}