FifeGUI 0.3.0
A C++ GUI library designed for games.
genericinput.cpp
1// SPDX-License-Identifier: LGPL-2.1-or-later OR BSD-3-Clause
2// SPDX-FileCopyrightText: 2004 - 2008 Olof Naessén and Per Larsson
3// SPDX-FileCopyrightText: 2013 - 2026 Fifengine contributors
4
5// Corresponding header include
6#include "fifechan/genericinput.hpp"
7
8// Platform config include
9#include "fifechan/platform.hpp"
10
11// Project headers (subdirs before local)
12#include "fifechan/exception.hpp"
13#include "fifechan/keyinput.hpp"
14#include "fifechan/mouseinput.hpp"
15
16namespace fcn
17{
18 GenericInput::GenericInput() = default;
19
21 {
22 KeyInput keyInput{};
23 keyInput.setKey(Key(unicode));
24 keyInput.setType(KeyInput::Type::Pressed);
25
26 mKeyInputQueue.push(keyInput);
27 }
28
30 {
31 KeyInput keyInput{};
32 keyInput.setKey(Key(unicode));
33 keyInput.setType(KeyInput::Type::Released);
34
35 mKeyInputQueue.push(keyInput);
36 }
37
38 void GenericInput::pushMouseButtonPressed(int x, int y, int button)
39 {
40 MouseInput mouseInput{};
41 mouseInput.setX(x);
42 mouseInput.setY(y);
43 mouseInput.setButton(static_cast<MouseInput::Button>(button));
44 mouseInput.setType(MouseInput::Type::Pressed);
45
46 mMouseInputQueue.push(mouseInput);
47 }
48
49 void GenericInput::pushMouseButtonReleased(int x, int y, int button)
50 {
51 MouseInput mouseInput{};
52 mouseInput.setX(x);
53 mouseInput.setY(y);
54 mouseInput.setButton(static_cast<MouseInput::Button>(button));
55 mouseInput.setType(MouseInput::Type::Released);
56
57 mMouseInputQueue.push(mouseInput);
58 }
59
61 {
62 MouseInput mouseInput{};
63 mouseInput.setX(x);
64 mouseInput.setY(y);
65 mouseInput.setType(MouseInput::Type::WheelMovedUp);
66
67 mMouseInputQueue.push(mouseInput);
68 }
69
71 {
72 MouseInput mouseInput{};
73 mouseInput.setX(x);
74 mouseInput.setY(y);
75 mouseInput.setType(MouseInput::Type::WheelMovedDown);
76
77 mMouseInputQueue.push(mouseInput);
78 }
79
81 {
82 MouseInput mouseInput{};
83 mouseInput.setX(x);
84 mouseInput.setY(y);
85 mouseInput.setType(MouseInput::Type::WheelMovedRight);
86
87 mMouseInputQueue.push(mouseInput);
88 }
89
91 {
92 MouseInput mouseInput{};
93 mouseInput.setX(x);
94 mouseInput.setY(y);
95 mouseInput.setType(MouseInput::Type::WheelMovedLeft);
96
97 mMouseInputQueue.push(mouseInput);
98 }
99
101 {
102 MouseInput mouseInput{};
103 mouseInput.setX(x);
104 mouseInput.setY(y);
105 mouseInput.setType(MouseInput::Type::Moved);
106
107 mMouseInputQueue.push(mouseInput);
108 }
109
111 {
112 return mKeyInputQueue.empty();
113 }
114
116 {
117 KeyInput keyInput;
118
119 if (mKeyInputQueue.empty()) {
120 throwException("The queue is empty.");
121 }
122
123 keyInput = mKeyInputQueue.front();
124 mKeyInputQueue.pop();
125
126 return keyInput;
127 }
128
130 {
131 return mMouseInputQueue.empty();
132 }
133
135 {
136 MouseInput mouseInput{};
137
138 if (mMouseInputQueue.empty()) {
139 throwException("The queue is empty.");
140 }
141
142 mouseInput = mMouseInputQueue.front();
143 mMouseInputQueue.pop();
144
145 return mouseInput;
146 }
147
149 {
150 // Does nothing.
151 }
152} // namespace fcn
void pushMouseWheelMovedLeft(int x, int y)
Pushes a mouse wheel moved left event.
void pushMouseWheelMovedRight(int x, int y)
Pushes a mouse wheel moved right event.
void pushMouseWheelMovedUp(int x, int y)
Pushes a mouse wheel moved up event.
void pushKeyPressed(int unicode)
Pushes a key pressed event.
void pushMouseButtonPressed(int x, int y, int button)
Pushes a mouse button pressed event.
void _pollInput() override
Polls all existing input.
void pushMouseWheelMovedDown(int x, int y)
Pushes a mouse wheel moved down event.
std::queue< KeyInput > mKeyInputQueue
Holds the key input queue.
bool isKeyQueueEmpty() override
Checks if the key queue is empty, or not.
MouseInput dequeueMouseInput() override
Dequeues the mouse input queue.
void pushMouseMoved(int x, int y)
Pushes a mouse moved event.
std::queue< MouseInput > mMouseInputQueue
Holds the mouse input queue.
void pushMouseButtonReleased(int x, int y, int button)
Pushes a mouse button released event.
bool isMouseQueueEmpty() override
Checks if the mouse queue is empyt, or not.
void pushKeyReleased(int unicode)
Pushes a key released event.
KeyInput dequeueKeyInput() override
Dequeues the key input queue.
Internal class representing raw keyboard input data.
Definition keyinput.hpp:32
void setType(Type type)
Sets the type of the key input.
Definition keyinput.cpp:22
void setKey(Key const &key)
Sets the key of the key input.
Definition keyinput.cpp:34
Internal class representing raw mouse input data.
void setX(int x)
Sets the x coordinate of the mouse input.
void setY(int y)
Sets the y coordinate of the mouse input.
Button
Mouse button.
void setType(Type type)
Sets the type of the mouse input.
void setButton(Button button)
Sets the button pressed.
Used replacement tokens by configure_file():
void throwException(std::string const &message, std::source_location location=std::source_location::current())
Throw an Exception capturing the current source location.