///
/// Simple DirectMedia Layer
/// Copyright (C) 1997-2025 Sam Lantinga
///
/// 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.
///
/// # CategoryPen
///
/// SDL pen event handling.
///
/// SDL provides an API for pressure-sensitive pen (stylus and/or eraser)
/// handling, e.g., for input and drawing tablets or suitably equipped mobile /
/// tablet devices.
///
/// To get started with pens, simply handle SDL_EVENT_PEN_* events. When a pen
/// starts providing input, SDL will assign it a unique SDL_PenID, which will
/// remain for the life of the process, as long as the pen stays connected.
///
/// Pens may provide more than simple touch input; they might have other axes,
/// such as pressure, tilt, rotation, etc.
///|
/// SDL pen instance IDs.
///
/// ```c
/// typedef Uint32 SDL_PenID;
/// ```
pub type SDL_PenID = UInt
///|
/// The SDL_MouseID for mouse events simulated with pen input.
///
/// ```c
/// #define SDL_PEN_MOUSEID ((SDL_MouseID)-2)
/// ```
pub const SDL_PEN_MOUSEID : SDL_MouseID = 0xFFFF_FFFE
///|
/// The SDL_TouchID for touch events simulated with pen input.
///
/// ```c
/// #define SDL_PEN_TOUCHID ((SDL_TouchID)-2)
/// ```
pub const SDL_PEN_TOUCHID : SDL_TouchID = 0xFFFF_FFFF_FFFF_FFFE
///|
/// Pen input flags, as reported by various pen events' `pen_state` field.
///
/// ```c
/// typedef Uint32 SDL_PenInputFlags;
///
/// #define SDL_PEN_INPUT_DOWN (1u << 0) /**< pen is pressed down */
/// #define SDL_PEN_INPUT_BUTTON_1 (1u << 1) /**< button 1 is pressed */
/// #define SDL_PEN_INPUT_BUTTON_2 (1u << 2) /**< button 2 is pressed */
/// #define SDL_PEN_INPUT_BUTTON_3 (1u << 3) /**< button 3 is pressed */
/// #define SDL_PEN_INPUT_BUTTON_4 (1u << 4) /**< button 4 is pressed */
/// #define SDL_PEN_INPUT_BUTTON_5 (1u << 5) /**< button 5 is pressed */
/// #define SDL_PEN_INPUT_ERASER_TIP (1u << 30) /**< eraser tip is used */
/// ```
pub(all) enum SDL_PenInputFlags {
SDL_PEN_INPUT_DOWN = 1
SDL_PEN_INPUT_BUTTON_1 = 2
SDL_PEN_INPUT_BUTTON_2 = 4
SDL_PEN_INPUT_BUTTON_3 = 8
SDL_PEN_INPUT_BUTTON_4 = 16
SDL_PEN_INPUT_BUTTON_5 = 32
SDL_PEN_INPUT_ERASER_TIP = 1073741824
}
///|
/// Pen axis indices.
///
/// ```c
/// typedef enum SDL_PenAxis
/// {
/// SDL_PEN_AXIS_PRESSURE, /**< Pen pressure. Unidirectional: 0 to 1.0 */
/// SDL_PEN_AXIS_XTILT, /**< Pen horizontal tilt angle. Bidirectional: -90.0 to 90.0 (left-to-right). */
/// SDL_PEN_AXIS_YTILT, /**< Pen vertical tilt angle. Bidirectional: -90.0 to 90.0 (top-to-down). */
/// SDL_PEN_AXIS_DISTANCE, /**< Pen distance to drawing surface. Unidirectional: 0.0 to 1.0 */
/// SDL_PEN_AXIS_ROTATION, /**< Pen barrel rotation. Bidirectional: -180 to 179.9 (clockwise, 0 is facing up, -180.0 is facing down). */
/// SDL_PEN_AXIS_SLIDER, /**< Pen finger wheel or slider (e.g., Airbrush Pen). Unidirectional: 0 to 1.0 */
/// SDL_PEN_AXIS_TANGENTIAL_PRESSURE, /**< Pressure from squeezing the pen ("barrel pressure"). */
/// SDL_PEN_AXIS_COUNT /**< Total known pen axis types in this version of SDL. This number may grow in future releases! */
/// } SDL_PenAxis;
/// ```
pub(all) enum SDL_PenAxis {
SDL_PEN_AXIS_PRESSURE
SDL_PEN_AXIS_XTILT
SDL_PEN_AXIS_YTILT
SDL_PEN_AXIS_DISTANCE
SDL_PEN_AXIS_ROTATION
SDL_PEN_AXIS_SLIDER
SDL_PEN_AXIS_TANGENTIAL_PRESSURE
SDL_PEN_AXIS_COUNT
}