Cogs.Core
Mouse.cpp
1#include "Mouse.h"
2
3#include <cstring>
4
5void Cogs::Mouse::update() {
6 //Reset current state
7 state.wheel = 0;
8
9 // Process events
10 for (const Event& event : eventQueue) {
11 switch (event.type)
12 {
13 case Event::Type::Press: {
14 Event::ButtonData data = std::get<Event::ButtonData>(event.data);
15 state.buttonDown[data.button] = true;
16 break;
17 }
18 case Event::Type::Release: {
19 Event::ButtonData data = std::get<Event::ButtonData>(event.data);
20 state.buttonDown[data.button] = false;
21 break;
22 }
23 case Event::Type::Move: {
24 Event::MoveData data = std::get<Event::MoveData>(event.data);
25 state.position = data.newPosition;
26 break;
27 }
28 case Event::Type::Wheel: {
29 Event::WheelData data = std::get<Event::WheelData>(event.data);
30 state.wheel += data.offset;
31 break;
32 }
33 case Event::Type::Reset: {
34 std::memset(state.buttonDown, 0, sizeof(state.buttonDown));
35 state.wheel = 0;
36 break;
37 }
38 default:
39 break;
40 }
41 }
42
43 // Reset events
44 events = std::move(eventQueue);
45 eventQueue = {};
46}
47
48void Cogs::Mouse::submitButtonDown(MouseButton button, double timestamp_ms) {
49 eventQueue.push_back({Event::Type::Press, timestamp_ms, state.position, Event::ButtonData{button}});
50}
51
52void Cogs::Mouse::submitButtonUp(MouseButton button, double timestamp_ms) {
53 eventQueue.push_back({Event::Type::Release, timestamp_ms, state.position, Event::ButtonData{button}});
54}
55
56void Cogs::Mouse::submitMove(const glm::ivec2& position, double timestamp_ms) {
57 eventQueue.push_back({Event::Type::Move, timestamp_ms, state.position, Event::MoveData{position}});
58}
59
60void Cogs::Mouse::submitWheel(int offset, double timestamp_ms) {
61 eventQueue.push_back({Event::Type::Wheel, timestamp_ms, state.position, Event::WheelData{offset}});
62}
63
64void Cogs::Mouse::submitReset(double timestamp_ms) {
65 eventQueue.push_back({Event::Type::Reset, timestamp_ms, state.position, {}});
66}