SDL3pp
A slim C++ wrapper for SDL3
Loading...
Searching...
No Matches
SDL3pp_mouse.h
1#ifndef SDL3PP_MOUSE_H_
2#define SDL3PP_MOUSE_H_
3
4#include <SDL3/SDL_mouse.h>
5#include "SDL3pp_stdinc.h"
6#include "SDL3pp_video.h"
7
8namespace SDL {
9
47// Forward decl
48struct Cursor;
49
51using CursorRaw = SDL_Cursor*;
52
53// Forward decl
54struct CursorRef;
55
58{
60
63 : value(value)
64 {
65 }
66
68 constexpr CursorParam(std::nullptr_t _ = nullptr)
69 : value(nullptr)
70 {
71 }
72
74 constexpr explicit operator bool() const { return !!value; }
75
77 constexpr auto operator<=>(const CursorParam& other) const = default;
78
80 constexpr operator CursorRaw() const { return value; }
81};
82
88using SystemCursor = SDL_SystemCursor;
89
91 SDL_SYSTEM_CURSOR_DEFAULT;
92
94 SDL_SYSTEM_CURSOR_TEXT;
95
97constexpr SystemCursor SYSTEM_CURSOR_WAIT = SDL_SYSTEM_CURSOR_WAIT;
98
100 SDL_SYSTEM_CURSOR_CROSSHAIR;
101
103constexpr SystemCursor SYSTEM_CURSOR_PROGRESS = SDL_SYSTEM_CURSOR_PROGRESS;
104
106 SDL_SYSTEM_CURSOR_NWSE_RESIZE;
108
110 SDL_SYSTEM_CURSOR_NESW_RESIZE;
112
114 SDL_SYSTEM_CURSOR_EW_RESIZE;
115
117 SDL_SYSTEM_CURSOR_NS_RESIZE;
118
120constexpr SystemCursor SYSTEM_CURSOR_MOVE = SDL_SYSTEM_CURSOR_MOVE;
121
124 SDL_SYSTEM_CURSOR_NOT_ALLOWED;
125
127constexpr SystemCursor SYSTEM_CURSOR_POINTER = SDL_SYSTEM_CURSOR_POINTER;
128
133constexpr SystemCursor SYSTEM_CURSOR_NW_RESIZE = SDL_SYSTEM_CURSOR_NW_RESIZE;
134
136 SDL_SYSTEM_CURSOR_N_RESIZE;
137
139 SDL_SYSTEM_CURSOR_NE_RESIZE;
141
143 SDL_SYSTEM_CURSOR_E_RESIZE;
144
146 SDL_SYSTEM_CURSOR_SE_RESIZE;
148
150 SDL_SYSTEM_CURSOR_S_RESIZE;
151
153 SDL_SYSTEM_CURSOR_SW_RESIZE;
155
157 SDL_SYSTEM_CURSOR_W_RESIZE;
158
159constexpr SystemCursor SYSTEM_CURSOR_COUNT = SDL_SYSTEM_CURSOR_COUNT;
160
171using MouseID = SDL_MouseID;
172
183{
184 CursorRaw m_resource = nullptr;
185
186public:
188 constexpr Cursor() = default;
189
197 constexpr explicit Cursor(const CursorRaw resource)
198 : m_resource(resource)
199 {
200 }
201
203 constexpr Cursor(const Cursor& other) = delete;
204
206 constexpr Cursor(Cursor&& other)
207 : Cursor(other.release())
208 {
209 }
210
211 constexpr Cursor(const CursorRef& other) = delete;
212
213 constexpr Cursor(CursorRef&& other) = delete;
214
256 Cursor(const Uint8* data,
257 const Uint8* mask,
258 const PointRaw& size,
259 const PointRaw& hot)
260 : m_resource(
261 CheckError(SDL_CreateCursor(data, mask, size.x, size.y, hot.x, hot.y)))
262 {
263 }
264
292 Cursor(SurfaceParam surface, const PointRaw& hot)
293 : m_resource(CheckError(SDL_CreateColorCursor(surface, hot.x, hot.y)))
294 {
295 }
296
311 : m_resource(CheckError(SDL_CreateSystemCursor(id)))
312 {
313 }
314
316 ~Cursor() { SDL_DestroyCursor(m_resource); }
317
320 {
321 std::swap(m_resource, other.m_resource);
322 return *this;
323 }
324
326 constexpr CursorRaw get() const { return m_resource; }
327
329 constexpr CursorRaw release()
330 {
331 auto r = m_resource;
332 m_resource = nullptr;
333 return r;
334 }
335
337 constexpr auto operator<=>(const Cursor& other) const = default;
338
340 constexpr bool operator==(std::nullptr_t _) const { return !m_resource; }
341
343 constexpr explicit operator bool() const { return !!m_resource; }
344
346 constexpr operator CursorParam() const { return {m_resource}; }
347
363 void Destroy();
364
381 void Set();
382};
383
386{
395 : Cursor(resource.value)
396 {
397 }
398
400 CursorRef(const CursorRef& other)
401 : Cursor(other.get())
402 {
403 }
404
407};
408
414using MouseWheelDirection = SDL_MouseWheelDirection;
415
417 SDL_MOUSEWHEEL_NORMAL;
418
420 SDL_MOUSEWHEEL_FLIPPED;
421
427
428constexpr MouseButton BUTTON_LEFT = SDL_BUTTON_LEFT;
429
430constexpr MouseButton BUTTON_MIDDLE = SDL_BUTTON_MIDDLE;
431
432constexpr MouseButton BUTTON_RIGHT = SDL_BUTTON_RIGHT;
433
434constexpr MouseButton BUTTON_X1 = SDL_BUTTON_X1;
435
436constexpr MouseButton BUTTON_X2 = SDL_BUTTON_X2;
437
454
455constexpr MouseButtonFlags BUTTON_LMASK = SDL_BUTTON_LMASK;
456
457constexpr MouseButtonFlags BUTTON_MMASK = SDL_BUTTON_MMASK;
458
459constexpr MouseButtonFlags BUTTON_RMASK = SDL_BUTTON_RMASK;
460
461constexpr MouseButtonFlags BUTTON_X1MASK = SDL_BUTTON_X1MASK;
462
463constexpr MouseButtonFlags BUTTON_X2MASK = SDL_BUTTON_X2MASK;
464
467{
468 return SDL_BUTTON_MASK(button);
469}
470
482inline bool HasMouse() { return SDL_HasMouse(); }
483
503{
504 int count;
505 auto data = CheckError(SDL_GetMice(&count));
506 return OwnArray<MouseID>{data, size_t(count)};
507}
508
524inline const char* GetMouseNameForID(MouseID instance_id)
525{
526 return SDL_GetMouseNameForID(instance_id);
527}
528
538inline WindowRef GetMouseFocus() { return {SDL_GetMouseFocus()}; }
539
571inline MouseButtonFlags GetMouseState(float* x, float* y)
572{
573 return SDL_GetMouseState(x, y);
574}
575
611inline MouseButtonFlags GetGlobalMouseState(float* x, float* y)
612{
613 return SDL_GetGlobalMouseState(x, y);
614}
615
649inline MouseButtonFlags GetRelativeMouseState(float* x, float* y)
650{
651 return SDL_GetRelativeMouseState(x, y);
652}
653
654inline void Window::WarpMouse(const FPointRaw& p)
655{
656 SDL_WarpMouseInWindow(m_resource, p.x, p.y);
657}
658
679inline void WarpMouse(const FPointRaw& p)
680{
681 CheckError(SDL_WarpMouseGlobal(p.x, p.y));
682}
683
708inline void Window::SetRelativeMouseMode(bool enabled)
709{
710 CheckError(SDL_SetWindowRelativeMouseMode(m_resource, enabled));
711}
712
725{
726 return SDL_GetWindowRelativeMouseMode(m_resource);
727}
728
774inline void CaptureMouse(bool enabled)
775{
776 CheckError(SDL_CaptureMouse(enabled));
777}
778
820inline Cursor CreateCursor(const Uint8* data,
821 const Uint8* mask,
822 const PointRaw& size,
823 const PointRaw& hot)
824{
825 return Cursor(data, mask, size, hot);
826}
827
856{
857 return Cursor(surface, hot);
858}
859
874
892inline void SetCursor(CursorParam cursor) { CheckError(SDL_SetCursor(cursor)); }
893
894inline void Cursor::Set() { SDL::SetCursor(m_resource); }
895
910inline CursorRef GetCursor() { return {SDL_GetCursor()}; }
911
926{
927 return {CheckError(SDL_GetDefaultCursor())};
928}
929
946inline void DestroyCursor(CursorRaw cursor) { SDL_DestroyCursor(cursor); }
947
949
962inline void ShowCursor() { CheckError(SDL_ShowCursor()); }
963
976inline void HideCursor() { CheckError(SDL_HideCursor()); }
977
991inline bool CursorVisible() { return SDL_CursorVisible(); }
992
994
995} // namespace SDL
996
997#endif /* SDL3PP_MOUSE_H_ */
The structure used to identify an SDL cursor.
Definition: SDL3pp_mouse.h:183
constexpr Cursor(Cursor &&other)
Move constructor.
Definition: SDL3pp_mouse.h:206
constexpr Cursor()=default
Default ctor.
Cursor(SystemCursor id)
Create a system cursor.
Definition: SDL3pp_mouse.h:310
Cursor(SurfaceParam surface, const PointRaw &hot)
Create a color cursor.
Definition: SDL3pp_mouse.h:292
constexpr CursorRaw get() const
Retrieves underlying CursorRaw.
Definition: SDL3pp_mouse.h:326
constexpr bool operator==(std::nullptr_t _) const
Comparison.
Definition: SDL3pp_mouse.h:340
constexpr Cursor(const CursorRaw resource)
Constructs from CursorParam.
Definition: SDL3pp_mouse.h:197
Cursor & operator=(Cursor other)
Assignment operator.
Definition: SDL3pp_mouse.h:319
constexpr CursorRaw release()
Retrieves underlying CursorRaw and clear this.
Definition: SDL3pp_mouse.h:329
constexpr Cursor(const Cursor &other)=delete
Copy constructor.
Cursor(const Uint8 *data, const Uint8 *mask, const PointRaw &size, const PointRaw &hot)
Create a cursor using the specified bitmap data and mask (in MSB format).
Definition: SDL3pp_mouse.h:256
~Cursor()
Destructor.
Definition: SDL3pp_mouse.h:316
constexpr auto operator<=>(const Cursor &other) const =default
Comparison.
Base class for SDL memory allocated array wrap.
Definition: SDL3pp_ownPtr.h:44
constexpr void CheckError(bool result)
Check and throw if returned value from SDL is an error.
Definition: SDL3pp_error.h:198
Cursor CreateCursor(const Uint8 *data, const Uint8 *mask, const PointRaw &size, const PointRaw &hot)
Create a cursor using the specified bitmap data and mask (in MSB format).
Definition: SDL3pp_mouse.h:820
constexpr SystemCursor SYSTEM_CURSOR_MOVE
Four pointed arrow pointing north, south, east, and west.
Definition: SDL3pp_mouse.h:120
bool GetRelativeMouseMode() const
Query whether relative mouse mode is enabled for a window.
Definition: SDL3pp_mouse.h:724
constexpr SystemCursor SYSTEM_CURSOR_POINTER
Pointer that indicates a link. Usually a pointing hand.
Definition: SDL3pp_mouse.h:127
constexpr MouseWheelDirection MOUSEWHEEL_NORMAL
The scroll direction is normal.
Definition: SDL3pp_mouse.h:416
SDL_SystemCursor SystemCursor
Cursor types for Cursor.Cursor().
Definition: SDL3pp_mouse.h:88
constexpr SystemCursor SYSTEM_CURSOR_SE_RESIZE
Window resize bottom-right.
Definition: SDL3pp_mouse.h:145
constexpr MouseButton BUTTON_RIGHT
Right button.
Definition: SDL3pp_mouse.h:432
constexpr SystemCursor SYSTEM_CURSOR_W_RESIZE
Window resize left. May be EW_RESIZE.
Definition: SDL3pp_mouse.h:156
constexpr MouseButton BUTTON_MIDDLE
Middle button.
Definition: SDL3pp_mouse.h:430
CursorRef GetCursor()
Get the active cursor.
Definition: SDL3pp_mouse.h:910
void Destroy()
Free a previously-created cursor.
Definition: SDL3pp_mouse.h:948
void DestroyCursor(CursorRaw cursor)
Free a previously-created cursor.
Definition: SDL3pp_mouse.h:946
constexpr SystemCursor SYSTEM_CURSOR_NESW_RESIZE
Double arrow pointing northeast and southwest.
Definition: SDL3pp_mouse.h:109
constexpr MouseWheelDirection MOUSEWHEEL_FLIPPED
The scroll direction is flipped / natural.
Definition: SDL3pp_mouse.h:419
MouseButtonFlags GetRelativeMouseState(float *x, float *y)
Query SDL's cache for the synchronous mouse button state and accumulated mouse delta since last call.
Definition: SDL3pp_mouse.h:649
constexpr MouseButtonFlags ButtonMask(MouseButton button)
Returns mask for button.
Definition: SDL3pp_mouse.h:466
void CaptureMouse(bool enabled)
Capture the mouse and to track input outside an SDL window.
Definition: SDL3pp_mouse.h:774
Cursor CreateSystemCursor(SystemCursor id)
Create a system cursor.
Definition: SDL3pp_mouse.h:873
Uint32 MouseButtonFlags
A bitmask of pressed mouse buttons, as reported by GetMouseState, etc.
Definition: SDL3pp_mouse.h:453
constexpr SystemCursor SYSTEM_CURSOR_NW_RESIZE
Window resize top-left.
Definition: SDL3pp_mouse.h:133
constexpr SystemCursor SYSTEM_CURSOR_CROSSHAIR
Crosshair.
Definition: SDL3pp_mouse.h:99
void WarpMouse(const FPointRaw &p)
Move the mouse to the given position in global screen space.
Definition: SDL3pp_mouse.h:679
MouseButtonFlags GetGlobalMouseState(float *x, float *y)
Query the platform for the asynchronous mouse button state and the desktop-relative platform-cursor p...
Definition: SDL3pp_mouse.h:611
constexpr SystemCursor SYSTEM_CURSOR_NWSE_RESIZE
Double arrow pointing northwest and southeast.
Definition: SDL3pp_mouse.h:105
constexpr SystemCursor SYSTEM_CURSOR_E_RESIZE
Window resize right. May be EW_RESIZE.
Definition: SDL3pp_mouse.h:142
constexpr MouseButton BUTTON_X1
X1 button.
Definition: SDL3pp_mouse.h:434
constexpr SystemCursor SYSTEM_CURSOR_NS_RESIZE
Double arrow pointing north and south.
Definition: SDL3pp_mouse.h:116
const char * GetMouseNameForID(MouseID instance_id)
Get the name of a mouse.
Definition: SDL3pp_mouse.h:524
constexpr SystemCursor SYSTEM_CURSOR_COUNT
COUNT.
Definition: SDL3pp_mouse.h:159
SDL_MouseID MouseID
This is a unique ID for a mouse for the time it is connected to the system, and is never reused for t...
Definition: SDL3pp_mouse.h:171
constexpr MouseButtonFlags BUTTON_RMASK
RMASK.
Definition: SDL3pp_mouse.h:459
constexpr SystemCursor SYSTEM_CURSOR_NOT_ALLOWED
Not permitted. Usually a slashed circle or crossbones.
Definition: SDL3pp_mouse.h:123
void Set()
Set the active cursor.
Definition: SDL3pp_mouse.h:894
constexpr MouseButton BUTTON_LEFT
Left button.
Definition: SDL3pp_mouse.h:428
MouseButtonFlags GetMouseState(float *x, float *y)
Query SDL's cache for the synchronous mouse button state and the window-relative SDL-cursor position.
Definition: SDL3pp_mouse.h:571
constexpr MouseButtonFlags BUTTON_LMASK
LMASK.
Definition: SDL3pp_mouse.h:455
constexpr MouseButtonFlags BUTTON_X2MASK
X2MASK.
Definition: SDL3pp_mouse.h:463
void SetRelativeMouseMode(bool enabled)
Set relative mouse mode for a window.
Definition: SDL3pp_mouse.h:708
constexpr SystemCursor SYSTEM_CURSOR_WAIT
Wait. Usually an hourglass or watch or spinning ball.
Definition: SDL3pp_mouse.h:97
Uint8 MouseButton
Represents a button index.
Definition: SDL3pp_mouse.h:426
constexpr SystemCursor SYSTEM_CURSOR_SW_RESIZE
Window resize bottom-left.
Definition: SDL3pp_mouse.h:152
void WarpMouse(const FPointRaw &p)
Move the mouse cursor to the given position within the window.
Definition: SDL3pp_mouse.h:654
void SetCursor(CursorParam cursor)
Set the active cursor.
Definition: SDL3pp_mouse.h:892
constexpr SystemCursor SYSTEM_CURSOR_NE_RESIZE
Window resize top-right.
Definition: SDL3pp_mouse.h:138
constexpr SystemCursor SYSTEM_CURSOR_DEFAULT
Default cursor. Usually an arrow.
Definition: SDL3pp_mouse.h:90
constexpr MouseButtonFlags BUTTON_X1MASK
X1MASK.
Definition: SDL3pp_mouse.h:461
SDL_Cursor * CursorRaw
Alias to raw representation for Cursor.
Definition: SDL3pp_mouse.h:51
constexpr SystemCursor SYSTEM_CURSOR_EW_RESIZE
Double arrow pointing west and east.
Definition: SDL3pp_mouse.h:113
CursorRef GetDefaultCursor()
Get the default cursor.
Definition: SDL3pp_mouse.h:925
WindowRef GetMouseFocus()
Get the window which currently has mouse focus.
Definition: SDL3pp_mouse.h:538
bool CursorVisible()
Return whether the cursor is currently being shown.
Definition: SDL3pp_mouse.h:991
constexpr MouseButtonFlags BUTTON_MMASK
MMASK.
Definition: SDL3pp_mouse.h:457
constexpr SystemCursor SYSTEM_CURSOR_N_RESIZE
Window resize top. May be NS_RESIZE.
Definition: SDL3pp_mouse.h:135
Cursor CreateColorCursor(SurfaceParam surface, const PointRaw &hot)
Create a color cursor.
Definition: SDL3pp_mouse.h:855
constexpr SystemCursor SYSTEM_CURSOR_S_RESIZE
Window resize bottom. May be NS_RESIZE.
Definition: SDL3pp_mouse.h:149
SDL_MouseWheelDirection MouseWheelDirection
Scroll direction types for the Scroll event.
Definition: SDL3pp_mouse.h:414
OwnArray< MouseID > GetMice()
Get a list of currently connected mice.
Definition: SDL3pp_mouse.h:502
constexpr SystemCursor SYSTEM_CURSOR_TEXT
Text selection. Usually an I-beam.
Definition: SDL3pp_mouse.h:93
void HideCursor()
Hide the cursor.
Definition: SDL3pp_mouse.h:976
constexpr MouseButton BUTTON_X2
X2 button.
Definition: SDL3pp_mouse.h:436
void ShowCursor()
Show the cursor.
Definition: SDL3pp_mouse.h:962
constexpr SystemCursor SYSTEM_CURSOR_PROGRESS
Program is busy but still interactive. Usually it's WAIT with an arrow.
Definition: SDL3pp_mouse.h:103
bool HasMouse()
Return whether a mouse is currently connected.
Definition: SDL3pp_mouse.h:482
SDL_FPoint FPointRaw
Alias to raw representation for FPoint.
Definition: SDL3pp_rect.h:28
SDL_Point PointRaw
Alias to raw representation for Point.
Definition: SDL3pp_rect.h:22
::Uint32 Uint32
An unsigned 32-bit integer type.
Definition: SDL3pp_stdinc.h:310
::Uint8 Uint8
An unsigned 8-bit integer type.
Definition: SDL3pp_stdinc.h:258
Main include header for the SDL3pp library.
Safely wrap Cursor for non owning parameters.
Definition: SDL3pp_mouse.h:58
CursorRaw value
parameter's CursorRaw
Definition: SDL3pp_mouse.h:59
constexpr CursorParam(std::nullptr_t _=nullptr)
Constructs null/invalid.
Definition: SDL3pp_mouse.h:68
constexpr auto operator<=>(const CursorParam &other) const =default
Comparison.
constexpr CursorParam(CursorRaw value)
Constructs from CursorRaw.
Definition: SDL3pp_mouse.h:62
Semi-safe reference for Cursor.
Definition: SDL3pp_mouse.h:386
CursorRef(CursorParam resource)
Constructs from CursorParam.
Definition: SDL3pp_mouse.h:394
~CursorRef()
Destructor.
Definition: SDL3pp_mouse.h:406
CursorRef(const CursorRef &other)
Copy constructor.
Definition: SDL3pp_mouse.h:400
Safely wrap Surface for non owning parameters.
Definition: SDL3pp_surface.h:46
Semi-safe reference for Window.
Definition: SDL3pp_video.h:2967