kodi
DriverPrimitive.h
1 /*
2  * Copyright (C) 2014-2024 Team Kodi
3  * This file is part of Kodi - https://kodi.tv
4  *
5  * SPDX-License-Identifier: GPL-2.0-or-later
6  * See LICENSES/README.md for more information.
7  */
8 
9 #pragma once
10 
11 #include "JoystickTypes.h"
12 #include "input/keyboard/KeyboardTypes.h"
13 #include "input/mouse/MouseTypes.h"
14 
15 #include <stdint.h>
16 
17 namespace KODI
18 {
19 namespace JOYSTICK
20 {
71 {
72 public:
76  CDriverPrimitive(void);
77 
81  CDriverPrimitive(PRIMITIVE_TYPE type, unsigned int index);
82 
87  CDriverPrimitive(unsigned int hatIndex, HAT_DIRECTION direction);
88 
93  CDriverPrimitive(unsigned int axisIndex,
94  int center,
95  SEMIAXIS_DIRECTION direction,
96  unsigned int range);
97 
102 
107 
111  CDriverPrimitive(RELATIVE_POINTER_DIRECTION direction);
112 
113  bool operator==(const CDriverPrimitive& rhs) const;
114  bool operator<(const CDriverPrimitive& rhs) const;
115 
116  bool operator!=(const CDriverPrimitive& rhs) const { return !operator==(rhs); }
117  bool operator>(const CDriverPrimitive& rhs) const { return !(operator<(rhs) || operator==(rhs)); }
118  bool operator<=(const CDriverPrimitive& rhs) const { return operator<(rhs) || operator==(rhs); }
119  bool operator>=(const CDriverPrimitive& rhs) const { return !operator<(rhs); }
120 
124  PRIMITIVE_TYPE Type(void) const { return m_type; }
125 
135  unsigned int Index(void) const { return m_driverIndex; }
136 
140  HAT_DIRECTION HatDirection(void) const { return m_hatDirection; }
141 
145  int Center() const { return m_center; }
146 
150  SEMIAXIS_DIRECTION SemiAxisDirection(void) const { return m_semiAxisDirection; }
151 
155  unsigned int Range() const { return m_range; }
156 
160  KEYBOARD::XBMCKey Keycode() const { return m_keycode; }
161 
165  MOUSE::BUTTON_ID MouseButton() const { return static_cast<MOUSE::BUTTON_ID>(m_driverIndex); }
166 
170  RELATIVE_POINTER_DIRECTION PointerDirection() const { return m_pointerDirection; }
171 
181  bool IsValid(void) const;
182 
183 private:
184  PRIMITIVE_TYPE m_type = PRIMITIVE_TYPE::UNKNOWN;
185  unsigned int m_driverIndex = 0;
186  HAT_DIRECTION m_hatDirection = HAT_DIRECTION::NONE;
187  int m_center = 0;
188  SEMIAXIS_DIRECTION m_semiAxisDirection = SEMIAXIS_DIRECTION::ZERO;
189  unsigned int m_range = 1;
190  KEYBOARD::XBMCKey m_keycode = KEYBOARD::XBMCKey::XBMCK_UNKNOWN;
191  RELATIVE_POINTER_DIRECTION m_pointerDirection = RELATIVE_POINTER_DIRECTION::NONE;
192 };
193 } // namespace JOYSTICK
194 } // namespace KODI
CDriverPrimitive(void)
Construct an invalid driver primitive.
SEMIAXIS_DIRECTION SemiAxisDirection(void) const
The semiaxis direction (valid for semiaxes)
Definition: DriverPrimitive.h:150
BUTTON_ID
Buttons on a mouse.
Definition: MouseTypes.h:26
RELATIVE_POINTER_DIRECTION PointerDirection() const
The relative pointer direction (valid for relative pointers)
Definition: DriverPrimitive.h:170
XBMCKey XBMCKey
Symbol of a hardware-independent key.
Definition: KeyboardTypes.h:26
int Center() const
The location of the zero point of the semiaxis.
Definition: DriverPrimitive.h:145
MOUSE::BUTTON_ID MouseButton() const
The mouse button ID (valid for mouse buttons)
Definition: DriverPrimitive.h:165
Definition: AudioDecoder.h:18
KEYBOARD::XBMCKey Keycode() const
The keyboard symbol (valid for keys)
Definition: DriverPrimitive.h:160
HAT_DIRECTION HatDirection(void) const
The direction arrow (valid for hat directions)
Definition: DriverPrimitive.h:140
unsigned int Range() const
The distance between the center and the farthest valid value (valid for semiaxes) ...
Definition: DriverPrimitive.h:155
Basic driver element associated with input events.
Definition: DriverPrimitive.h:70
bool IsValid(void) const
Test if an driver primitive is valid.
Definition: DriverPrimitive.cpp:143
PRIMITIVE_TYPE Type(void) const
The type of driver primitive.
Definition: DriverPrimitive.h:124
unsigned int Index(void) const
The index used by the joystick driver.
Definition: DriverPrimitive.h:135