123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655 |
- /*
- Simple DirectMedia Layer
- Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
- This software is provided 'as-is', without any express or implied
- warranty. In no event will the authors be held liable for any damages
- arising from the use of this software.
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it
- freely, subject to the following restrictions:
- 1. The origin of this software must not be misrepresented; you must not
- claim that you wrote the original software. If you use this software
- in a product, an acknowledgment in the product documentation would be
- appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
- */
- /**
- * # CategoryMouse
- *
- * SDL mouse handling.
- */
- #ifndef SDL_mouse_h_
- #define SDL_mouse_h_
- #include <SDL3/SDL_stdinc.h>
- #include <SDL3/SDL_error.h>
- #include <SDL3/SDL_surface.h>
- #include <SDL3/SDL_video.h>
- #include <SDL3/SDL_begin_code.h>
- /* Set up for C function definitions, even when using C++ */
- #ifdef __cplusplus
- extern "C" {
- #endif
- /**
- * This is a unique ID for a mouse for the time it is connected to the system,
- * and is never reused for the lifetime of the application.
- *
- * If the mouse is disconnected and reconnected, it will get a new ID.
- *
- * The value 0 is an invalid ID.
- *
- * \since This datatype is available since SDL 3.1.3.
- */
- typedef Uint32 SDL_MouseID;
- /**
- * The structure used to identify an SDL cursor.
- *
- * This is opaque data.
- *
- * \since This struct is available since SDL 3.1.3.
- */
- typedef struct SDL_Cursor SDL_Cursor;
- /**
- * Cursor types for SDL_CreateSystemCursor().
- *
- * \since This enum is available since SDL 3.1.3.
- */
- typedef enum SDL_SystemCursor
- {
- SDL_SYSTEM_CURSOR_DEFAULT, /**< Default cursor. Usually an arrow. */
- SDL_SYSTEM_CURSOR_TEXT, /**< Text selection. Usually an I-beam. */
- SDL_SYSTEM_CURSOR_WAIT, /**< Wait. Usually an hourglass or watch or spinning ball. */
- SDL_SYSTEM_CURSOR_CROSSHAIR, /**< Crosshair. */
- SDL_SYSTEM_CURSOR_PROGRESS, /**< Program is busy but still interactive. Usually it's WAIT with an arrow. */
- SDL_SYSTEM_CURSOR_NWSE_RESIZE, /**< Double arrow pointing northwest and southeast. */
- SDL_SYSTEM_CURSOR_NESW_RESIZE, /**< Double arrow pointing northeast and southwest. */
- SDL_SYSTEM_CURSOR_EW_RESIZE, /**< Double arrow pointing west and east. */
- SDL_SYSTEM_CURSOR_NS_RESIZE, /**< Double arrow pointing north and south. */
- SDL_SYSTEM_CURSOR_MOVE, /**< Four pointed arrow pointing north, south, east, and west. */
- SDL_SYSTEM_CURSOR_NOT_ALLOWED, /**< Not permitted. Usually a slashed circle or crossbones. */
- SDL_SYSTEM_CURSOR_POINTER, /**< Pointer that indicates a link. Usually a pointing hand. */
- SDL_SYSTEM_CURSOR_NW_RESIZE, /**< Window resize top-left. This may be a single arrow or a double arrow like NWSE_RESIZE. */
- SDL_SYSTEM_CURSOR_N_RESIZE, /**< Window resize top. May be NS_RESIZE. */
- SDL_SYSTEM_CURSOR_NE_RESIZE, /**< Window resize top-right. May be NESW_RESIZE. */
- SDL_SYSTEM_CURSOR_E_RESIZE, /**< Window resize right. May be EW_RESIZE. */
- SDL_SYSTEM_CURSOR_SE_RESIZE, /**< Window resize bottom-right. May be NWSE_RESIZE. */
- SDL_SYSTEM_CURSOR_S_RESIZE, /**< Window resize bottom. May be NS_RESIZE. */
- SDL_SYSTEM_CURSOR_SW_RESIZE, /**< Window resize bottom-left. May be NESW_RESIZE. */
- SDL_SYSTEM_CURSOR_W_RESIZE, /**< Window resize left. May be EW_RESIZE. */
- SDL_SYSTEM_CURSOR_COUNT
- } SDL_SystemCursor;
- /**
- * Scroll direction types for the Scroll event
- *
- * \since This enum is available since SDL 3.1.3.
- */
- typedef enum SDL_MouseWheelDirection
- {
- SDL_MOUSEWHEEL_NORMAL, /**< The scroll direction is normal */
- SDL_MOUSEWHEEL_FLIPPED /**< The scroll direction is flipped / natural */
- } SDL_MouseWheelDirection;
- /**
- * A bitmask of pressed mouse buttons, as reported by SDL_GetMouseState, etc.
- *
- * - Button 1: Left mouse button
- * - Button 2: Middle mouse button
- * - Button 3: Right mouse button
- * - Button 4: Side mouse button 1
- * - Button 5: Side mouse button 2
- *
- * \since This datatype is available since SDL 3.1.3.
- *
- * \sa SDL_GetMouseState
- * \sa SDL_GetGlobalMouseState
- * \sa SDL_GetRelativeMouseState
- */
- typedef Uint32 SDL_MouseButtonFlags;
- #define SDL_BUTTON_LEFT 1
- #define SDL_BUTTON_MIDDLE 2
- #define SDL_BUTTON_RIGHT 3
- #define SDL_BUTTON_X1 4
- #define SDL_BUTTON_X2 5
- #define SDL_BUTTON_MASK(X) (1u << ((X)-1))
- #define SDL_BUTTON_LMASK SDL_BUTTON_MASK(SDL_BUTTON_LEFT)
- #define SDL_BUTTON_MMASK SDL_BUTTON_MASK(SDL_BUTTON_MIDDLE)
- #define SDL_BUTTON_RMASK SDL_BUTTON_MASK(SDL_BUTTON_RIGHT)
- #define SDL_BUTTON_X1MASK SDL_BUTTON_MASK(SDL_BUTTON_X1)
- #define SDL_BUTTON_X2MASK SDL_BUTTON_MASK(SDL_BUTTON_X2)
- /* Function prototypes */
- /**
- * Return whether a mouse is currently connected.
- *
- * \returns true if a mouse is connected, false otherwise.
- *
- * \threadsafety This function should only be called on the main thread.
- *
- * \since This function is available since SDL 3.1.3.
- *
- * \sa SDL_GetMice
- */
- extern SDL_DECLSPEC bool SDLCALL SDL_HasMouse(void);
- /**
- * Get a list of currently connected mice.
- *
- * Note that this will include any device or virtual driver that includes
- * mouse functionality, including some game controllers, KVM switches, etc.
- * You should wait for input from a device before you consider it actively in
- * use.
- *
- * \param count a pointer filled in with the number of mice returned, may be
- * NULL.
- * \returns a 0 terminated array of mouse instance IDs or NULL on failure;
- * call SDL_GetError() for more information. This should be freed
- * with SDL_free() when it is no longer needed.
- *
- * \threadsafety This function should only be called on the main thread.
- *
- * \since This function is available since SDL 3.1.3.
- *
- * \sa SDL_GetMouseNameForID
- * \sa SDL_HasMouse
- */
- extern SDL_DECLSPEC SDL_MouseID * SDLCALL SDL_GetMice(int *count);
- /**
- * Get the name of a mouse.
- *
- * This function returns "" if the mouse doesn't have a name.
- *
- * \param instance_id the mouse instance ID.
- * \returns the name of the selected mouse, or NULL on failure; call
- * SDL_GetError() for more information.
- *
- * \threadsafety This function should only be called on the main thread.
- *
- * \since This function is available since SDL 3.1.3.
- *
- * \sa SDL_GetMice
- */
- extern SDL_DECLSPEC const char * SDLCALL SDL_GetMouseNameForID(SDL_MouseID instance_id);
- /**
- * Get the window which currently has mouse focus.
- *
- * \returns the window with mouse focus.
- *
- * \threadsafety This function should only be called on the main thread.
- *
- * \since This function is available since SDL 3.1.3.
- */
- extern SDL_DECLSPEC SDL_Window * SDLCALL SDL_GetMouseFocus(void);
- /**
- * Query SDL's cache for the synchronous mouse button state and the
- * window-relative SDL-cursor position.
- *
- * This function returns the cached synchronous state as SDL understands it
- * from the last pump of the event queue.
- *
- * To query the platform for immediate asynchronous state, use
- * SDL_GetGlobalMouseState.
- *
- * Passing non-NULL pointers to `x` or `y` will write the destination with
- * respective x or y coordinates relative to the focused window.
- *
- * In Relative Mode, the SDL-cursor's position usually contradicts the
- * platform-cursor's position as manually calculated from
- * SDL_GetGlobalMouseState() and SDL_GetWindowPosition.
- *
- * \param x a pointer to receive the SDL-cursor's x-position from the focused
- * window's top left corner, can be NULL if unused.
- * \param y a pointer to receive the SDL-cursor's y-position from the focused
- * window's top left corner, can be NULL if unused.
- * \returns a 32-bit bitmask of the button state that can be bitwise-compared
- * against the SDL_BUTTON_MASK(X) macro.
- *
- * \threadsafety This function should only be called on the main thread.
- *
- * \since This function is available since SDL 3.1.3.
- *
- * \sa SDL_GetGlobalMouseState
- * \sa SDL_GetRelativeMouseState
- */
- extern SDL_DECLSPEC SDL_MouseButtonFlags SDLCALL SDL_GetMouseState(float *x, float *y);
- /**
- * Query the platform for the asynchronous mouse button state and the
- * desktop-relative platform-cursor position.
- *
- * This function immediately queries the platform for the most recent
- * asynchronous state, more costly than retrieving SDL's cached state in
- * SDL_GetMouseState().
- *
- * Passing non-NULL pointers to `x` or `y` will write the destination with
- * respective x or y coordinates relative to the desktop.
- *
- * In Relative Mode, the platform-cursor's position usually contradicts the
- * SDL-cursor's position as manually calculated from SDL_GetMouseState() and
- * SDL_GetWindowPosition.
- *
- * This function can be useful if you need to track the mouse outside of a
- * specific window and SDL_CaptureMouse() doesn't fit your needs. For example,
- * it could be useful if you need to track the mouse while dragging a window,
- * where coordinates relative to a window might not be in sync at all times.
- *
- * \param x a pointer to receive the platform-cursor's x-position from the
- * desktop's top left corner, can be NULL if unused.
- * \param y a pointer to receive the platform-cursor's y-position from the
- * desktop's top left corner, can be NULL if unused.
- * \returns a 32-bit bitmask of the button state that can be bitwise-compared
- * against the SDL_BUTTON_MASK(X) macro.
- *
- * \threadsafety This function should only be called on the main thread.
- *
- * \since This function is available since SDL 3.1.3.
- *
- * \sa SDL_CaptureMouse
- * \sa SDL_GetMouseState
- * \sa SDL_GetGlobalMouseState
- */
- extern SDL_DECLSPEC SDL_MouseButtonFlags SDLCALL SDL_GetGlobalMouseState(float *x, float *y);
- /**
- * Query SDL's cache for the synchronous mouse button state and accumulated
- * mouse delta since last call.
- *
- * This function returns the cached synchronous state as SDL understands it
- * from the last pump of the event queue.
- *
- * To query the platform for immediate asynchronous state, use
- * SDL_GetGlobalMouseState.
- *
- * Passing non-NULL pointers to `x` or `y` will write the destination with
- * respective x or y deltas accumulated since the last call to this function
- * (or since event initialization).
- *
- * This function is useful for reducing overhead by processing relative mouse
- * inputs in one go per-frame instead of individually per-event, at the
- * expense of losing the order between events within the frame (e.g. quickly
- * pressing and releasing a button within the same frame).
- *
- * \param x a pointer to receive the x mouse delta accumulated since last
- * call, can be NULL if unused.
- * \param y a pointer to receive the y mouse delta accumulated since last
- * call, can be NULL if unused.
- * \returns a 32-bit bitmask of the button state that can be bitwise-compared
- * against the SDL_BUTTON_MASK(X) macro.
- *
- * \threadsafety This function should only be called on the main thread.
- *
- * \since This function is available since SDL 3.1.3.
- *
- * \sa SDL_GetMouseState
- * \sa SDL_GetGlobalMouseState
- */
- extern SDL_DECLSPEC SDL_MouseButtonFlags SDLCALL SDL_GetRelativeMouseState(float *x, float *y);
- /**
- * Move the mouse cursor to the given position within the window.
- *
- * This function generates a mouse motion event if relative mode is not
- * enabled. If relative mode is enabled, you can force mouse events for the
- * warp by setting the SDL_HINT_MOUSE_RELATIVE_WARP_MOTION hint.
- *
- * Note that this function will appear to succeed, but not actually move the
- * mouse when used over Microsoft Remote Desktop.
- *
- * \param window the window to move the mouse into, or NULL for the current
- * mouse focus.
- * \param x the x coordinate within the window.
- * \param y the y coordinate within the window.
- *
- * \threadsafety This function should only be called on the main thread.
- *
- * \since This function is available since SDL 3.1.3.
- *
- * \sa SDL_WarpMouseGlobal
- */
- extern SDL_DECLSPEC void SDLCALL SDL_WarpMouseInWindow(SDL_Window * window,
- float x, float y);
- /**
- * Move the mouse to the given position in global screen space.
- *
- * This function generates a mouse motion event.
- *
- * A failure of this function usually means that it is unsupported by a
- * platform.
- *
- * Note that this function will appear to succeed, but not actually move the
- * mouse when used over Microsoft Remote Desktop.
- *
- * \param x the x coordinate.
- * \param y the y coordinate.
- * \returns true on success or false on failure; call SDL_GetError() for more
- * information.
- *
- * \threadsafety This function should only be called on the main thread.
- *
- * \since This function is available since SDL 3.1.3.
- *
- * \sa SDL_WarpMouseInWindow
- */
- extern SDL_DECLSPEC bool SDLCALL SDL_WarpMouseGlobal(float x, float y);
- /**
- * Set relative mouse mode for a window.
- *
- * While the window has focus and relative mouse mode is enabled, the cursor
- * is hidden, the mouse position is constrained to the window, and SDL will
- * report continuous relative mouse motion even if the mouse is at the edge of
- * the window.
- *
- * This function will flush any pending mouse motion for this window.
- *
- * \param window the window to change.
- * \param enabled true to enable relative mode, false to disable.
- * \returns true on success or false on failure; call SDL_GetError() for more
- * information.
- *
- * \threadsafety This function should only be called on the main thread.
- *
- * \since This function is available since SDL 3.1.3.
- *
- * \sa SDL_GetWindowRelativeMouseMode
- */
- extern SDL_DECLSPEC bool SDLCALL SDL_SetWindowRelativeMouseMode(SDL_Window *window, bool enabled);
- /**
- * Query whether relative mouse mode is enabled for a window.
- *
- * \param window the window to query.
- * \returns true if relative mode is enabled for a window or false otherwise.
- *
- * \threadsafety This function should only be called on the main thread.
- *
- * \since This function is available since SDL 3.1.3.
- *
- * \sa SDL_SetWindowRelativeMouseMode
- */
- extern SDL_DECLSPEC bool SDLCALL SDL_GetWindowRelativeMouseMode(SDL_Window *window);
- /**
- * Capture the mouse and to track input outside an SDL window.
- *
- * Capturing enables your app to obtain mouse events globally, instead of just
- * within your window. Not all video targets support this function. When
- * capturing is enabled, the current window will get all mouse events, but
- * unlike relative mode, no change is made to the cursor and it is not
- * restrained to your window.
- *
- * This function may also deny mouse input to other windows--both those in
- * your application and others on the system--so you should use this function
- * sparingly, and in small bursts. For example, you might want to track the
- * mouse while the user is dragging something, until the user releases a mouse
- * button. It is not recommended that you capture the mouse for long periods
- * of time, such as the entire time your app is running. For that, you should
- * probably use SDL_SetWindowRelativeMouseMode() or SDL_SetWindowMouseGrab(),
- * depending on your goals.
- *
- * While captured, mouse events still report coordinates relative to the
- * current (foreground) window, but those coordinates may be outside the
- * bounds of the window (including negative values). Capturing is only allowed
- * for the foreground window. If the window loses focus while capturing, the
- * capture will be disabled automatically.
- *
- * While capturing is enabled, the current window will have the
- * `SDL_WINDOW_MOUSE_CAPTURE` flag set.
- *
- * Please note that SDL will attempt to "auto capture" the mouse while the
- * user is pressing a button; this is to try and make mouse behavior more
- * consistent between platforms, and deal with the common case of a user
- * dragging the mouse outside of the window. This means that if you are
- * calling SDL_CaptureMouse() only to deal with this situation, you do not
- * have to (although it is safe to do so). If this causes problems for your
- * app, you can disable auto capture by setting the
- * `SDL_HINT_MOUSE_AUTO_CAPTURE` hint to zero.
- *
- * \param enabled true to enable capturing, false to disable.
- * \returns true on success or false on failure; call SDL_GetError() for more
- * information.
- *
- * \threadsafety This function should only be called on the main thread.
- *
- * \since This function is available since SDL 3.1.3.
- *
- * \sa SDL_GetGlobalMouseState
- */
- extern SDL_DECLSPEC bool SDLCALL SDL_CaptureMouse(bool enabled);
- /**
- * Create a cursor using the specified bitmap data and mask (in MSB format).
- *
- * `mask` has to be in MSB (Most Significant Bit) format.
- *
- * The cursor width (`w`) must be a multiple of 8 bits.
- *
- * The cursor is created in black and white according to the following:
- *
- * - data=0, mask=1: white
- * - data=1, mask=1: black
- * - data=0, mask=0: transparent
- * - data=1, mask=0: inverted color if possible, black if not.
- *
- * Cursors created with this function must be freed with SDL_DestroyCursor().
- *
- * If you want to have a color cursor, or create your cursor from an
- * SDL_Surface, you should use SDL_CreateColorCursor(). Alternately, you can
- * hide the cursor and draw your own as part of your game's rendering, but it
- * will be bound to the framerate.
- *
- * Also, SDL_CreateSystemCursor() is available, which provides several
- * readily-available system cursors to pick from.
- *
- * \param data the color value for each pixel of the cursor.
- * \param mask the mask value for each pixel of the cursor.
- * \param w the width of the cursor.
- * \param h the height of the cursor.
- * \param hot_x the x-axis offset from the left of the cursor image to the
- * mouse x position, in the range of 0 to `w` - 1.
- * \param hot_y the y-axis offset from the top of the cursor image to the
- * mouse y position, in the range of 0 to `h` - 1.
- * \returns a new cursor with the specified parameters on success or NULL on
- * failure; call SDL_GetError() for more information.
- *
- * \threadsafety This function should only be called on the main thread.
- *
- * \since This function is available since SDL 3.1.3.
- *
- * \sa SDL_CreateColorCursor
- * \sa SDL_CreateSystemCursor
- * \sa SDL_DestroyCursor
- * \sa SDL_SetCursor
- */
- extern SDL_DECLSPEC SDL_Cursor * SDLCALL SDL_CreateCursor(const Uint8 * data,
- const Uint8 * mask,
- int w, int h, int hot_x,
- int hot_y);
- /**
- * Create a color cursor.
- *
- * If this function is passed a surface with alternate representations, the
- * surface will be interpreted as the content to be used for 100% display
- * scale, and the alternate representations will be used for high DPI
- * situations. For example, if the original surface is 32x32, then on a 2x
- * macOS display or 200% display scale on Windows, a 64x64 version of the
- * image will be used, if available. If a matching version of the image isn't
- * available, the closest larger size image will be downscaled to the
- * appropriate size and be used instead, if available. Otherwise, the closest
- * smaller image will be upscaled and be used instead.
- *
- * \param surface an SDL_Surface structure representing the cursor image.
- * \param hot_x the x position of the cursor hot spot.
- * \param hot_y the y position of the cursor hot spot.
- * \returns the new cursor on success or NULL on failure; call SDL_GetError()
- * for more information.
- *
- * \threadsafety This function should only be called on the main thread.
- *
- * \since This function is available since SDL 3.1.3.
- *
- * \sa SDL_CreateCursor
- * \sa SDL_CreateSystemCursor
- * \sa SDL_DestroyCursor
- * \sa SDL_SetCursor
- */
- extern SDL_DECLSPEC SDL_Cursor * SDLCALL SDL_CreateColorCursor(SDL_Surface *surface,
- int hot_x,
- int hot_y);
- /**
- * Create a system cursor.
- *
- * \param id an SDL_SystemCursor enum value.
- * \returns a cursor on success or NULL on failure; call SDL_GetError() for
- * more information.
- *
- * \threadsafety This function should only be called on the main thread.
- *
- * \since This function is available since SDL 3.1.3.
- *
- * \sa SDL_DestroyCursor
- */
- extern SDL_DECLSPEC SDL_Cursor * SDLCALL SDL_CreateSystemCursor(SDL_SystemCursor id);
- /**
- * Set the active cursor.
- *
- * This function sets the currently active cursor to the specified one. If the
- * cursor is currently visible, the change will be immediately represented on
- * the display. SDL_SetCursor(NULL) can be used to force cursor redraw, if
- * this is desired for any reason.
- *
- * \param cursor a cursor to make active.
- * \returns true on success or false on failure; call SDL_GetError() for more
- * information.
- *
- * \threadsafety This function should only be called on the main thread.
- *
- * \since This function is available since SDL 3.1.3.
- *
- * \sa SDL_GetCursor
- */
- extern SDL_DECLSPEC bool SDLCALL SDL_SetCursor(SDL_Cursor *cursor);
- /**
- * Get the active cursor.
- *
- * This function returns a pointer to the current cursor which is owned by the
- * library. It is not necessary to free the cursor with SDL_DestroyCursor().
- *
- * \returns the active cursor or NULL if there is no mouse.
- *
- * \threadsafety This function should only be called on the main thread.
- *
- * \since This function is available since SDL 3.1.3.
- *
- * \sa SDL_SetCursor
- */
- extern SDL_DECLSPEC SDL_Cursor * SDLCALL SDL_GetCursor(void);
- /**
- * Get the default cursor.
- *
- * You do not have to call SDL_DestroyCursor() on the return value, but it is
- * safe to do so.
- *
- * \returns the default cursor on success or NULL on failuree; call
- * SDL_GetError() for more information.
- *
- * \threadsafety This function should only be called on the main thread.
- *
- * \since This function is available since SDL 3.1.3.
- */
- extern SDL_DECLSPEC SDL_Cursor * SDLCALL SDL_GetDefaultCursor(void);
- /**
- * Free a previously-created cursor.
- *
- * Use this function to free cursor resources created with SDL_CreateCursor(),
- * SDL_CreateColorCursor() or SDL_CreateSystemCursor().
- *
- * \param cursor the cursor to free.
- *
- * \threadsafety This function should only be called on the main thread.
- *
- * \since This function is available since SDL 3.1.3.
- *
- * \sa SDL_CreateColorCursor
- * \sa SDL_CreateCursor
- * \sa SDL_CreateSystemCursor
- */
- extern SDL_DECLSPEC void SDLCALL SDL_DestroyCursor(SDL_Cursor *cursor);
- /**
- * Show the cursor.
- *
- * \returns true on success or false on failure; call SDL_GetError() for more
- * information.
- *
- * \threadsafety This function should only be called on the main thread.
- *
- * \since This function is available since SDL 3.1.3.
- *
- * \sa SDL_CursorVisible
- * \sa SDL_HideCursor
- */
- extern SDL_DECLSPEC bool SDLCALL SDL_ShowCursor(void);
- /**
- * Hide the cursor.
- *
- * \returns true on success or false on failure; call SDL_GetError() for more
- * information.
- *
- * \threadsafety This function should only be called on the main thread.
- *
- * \since This function is available since SDL 3.1.3.
- *
- * \sa SDL_CursorVisible
- * \sa SDL_ShowCursor
- */
- extern SDL_DECLSPEC bool SDLCALL SDL_HideCursor(void);
- /**
- * Return whether the cursor is currently being shown.
- *
- * \returns `true` if the cursor is being shown, or `false` if the cursor is
- * hidden.
- *
- * \threadsafety This function should only be called on the main thread.
- *
- * \since This function is available since SDL 3.1.3.
- *
- * \sa SDL_HideCursor
- * \sa SDL_ShowCursor
- */
- extern SDL_DECLSPEC bool SDLCALL SDL_CursorVisible(void);
- /* Ends C function definitions when using C++ */
- #ifdef __cplusplus
- }
- #endif
- #include <SDL3/SDL_close_code.h>
- #endif /* SDL_mouse_h_ */
|