Zen 0.3.0
Loading...
Searching...
No Matches
ZEN_MouseCodes.h
1#pragma once
2
3#include <zen/zen_pch.h>
4
5namespace Zen {
6 enum class MouseButton : uint8_t { None = 0, Left = 1, Middle = 2, Right = 3, X1 = 4, X2 = 5 };
7 enum class MouseButtonState : uint32_t {
8 None = 0,
9 Left = 1 << 0,
10 Middle = 1 << 1,
11 Right = 1 << 2,
12 X1 = 1 << 3,
13 X2 = 1 << 4
14 };
15
16 constexpr MouseButtonState operator|(MouseButtonState a, MouseButtonState b) {
17 return static_cast<MouseButtonState>(static_cast<uint32_t>(a) | static_cast<uint32_t>(b));
18 }
19
20 constexpr MouseButtonState operator&(MouseButtonState a, MouseButtonState b) {
21 return static_cast<MouseButtonState>(static_cast<uint32_t>(a) & static_cast<uint32_t>(b));
22 }
23
24 constexpr MouseButtonState &operator|=(MouseButtonState &a, MouseButtonState b) {
25 a = a | b;
26 return a;
27 }
28
29 constexpr MouseButtonState mapSDLMouseStates(SDL_MouseButtonFlags currentState) {
30 MouseButtonState states = MouseButtonState::None;
31
32 if (currentState & SDL_BUTTON_LMASK)
33 states |= MouseButtonState::Left;
34 if (currentState & SDL_BUTTON_MMASK)
35 states |= MouseButtonState::Middle;
36 if (currentState & SDL_BUTTON_RMASK)
37 states |= MouseButtonState::Right;
38 if (currentState & SDL_BUTTON_X1MASK)
39 states |= MouseButtonState::X1;
40 if (currentState & SDL_BUTTON_X2MASK)
41 states |= MouseButtonState::X2;
42
43 return states;
44 }
45} // namespace Zen