mirror of
				https://github.com/libsdl-org/SDL.git
				synced 2025-10-26 12:27:44 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			185 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			185 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|   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.
 | |
| */
 | |
| 
 | |
| /**
 | |
|  * # CategoryTouch
 | |
|  *
 | |
|  * SDL offers touch input, on platforms that support it. It can manage
 | |
|  * multiple touch devices and track multiple fingers on those devices.
 | |
|  *
 | |
|  * Touches are mostly dealt with through the event system, in the
 | |
|  * SDL_EVENT_FINGER_DOWN, SDL_EVENT_FINGER_MOTION, and SDL_EVENT_FINGER_UP
 | |
|  * events, but there are also functions to query for hardware details, etc.
 | |
|  *
 | |
|  * The touch system, by default, will also send virtual mouse events; this can
 | |
|  * be useful for making a some desktop apps work on a phone without
 | |
|  * significant changes. For apps that care about mouse and touch input
 | |
|  * separately, they should ignore mouse events that have a `which` field of
 | |
|  * SDL_TOUCH_MOUSEID.
 | |
|  */
 | |
| 
 | |
| #ifndef SDL_touch_h_
 | |
| #define SDL_touch_h_
 | |
| 
 | |
| #include <SDL3/SDL_stdinc.h>
 | |
| #include <SDL3/SDL_error.h>
 | |
| #include <SDL3/SDL_mouse.h>
 | |
| 
 | |
| #include <SDL3/SDL_begin_code.h>
 | |
| /* Set up for C function definitions, even when using C++ */
 | |
| #ifdef __cplusplus
 | |
| extern "C" {
 | |
| #endif
 | |
| 
 | |
| /**
 | |
|  * A unique ID for a touch device.
 | |
|  *
 | |
|  * This ID is valid for the time the device is connected to the system, and is
 | |
|  * never reused for the lifetime of the application.
 | |
|  *
 | |
|  * The value 0 is an invalid ID.
 | |
|  *
 | |
|  * \since This datatype is available since SDL 3.2.0.
 | |
|  */
 | |
| typedef Uint64 SDL_TouchID;
 | |
| 
 | |
| /**
 | |
|  * A unique ID for a single finger on a touch device.
 | |
|  *
 | |
|  * This ID is valid for the time the finger (stylus, etc) is touching and will
 | |
|  * be unique for all fingers currently in contact, so this ID tracks the
 | |
|  * lifetime of a single continuous touch. This value may represent an index, a
 | |
|  * pointer, or some other unique ID, depending on the platform.
 | |
|  *
 | |
|  * The value 0 is an invalid ID.
 | |
|  *
 | |
|  * \since This datatype is available since SDL 3.2.0.
 | |
|  */
 | |
| typedef Uint64 SDL_FingerID;
 | |
| 
 | |
| /**
 | |
|  * An enum that describes the type of a touch device.
 | |
|  *
 | |
|  * \since This enum is available since SDL 3.2.0.
 | |
|  */
 | |
| typedef enum SDL_TouchDeviceType
 | |
| {
 | |
|     SDL_TOUCH_DEVICE_INVALID = -1,
 | |
|     SDL_TOUCH_DEVICE_DIRECT,            /**< touch screen with window-relative coordinates */
 | |
|     SDL_TOUCH_DEVICE_INDIRECT_ABSOLUTE, /**< trackpad with absolute device coordinates */
 | |
|     SDL_TOUCH_DEVICE_INDIRECT_RELATIVE  /**< trackpad with screen cursor-relative coordinates */
 | |
| } SDL_TouchDeviceType;
 | |
| 
 | |
| /**
 | |
|  * Data about a single finger in a multitouch event.
 | |
|  *
 | |
|  * Each touch event is a collection of fingers that are simultaneously in
 | |
|  * contact with the touch device (so a "touch" can be a "multitouch," in
 | |
|  * reality), and this struct reports details of the specific fingers.
 | |
|  *
 | |
|  * \since This struct is available since SDL 3.2.0.
 | |
|  *
 | |
|  * \sa SDL_GetTouchFingers
 | |
|  */
 | |
| typedef struct SDL_Finger
 | |
| {
 | |
|     SDL_FingerID id;  /**< the finger ID */
 | |
|     float x;  /**< the x-axis location of the touch event, normalized (0...1) */
 | |
|     float y;  /**< the y-axis location of the touch event, normalized (0...1) */
 | |
|     float pressure; /**< the quantity of pressure applied, normalized (0...1) */
 | |
| } SDL_Finger;
 | |
| 
 | |
| /**
 | |
|  * The SDL_MouseID for mouse events simulated with touch input.
 | |
|  *
 | |
|  * \since This macro is available since SDL 3.2.0.
 | |
|  */
 | |
| #define SDL_TOUCH_MOUSEID ((SDL_MouseID)-1)
 | |
| 
 | |
| /**
 | |
|  * The SDL_TouchID for touch events simulated with mouse input.
 | |
|  *
 | |
|  * \since This macro is available since SDL 3.2.0.
 | |
|  */
 | |
| #define SDL_MOUSE_TOUCHID ((SDL_TouchID)-1)
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * Get a list of registered touch devices.
 | |
|  *
 | |
|  * On some platforms SDL first sees the touch device if it was actually used.
 | |
|  * Therefore the returned list might be empty, although devices are available.
 | |
|  * After using all devices at least once the number will be correct.
 | |
|  *
 | |
|  * \param count a pointer filled in with the number of devices returned, may
 | |
|  *              be NULL.
 | |
|  * \returns a 0 terminated array of touch device IDs or NULL on failure; call
 | |
|  *          SDL_GetError() for more information. This should be freed with
 | |
|  *          SDL_free() when it is no longer needed.
 | |
|  *
 | |
|  * \since This function is available since SDL 3.2.0.
 | |
|  */
 | |
| extern SDL_DECLSPEC SDL_TouchID * SDLCALL SDL_GetTouchDevices(int *count);
 | |
| 
 | |
| /**
 | |
|  * Get the touch device name as reported from the driver.
 | |
|  *
 | |
|  * \param touchID the touch device instance ID.
 | |
|  * \returns touch device name, or NULL on failure; call SDL_GetError() for
 | |
|  *          more information.
 | |
|  *
 | |
|  * \since This function is available since SDL 3.2.0.
 | |
|  */
 | |
| extern SDL_DECLSPEC const char * SDLCALL SDL_GetTouchDeviceName(SDL_TouchID touchID);
 | |
| 
 | |
| /**
 | |
|  * Get the type of the given touch device.
 | |
|  *
 | |
|  * \param touchID the ID of a touch device.
 | |
|  * \returns touch device type.
 | |
|  *
 | |
|  * \since This function is available since SDL 3.2.0.
 | |
|  */
 | |
| extern SDL_DECLSPEC SDL_TouchDeviceType SDLCALL SDL_GetTouchDeviceType(SDL_TouchID touchID);
 | |
| 
 | |
| /**
 | |
|  * Get a list of active fingers for a given touch device.
 | |
|  *
 | |
|  * \param touchID the ID of a touch device.
 | |
|  * \param count a pointer filled in with the number of fingers returned, can
 | |
|  *              be NULL.
 | |
|  * \returns a NULL terminated array of SDL_Finger pointers or NULL on failure;
 | |
|  *          call SDL_GetError() for more information. This is a single
 | |
|  *          allocation that should be freed with SDL_free() when it is no
 | |
|  *          longer needed.
 | |
|  *
 | |
|  * \since This function is available since SDL 3.2.0.
 | |
|  */
 | |
| extern SDL_DECLSPEC SDL_Finger ** SDLCALL SDL_GetTouchFingers(SDL_TouchID touchID, int *count);
 | |
| 
 | |
| /* Ends C function definitions when using C++ */
 | |
| #ifdef __cplusplus
 | |
| }
 | |
| #endif
 | |
| #include <SDL3/SDL_close_code.h>
 | |
| 
 | |
| #endif /* SDL_touch_h_ */
 | 
