2015-06-21 09:33:46 -06:00
|
|
|
/*
|
|
|
|
Simple DirectMedia Layer
|
2024-01-01 14:15:26 -07:00
|
|
|
Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
|
2015-06-21 09:33:46 -06:00
|
|
|
|
|
|
|
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.
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* \file SDL_system.h
|
|
|
|
*
|
2023-11-06 08:26:06 -07:00
|
|
|
* Include file for platform specific SDL API functions
|
2015-06-21 09:33:46 -06:00
|
|
|
*/
|
|
|
|
|
2016-11-20 22:34:54 -07:00
|
|
|
#ifndef SDL_system_h_
|
|
|
|
#define SDL_system_h_
|
2015-06-21 09:33:46 -06:00
|
|
|
|
2022-11-26 21:43:38 -07:00
|
|
|
#include <SDL3/SDL_stdinc.h>
|
|
|
|
#include <SDL3/SDL_keyboard.h>
|
|
|
|
#include <SDL3/SDL_render.h>
|
|
|
|
#include <SDL3/SDL_video.h>
|
2015-06-21 09:33:46 -06:00
|
|
|
|
2022-12-22 09:38:59 -07:00
|
|
|
#include <SDL3/SDL_begin_code.h>
|
2015-06-21 09:33:46 -06:00
|
|
|
/* Set up for C function definitions, even when using C++ */
|
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
2023-11-07 15:38:19 -07:00
|
|
|
/*
|
|
|
|
* Platform specific functions for Windows
|
|
|
|
*/
|
2024-01-23 18:40:51 -07:00
|
|
|
#if defined(SDL_PLATFORM_WIN32) || defined(SDL_PLATFORM_GDK)
|
2023-01-29 14:30:55 -07:00
|
|
|
|
2023-11-07 15:38:19 -07:00
|
|
|
typedef struct tagMSG MSG;
|
|
|
|
typedef SDL_bool (SDLCALL *SDL_WindowsMessageHook)(void *userdata, MSG *msg);
|
2023-11-09 18:11:23 -07:00
|
|
|
|
2015-06-21 09:33:46 -06:00
|
|
|
/**
|
2021-03-21 12:18:39 -06:00
|
|
|
* Set a callback for every Windows message, run before TranslateMessage().
|
|
|
|
*
|
2023-11-09 18:11:23 -07:00
|
|
|
* The callback may modify the message, and should return SDL_TRUE if the
|
|
|
|
* message should continue to be processed, or SDL_FALSE to prevent further
|
|
|
|
* processing.
|
2023-11-07 15:38:19 -07:00
|
|
|
*
|
2021-03-21 12:18:39 -06:00
|
|
|
* \param callback The SDL_WindowsMessageHook function to call.
|
|
|
|
* \param userdata a pointer to pass to every iteration of `callback`
|
2021-09-17 13:17:05 -06:00
|
|
|
*
|
2022-11-22 15:40:14 -07:00
|
|
|
* \since This function is available since SDL 3.0.0.
|
2021-03-21 12:18:39 -06:00
|
|
|
*/
|
|
|
|
extern DECLSPEC void SDLCALL SDL_SetWindowsMessageHook(SDL_WindowsMessageHook callback, void *userdata);
|
2015-06-21 09:33:46 -06:00
|
|
|
|
2024-01-23 18:40:51 -07:00
|
|
|
#endif /* defined(SDL_PLATFORM_WIN32) || defined(SDL_PLATFORM_GDK) */
|
2022-06-27 11:19:39 -06:00
|
|
|
|
2024-01-23 18:40:51 -07:00
|
|
|
#if defined(SDL_PLATFORM_WIN32) || defined(SDL_PLATFORM_WINGDK)
|
2022-06-27 11:19:39 -06:00
|
|
|
|
2021-03-21 12:18:39 -06:00
|
|
|
/**
|
2023-01-29 14:30:55 -07:00
|
|
|
* Get the D3D9 adapter index that matches the specified display.
|
2021-03-21 12:18:39 -06:00
|
|
|
*
|
|
|
|
* The returned adapter index can be passed to `IDirect3D9::CreateDevice` and
|
|
|
|
* controls on which monitor a full screen application will appear.
|
|
|
|
*
|
2023-01-29 14:30:55 -07:00
|
|
|
* \param displayID the instance of the display to query
|
2021-03-21 12:18:39 -06:00
|
|
|
* \returns the D3D9 adapter index on success or a negative error code on
|
|
|
|
* failure; call SDL_GetError() for more information.
|
|
|
|
*
|
2022-11-22 15:40:14 -07:00
|
|
|
* \since This function is available since SDL 3.0.0.
|
2021-03-21 12:18:39 -06:00
|
|
|
*/
|
2023-01-29 14:30:55 -07:00
|
|
|
extern DECLSPEC int SDLCALL SDL_Direct3D9GetAdapterIndex(SDL_DisplayID displayID);
|
2015-06-21 09:33:46 -06:00
|
|
|
|
2024-01-23 18:40:51 -07:00
|
|
|
#endif /* defined(SDL_PLATFORM_WIN32) || defined(SDL_PLATFORM_WINGDK) */
|
2022-06-27 11:19:39 -06:00
|
|
|
|
2024-01-23 18:40:51 -07:00
|
|
|
#if defined(SDL_PLATFORM_WIN32) || defined(SDL_PLATFORM_WINGDK)
|
2022-06-27 11:19:39 -06:00
|
|
|
|
2015-06-21 09:33:46 -06:00
|
|
|
/**
|
2023-01-29 14:30:55 -07:00
|
|
|
* Get the DXGI Adapter and Output indices for the specified display.
|
2021-03-21 12:18:39 -06:00
|
|
|
*
|
|
|
|
* The DXGI Adapter and Output indices can be passed to `EnumAdapters` and
|
|
|
|
* `EnumOutputs` respectively to get the objects required to create a DX10 or
|
|
|
|
* DX11 device and swap chain.
|
|
|
|
*
|
2023-01-29 14:30:55 -07:00
|
|
|
* \param displayID the instance of the display to query
|
2021-03-21 12:18:39 -06:00
|
|
|
* \param adapterIndex a pointer to be filled in with the adapter index
|
|
|
|
* \param outputIndex a pointer to be filled in with the output index
|
|
|
|
* \returns SDL_TRUE on success or SDL_FALSE on failure; call SDL_GetError()
|
|
|
|
* for more information.
|
|
|
|
*
|
2022-11-22 15:40:14 -07:00
|
|
|
* \since This function is available since SDL 3.0.0.
|
2015-06-21 09:33:46 -06:00
|
|
|
*/
|
2023-01-29 14:30:55 -07:00
|
|
|
extern DECLSPEC SDL_bool SDLCALL SDL_DXGIGetOutputInfo(SDL_DisplayID displayID, int *adapterIndex, int *outputIndex);
|
2015-06-21 09:33:46 -06:00
|
|
|
|
2024-01-23 18:40:51 -07:00
|
|
|
#endif /* defined(SDL_PLATFORM_WIN32) || defined(SDL_PLATFORM_WINGDK) */
|
2015-06-21 09:33:46 -06:00
|
|
|
|
2023-11-07 15:38:19 -07:00
|
|
|
/*
|
|
|
|
* Platform specific functions for UNIX
|
|
|
|
*/
|
|
|
|
|
|
|
|
typedef union _XEvent XEvent;
|
|
|
|
typedef SDL_bool (SDLCALL *SDL_X11EventHook)(void *userdata, XEvent *xevent);
|
2023-11-09 18:11:23 -07:00
|
|
|
|
2023-11-07 15:38:19 -07:00
|
|
|
/**
|
|
|
|
* Set a callback for every X11 event
|
|
|
|
*
|
2023-11-09 18:11:23 -07:00
|
|
|
* The callback may modify the event, and should return SDL_TRUE if the event
|
|
|
|
* should continue to be processed, or SDL_FALSE to prevent further
|
|
|
|
* processing.
|
2023-11-07 15:38:19 -07:00
|
|
|
*
|
|
|
|
* \param callback The SDL_X11EventHook function to call.
|
|
|
|
* \param userdata a pointer to pass to every iteration of `callback`
|
|
|
|
*
|
|
|
|
* \since This function is available since SDL 3.0.0.
|
|
|
|
*/
|
|
|
|
extern DECLSPEC void SDLCALL SDL_SetX11EventHook(SDL_X11EventHook callback, void *userdata);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Platform specific functions for Linux
|
|
|
|
*/
|
2024-01-23 18:40:51 -07:00
|
|
|
#ifdef SDL_PLATFORM_LINUX
|
2018-04-23 20:18:52 -06:00
|
|
|
|
|
|
|
/**
|
2021-03-21 12:18:39 -06:00
|
|
|
* Sets the UNIX nice value for a thread.
|
|
|
|
*
|
|
|
|
* This uses setpriority() if possible, and RealtimeKit if available.
|
|
|
|
*
|
|
|
|
* \param threadID the Unix thread ID to change priority of.
|
|
|
|
* \param priority The new, Unix-specific, priority value.
|
|
|
|
* \returns 0 on success, or -1 on error.
|
2021-10-26 19:36:05 -06:00
|
|
|
*
|
2022-11-22 15:40:14 -07:00
|
|
|
* \since This function is available since SDL 3.0.0.
|
2018-04-23 20:18:52 -06:00
|
|
|
*/
|
|
|
|
extern DECLSPEC int SDLCALL SDL_LinuxSetThreadPriority(Sint64 threadID, int priority);
|
2021-11-02 14:56:14 -06:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets the priority (not nice level) and scheduling policy for a thread.
|
|
|
|
*
|
|
|
|
* This uses setpriority() if possible, and RealtimeKit if available.
|
|
|
|
*
|
|
|
|
* \param threadID The Unix thread ID to change priority of.
|
|
|
|
* \param sdlPriority The new SDL_ThreadPriority value.
|
2021-11-10 13:21:01 -07:00
|
|
|
* \param schedPolicy The new scheduling policy (SCHED_FIFO, SCHED_RR,
|
|
|
|
* SCHED_OTHER, etc...)
|
2023-02-12 02:09:42 -07:00
|
|
|
* \returns 0 on success or a negative error code on failure; call
|
|
|
|
* SDL_GetError() for more information.
|
2021-11-10 14:05:03 -07:00
|
|
|
*
|
2022-11-22 15:40:14 -07:00
|
|
|
* \since This function is available since SDL 3.0.0.
|
2021-11-02 14:56:14 -06:00
|
|
|
*/
|
|
|
|
extern DECLSPEC int SDLCALL SDL_LinuxSetThreadPriorityAndPolicy(Sint64 threadID, int sdlPriority, int schedPolicy);
|
2023-01-29 14:30:55 -07:00
|
|
|
|
2024-01-23 18:40:51 -07:00
|
|
|
#endif /* SDL_PLATFORM_LINUX */
|
2023-01-29 14:30:55 -07:00
|
|
|
|
2023-11-07 15:38:19 -07:00
|
|
|
/*
|
|
|
|
* Platform specific functions for iOS
|
|
|
|
*/
|
2024-01-23 18:40:51 -07:00
|
|
|
#ifdef SDL_PLATFORM_IOS
|
2015-06-21 09:33:46 -06:00
|
|
|
|
|
|
|
#define SDL_iOSSetAnimationCallback(window, interval, callback, callbackParam) SDL_iPhoneSetAnimationCallback(window, interval, callback, callbackParam)
|
2021-10-08 18:22:48 -06:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Use this function to set the animation callback on Apple iOS.
|
|
|
|
*
|
|
|
|
* The function prototype for `callback` is:
|
|
|
|
*
|
|
|
|
* ```c
|
|
|
|
* void callback(void* callbackParam);
|
|
|
|
* ```
|
|
|
|
*
|
|
|
|
* Where its parameter, `callbackParam`, is what was passed as `callbackParam`
|
|
|
|
* to SDL_iPhoneSetAnimationCallback().
|
|
|
|
*
|
|
|
|
* This function is only available on Apple iOS.
|
|
|
|
*
|
|
|
|
* For more information see:
|
2022-05-25 08:43:14 -06:00
|
|
|
* https://github.com/libsdl-org/SDL/blob/main/docs/README-ios.md
|
2021-10-08 18:22:48 -06:00
|
|
|
*
|
|
|
|
* This functions is also accessible using the macro
|
|
|
|
* SDL_iOSSetAnimationCallback() since SDL 2.0.4.
|
|
|
|
*
|
|
|
|
* \param window the window for which the animation callback should be set
|
|
|
|
* \param interval the number of frames after which **callback** will be
|
|
|
|
* called
|
|
|
|
* \param callback the function to call for every frame.
|
|
|
|
* \param callbackParam a pointer that is passed to `callback`.
|
|
|
|
* \returns 0 on success or a negative error code on failure; call
|
|
|
|
* SDL_GetError() for more information.
|
|
|
|
*
|
2022-11-22 15:40:14 -07:00
|
|
|
* \since This function is available since SDL 3.0.0.
|
2021-10-08 18:22:48 -06:00
|
|
|
*
|
|
|
|
* \sa SDL_iPhoneSetEventPump
|
|
|
|
*/
|
2022-05-18 15:12:05 -06:00
|
|
|
extern DECLSPEC int SDLCALL SDL_iPhoneSetAnimationCallback(SDL_Window * window, int interval, void (SDLCALL *callback)(void*), void *callbackParam);
|
2015-06-21 09:33:46 -06:00
|
|
|
|
|
|
|
#define SDL_iOSSetEventPump(enabled) SDL_iPhoneSetEventPump(enabled)
|
2021-10-08 18:22:48 -06:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Use this function to enable or disable the SDL event pump on Apple iOS.
|
|
|
|
*
|
|
|
|
* This function is only available on Apple iOS.
|
|
|
|
*
|
|
|
|
* This functions is also accessible using the macro SDL_iOSSetEventPump()
|
|
|
|
* since SDL 2.0.4.
|
|
|
|
*
|
|
|
|
* \param enabled SDL_TRUE to enable the event pump, SDL_FALSE to disable it
|
|
|
|
*
|
2022-11-22 15:40:14 -07:00
|
|
|
* \since This function is available since SDL 3.0.0.
|
2021-10-08 18:22:48 -06:00
|
|
|
*
|
|
|
|
* \sa SDL_iPhoneSetAnimationCallback
|
|
|
|
*/
|
2015-06-21 09:33:46 -06:00
|
|
|
extern DECLSPEC void SDLCALL SDL_iPhoneSetEventPump(SDL_bool enabled);
|
|
|
|
|
2024-01-23 18:40:51 -07:00
|
|
|
#endif /* SDL_PLATFORM_IOS */
|
2015-06-21 09:33:46 -06:00
|
|
|
|
|
|
|
|
2023-11-07 15:38:19 -07:00
|
|
|
/*
|
|
|
|
* Platform specific functions for Android
|
|
|
|
*/
|
2024-01-23 18:40:51 -07:00
|
|
|
#ifdef SDL_PLATFORM_ANDROID
|
2015-06-21 09:33:46 -06:00
|
|
|
|
|
|
|
/**
|
2021-03-21 12:18:39 -06:00
|
|
|
* Get the Android Java Native Interface Environment of the current thread.
|
|
|
|
*
|
|
|
|
* This is the JNIEnv one needs to access the Java virtual machine from native
|
|
|
|
* code, and is needed for many Android APIs to be usable from C.
|
|
|
|
*
|
|
|
|
* The prototype of the function in SDL's code actually declare a void* return
|
|
|
|
* type, even if the implementation returns a pointer to a JNIEnv. The
|
|
|
|
* rationale being that the SDL headers can avoid including jni.h.
|
|
|
|
*
|
|
|
|
* \returns a pointer to Java native interface object (JNIEnv) to which the
|
|
|
|
* current thread is attached, or 0 on error.
|
|
|
|
*
|
2022-11-22 15:40:14 -07:00
|
|
|
* \since This function is available since SDL 3.0.0.
|
2021-03-21 12:18:39 -06:00
|
|
|
*
|
|
|
|
* \sa SDL_AndroidGetActivity
|
2015-06-21 09:33:46 -06:00
|
|
|
*/
|
2016-12-02 03:25:12 -07:00
|
|
|
extern DECLSPEC void * SDLCALL SDL_AndroidGetJNIEnv(void);
|
2015-06-21 09:33:46 -06:00
|
|
|
|
|
|
|
/**
|
2021-03-21 12:18:39 -06:00
|
|
|
* Retrieve the Java instance of the Android activity class.
|
|
|
|
*
|
|
|
|
* The prototype of the function in SDL's code actually declares a void*
|
|
|
|
* return type, even if the implementation returns a jobject. The rationale
|
|
|
|
* being that the SDL headers can avoid including jni.h.
|
|
|
|
*
|
2021-07-14 15:07:04 -06:00
|
|
|
* The jobject returned by the function is a local reference and must be
|
|
|
|
* released by the caller. See the PushLocalFrame() and PopLocalFrame() or
|
2021-03-21 12:18:39 -06:00
|
|
|
* DeleteLocalRef() functions of the Java native interface:
|
|
|
|
*
|
|
|
|
* https://docs.oracle.com/javase/1.5.0/docs/guide/jni/spec/functions.html
|
|
|
|
*
|
|
|
|
* \returns the jobject representing the instance of the Activity class of the
|
|
|
|
* Android application, or NULL on error.
|
|
|
|
*
|
2022-11-22 15:40:14 -07:00
|
|
|
* \since This function is available since SDL 3.0.0.
|
2021-03-21 12:18:39 -06:00
|
|
|
*
|
|
|
|
* \sa SDL_AndroidGetJNIEnv
|
2015-06-21 09:33:46 -06:00
|
|
|
*/
|
2016-12-02 03:25:12 -07:00
|
|
|
extern DECLSPEC void * SDLCALL SDL_AndroidGetActivity(void);
|
2015-06-21 09:33:46 -06:00
|
|
|
|
2020-02-17 14:54:45 -07:00
|
|
|
/**
|
2021-03-21 12:18:39 -06:00
|
|
|
* Query Android API level of the current device.
|
|
|
|
*
|
2023-10-19 11:13:15 -06:00
|
|
|
* - API level 34: Android 14 (UPSIDE_DOWN_CAKE)
|
|
|
|
* - API level 33: Android 13 (TIRAMISU)
|
|
|
|
* - API level 32: Android 12L (S_V2)
|
|
|
|
* - API level 31: Android 12 (S)
|
|
|
|
* - API level 30: Android 11 (R)
|
|
|
|
* - API level 29: Android 10 (Q)
|
|
|
|
* - API level 28: Android 9 (P)
|
|
|
|
* - API level 27: Android 8.1 (O_MR1)
|
|
|
|
* - API level 26: Android 8.0 (O)
|
|
|
|
* - API level 25: Android 7.1 (N_MR1)
|
|
|
|
* - API level 24: Android 7.0 (N)
|
|
|
|
* - API level 23: Android 6.0 (M)
|
|
|
|
* - API level 22: Android 5.1 (LOLLIPOP_MR1)
|
|
|
|
* - API level 21: Android 5.0 (LOLLIPOP, L)
|
2023-10-19 11:12:34 -06:00
|
|
|
* - API level 20: Android 4.4W (KITKAT_WATCH)
|
2023-10-19 11:13:15 -06:00
|
|
|
* - API level 19: Android 4.4 (KITKAT)
|
|
|
|
* - API level 18: Android 4.3 (JELLY_BEAN_MR2)
|
|
|
|
* - API level 17: Android 4.2 (JELLY_BEAN_MR1)
|
|
|
|
* - API level 16: Android 4.1 (JELLY_BEAN)
|
2023-10-19 11:12:34 -06:00
|
|
|
* - API level 15: Android 4.0.3 (ICE_CREAM_SANDWICH_MR1)
|
2023-10-19 11:13:15 -06:00
|
|
|
* - API level 14: Android 4.0 (ICE_CREAM_SANDWICH)
|
|
|
|
* - API level 13: Android 3.2 (HONEYCOMB_MR2)
|
|
|
|
* - API level 12: Android 3.1 (HONEYCOMB_MR1)
|
|
|
|
* - API level 11: Android 3.0 (HONEYCOMB)
|
2023-10-19 11:12:34 -06:00
|
|
|
* - API level 10: Android 2.3.3 (GINGERBREAD_MR1)
|
2021-03-21 12:18:39 -06:00
|
|
|
*
|
2021-07-14 12:15:30 -06:00
|
|
|
* \returns the Android API level.
|
2021-10-26 19:36:05 -06:00
|
|
|
*
|
2022-11-22 15:40:14 -07:00
|
|
|
* \since This function is available since SDL 3.0.0.
|
2020-02-17 14:54:45 -07:00
|
|
|
*/
|
|
|
|
extern DECLSPEC int SDLCALL SDL_GetAndroidSDKVersion(void);
|
|
|
|
|
2018-02-06 16:03:35 -07:00
|
|
|
/**
|
2021-03-21 12:18:39 -06:00
|
|
|
* Query if the application is running on Android TV.
|
|
|
|
*
|
|
|
|
* \returns SDL_TRUE if this is Android TV, SDL_FALSE otherwise.
|
2021-10-26 19:36:05 -06:00
|
|
|
*
|
2022-11-22 15:40:14 -07:00
|
|
|
* \since This function is available since SDL 3.0.0.
|
2018-02-06 16:03:35 -07:00
|
|
|
*/
|
|
|
|
extern DECLSPEC SDL_bool SDLCALL SDL_IsAndroidTV(void);
|
|
|
|
|
2018-06-05 13:46:13 -06:00
|
|
|
/**
|
2021-03-21 12:18:39 -06:00
|
|
|
* Query if the application is running on a Chromebook.
|
|
|
|
*
|
|
|
|
* \returns SDL_TRUE if this is a Chromebook, SDL_FALSE otherwise.
|
2021-10-26 19:36:05 -06:00
|
|
|
*
|
2022-11-22 15:40:14 -07:00
|
|
|
* \since This function is available since SDL 3.0.0.
|
2018-06-05 13:46:13 -06:00
|
|
|
*/
|
|
|
|
extern DECLSPEC SDL_bool SDLCALL SDL_IsChromebook(void);
|
|
|
|
|
2018-06-18 14:14:02 -06:00
|
|
|
/**
|
2021-03-21 12:18:39 -06:00
|
|
|
* Query if the application is running on a Samsung DeX docking station.
|
|
|
|
*
|
|
|
|
* \returns SDL_TRUE if this is a DeX docking station, SDL_FALSE otherwise.
|
2021-10-26 19:36:05 -06:00
|
|
|
*
|
2022-11-22 15:40:14 -07:00
|
|
|
* \since This function is available since SDL 3.0.0.
|
2018-06-18 14:14:02 -06:00
|
|
|
*/
|
|
|
|
extern DECLSPEC SDL_bool SDLCALL SDL_IsDeXMode(void);
|
|
|
|
|
2018-07-12 14:28:13 -06:00
|
|
|
/**
|
2021-03-21 12:18:39 -06:00
|
|
|
* Trigger the Android system back button behavior.
|
2021-10-26 19:36:05 -06:00
|
|
|
*
|
2022-11-22 15:40:14 -07:00
|
|
|
* \since This function is available since SDL 3.0.0.
|
2018-07-12 14:28:13 -06:00
|
|
|
*/
|
|
|
|
extern DECLSPEC void SDLCALL SDL_AndroidBackButton(void);
|
|
|
|
|
2015-06-21 09:33:46 -06:00
|
|
|
/**
|
|
|
|
See the official Android developer guide for more information:
|
|
|
|
http://developer.android.com/guide/topics/data/data-storage.html
|
|
|
|
*/
|
|
|
|
#define SDL_ANDROID_EXTERNAL_STORAGE_READ 0x01
|
|
|
|
#define SDL_ANDROID_EXTERNAL_STORAGE_WRITE 0x02
|
|
|
|
|
|
|
|
/**
|
2021-03-21 12:18:39 -06:00
|
|
|
* Get the path used for internal storage for this application.
|
|
|
|
*
|
|
|
|
* This path is unique to your application and cannot be written to by other
|
|
|
|
* applications.
|
|
|
|
*
|
|
|
|
* Your internal storage path is typically:
|
|
|
|
* `/data/data/your.app.package/files`.
|
|
|
|
*
|
|
|
|
* \returns the path used for internal storage or NULL on failure; call
|
|
|
|
* SDL_GetError() for more information.
|
|
|
|
*
|
2022-11-22 15:40:14 -07:00
|
|
|
* \since This function is available since SDL 3.0.0.
|
2021-03-21 12:18:39 -06:00
|
|
|
*
|
|
|
|
* \sa SDL_AndroidGetExternalStorageState
|
2015-06-21 09:33:46 -06:00
|
|
|
*/
|
2016-12-02 03:25:12 -07:00
|
|
|
extern DECLSPEC const char * SDLCALL SDL_AndroidGetInternalStoragePath(void);
|
2015-06-21 09:33:46 -06:00
|
|
|
|
|
|
|
/**
|
2021-03-21 12:18:39 -06:00
|
|
|
* Get the current state of external storage.
|
|
|
|
*
|
|
|
|
* The current state of external storage, a bitmask of these values:
|
|
|
|
* `SDL_ANDROID_EXTERNAL_STORAGE_READ`, `SDL_ANDROID_EXTERNAL_STORAGE_WRITE`.
|
|
|
|
*
|
|
|
|
* If external storage is currently unavailable, this will return 0.
|
|
|
|
*
|
2023-02-24 09:49:41 -07:00
|
|
|
* \param state filled with the current state of external storage. 0 if
|
|
|
|
* external storage is currently unavailable.
|
2023-02-09 12:44:46 -07:00
|
|
|
* \returns 0 on success or a negative error code on failure; call
|
|
|
|
* SDL_GetError() for more information.
|
2021-03-21 12:18:39 -06:00
|
|
|
*
|
2022-11-22 15:40:14 -07:00
|
|
|
* \since This function is available since SDL 3.0.0.
|
2021-03-21 12:18:39 -06:00
|
|
|
*
|
|
|
|
* \sa SDL_AndroidGetExternalStoragePath
|
|
|
|
*/
|
2023-02-09 12:44:46 -07:00
|
|
|
extern DECLSPEC int SDLCALL SDL_AndroidGetExternalStorageState(Uint32 *state);
|
2015-06-21 09:33:46 -06:00
|
|
|
|
|
|
|
/**
|
2021-03-21 12:18:39 -06:00
|
|
|
* Get the path used for external storage for this application.
|
|
|
|
*
|
|
|
|
* This path is unique to your application, but is public and can be written
|
|
|
|
* to by other applications.
|
|
|
|
*
|
|
|
|
* Your external storage path is typically:
|
|
|
|
* `/storage/sdcard0/Android/data/your.app.package/files`.
|
|
|
|
*
|
|
|
|
* \returns the path used for external storage for this application on success
|
|
|
|
* or NULL on failure; call SDL_GetError() for more information.
|
|
|
|
*
|
2022-11-22 15:40:14 -07:00
|
|
|
* \since This function is available since SDL 3.0.0.
|
2021-03-21 12:18:39 -06:00
|
|
|
*
|
|
|
|
* \sa SDL_AndroidGetExternalStorageState
|
2015-06-21 09:33:46 -06:00
|
|
|
*/
|
2016-12-02 03:25:12 -07:00
|
|
|
extern DECLSPEC const char * SDLCALL SDL_AndroidGetExternalStoragePath(void);
|
2015-06-21 09:33:46 -06:00
|
|
|
|
2020-09-02 11:38:03 -06:00
|
|
|
/**
|
2021-03-21 12:18:39 -06:00
|
|
|
* Request permissions at runtime.
|
|
|
|
*
|
2024-02-12 13:26:09 -07:00
|
|
|
* You do not need to call this for built-in functionality of SDL; recording
|
|
|
|
* from a microphone or reading images from a camera, using standard SDL
|
|
|
|
* APIs, will manage permission requests for you.
|
|
|
|
*
|
2021-07-14 15:07:04 -06:00
|
|
|
* This blocks the calling thread until the permission is granted or denied.
|
2024-02-12 13:26:09 -07:00
|
|
|
* if the app already has the requested permission, this returns immediately,
|
|
|
|
* but may block indefinitely until the user responds to the system's
|
|
|
|
* permission request dialog.
|
|
|
|
*
|
|
|
|
* If possible, you should _not_ use this function. You should use
|
|
|
|
* SDL_AndroidRequestPermissionAsync and deal with the response in a callback
|
|
|
|
* at a later time, and possibly in a different thread.
|
2021-03-21 12:18:39 -06:00
|
|
|
*
|
|
|
|
* \param permission The permission to request.
|
|
|
|
* \returns SDL_TRUE if the permission was granted, SDL_FALSE otherwise.
|
2021-10-26 19:36:05 -06:00
|
|
|
*
|
2022-11-22 15:40:14 -07:00
|
|
|
* \since This function is available since SDL 3.0.0.
|
2020-09-02 11:38:03 -06:00
|
|
|
*/
|
|
|
|
extern DECLSPEC SDL_bool SDLCALL SDL_AndroidRequestPermission(const char *permission);
|
|
|
|
|
2024-02-12 13:26:09 -07:00
|
|
|
|
|
|
|
typedef void (SDLCALL *SDL_AndroidRequestPermissionCallback)(void *userdata, const char *permission, SDL_bool granted);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Request permissions at runtime, asynchronously.
|
|
|
|
*
|
|
|
|
* You do not need to call this for built-in functionality of SDL; recording
|
|
|
|
* from a microphone or reading images from a camera, using standard SDL
|
|
|
|
* APIs, will manage permission requests for you.
|
|
|
|
*
|
|
|
|
* This function never blocks. Instead, the app-supplied callback will be
|
|
|
|
* called when a decision has been made. This callback may happen on a
|
|
|
|
* different thread, and possibly much later, as it might wait on a user to
|
|
|
|
* respond to a system dialog. If permission has already been granted for
|
|
|
|
* a specific entitlement, the callback will still fire, probably on the
|
|
|
|
* current thread and before this function returns.
|
|
|
|
*
|
|
|
|
* If the request submission fails, this function returns -1 and the
|
|
|
|
* callback will NOT be called, but this should only happen in
|
|
|
|
* catastrophic conditions, like memory running out. Normally there will
|
|
|
|
* be a yes or no to the request through the callback.
|
|
|
|
*
|
|
|
|
* \param permission The permission to request.
|
|
|
|
* \param cb The callback to trigger when the request has a response.
|
|
|
|
* \param userdata An app-controlled pointer that is passed to the callback.
|
|
|
|
* \returns zero if the request was submitted, -1 if there was an error
|
|
|
|
* submitting. The result of the request is only ever reported
|
|
|
|
* through the callback, not this return value.
|
|
|
|
*
|
|
|
|
* \since This function is available since SDL 3.0.0.
|
|
|
|
*/
|
|
|
|
extern DECLSPEC int SDLCALL SDL_AndroidRequestPermissionAsync(const char *permission, SDL_AndroidRequestPermissionCallback cb, void *userdata);
|
|
|
|
|
2021-02-19 02:54:57 -07:00
|
|
|
/**
|
2021-03-21 12:18:39 -06:00
|
|
|
* Shows an Android toast notification.
|
|
|
|
*
|
|
|
|
* Toasts are a sort of lightweight notification that are unique to Android.
|
|
|
|
*
|
|
|
|
* https://developer.android.com/guide/topics/ui/notifiers/toasts
|
|
|
|
*
|
|
|
|
* Shows toast in UI thread.
|
|
|
|
*
|
|
|
|
* For the `gravity` parameter, choose a value from here, or -1 if you don't
|
|
|
|
* have a preference:
|
|
|
|
*
|
|
|
|
* https://developer.android.com/reference/android/view/Gravity
|
|
|
|
*
|
|
|
|
* \param message text message to be shown
|
|
|
|
* \param duration 0=short, 1=long
|
|
|
|
* \param gravity where the notification should appear on the screen.
|
|
|
|
* \param xoffset set this parameter only when gravity >=0
|
|
|
|
* \param yoffset set this parameter only when gravity >=0
|
2023-02-12 02:09:42 -07:00
|
|
|
* \returns 0 on success or a negative error code on failure; call
|
|
|
|
* SDL_GetError() for more information.
|
2021-09-17 13:19:06 -06:00
|
|
|
*
|
2022-11-22 15:40:14 -07:00
|
|
|
* \since This function is available since SDL 3.0.0.
|
2021-03-21 12:18:39 -06:00
|
|
|
*/
|
|
|
|
extern DECLSPEC int SDLCALL SDL_AndroidShowToast(const char* message, int duration, int gravity, int xoffset, int yoffset);
|
2021-02-19 02:54:57 -07:00
|
|
|
|
2022-02-01 03:30:43 -07:00
|
|
|
/**
|
2022-02-01 03:37:05 -07:00
|
|
|
* Send a user command to SDLActivity.
|
|
|
|
*
|
|
|
|
* Override "boolean onUnhandledMessage(Message msg)" to handle the message.
|
2022-02-01 03:30:43 -07:00
|
|
|
*
|
|
|
|
* \param command user command that must be greater or equal to 0x8000
|
|
|
|
* \param param user parameter
|
2023-02-10 14:26:35 -07:00
|
|
|
* \returns 0 on success or a negative error code on failure; call
|
|
|
|
* SDL_GetError() for more information.
|
2022-02-01 03:33:04 -07:00
|
|
|
*
|
2022-11-22 15:40:14 -07:00
|
|
|
* \since This function is available since SDL 3.0.0.
|
2022-02-01 03:30:43 -07:00
|
|
|
*/
|
|
|
|
extern DECLSPEC int SDLCALL SDL_AndroidSendMessage(Uint32 command, int param);
|
|
|
|
|
2024-01-23 18:40:51 -07:00
|
|
|
#endif /* SDL_PLATFORM_ANDROID */
|
2015-06-21 09:33:46 -06:00
|
|
|
|
2023-11-07 15:38:19 -07:00
|
|
|
/*
|
|
|
|
* Platform specific functions for WinRT
|
|
|
|
*/
|
2024-01-23 18:40:51 -07:00
|
|
|
#ifdef SDL_PLATFORM_WINRT
|
2022-11-23 11:41:43 -07:00
|
|
|
|
|
|
|
/**
|
2023-11-06 08:26:06 -07:00
|
|
|
* WinRT / Windows Phone path types
|
2022-11-23 11:41:43 -07:00
|
|
|
*/
|
|
|
|
typedef enum
|
|
|
|
{
|
2023-11-06 08:26:06 -07:00
|
|
|
/** The installed app's root directory.
|
2022-11-23 11:41:43 -07:00
|
|
|
Files here are likely to be read-only. */
|
|
|
|
SDL_WINRT_PATH_INSTALLED_LOCATION,
|
|
|
|
|
2023-11-06 08:26:06 -07:00
|
|
|
/** The app's local data store. Files may be written here */
|
2022-11-23 11:41:43 -07:00
|
|
|
SDL_WINRT_PATH_LOCAL_FOLDER,
|
|
|
|
|
2023-11-06 08:26:06 -07:00
|
|
|
/** The app's roaming data store. Unsupported on Windows Phone.
|
2022-11-23 11:41:43 -07:00
|
|
|
Files written here may be copied to other machines via a network
|
|
|
|
connection.
|
|
|
|
*/
|
|
|
|
SDL_WINRT_PATH_ROAMING_FOLDER,
|
|
|
|
|
2023-11-06 08:26:06 -07:00
|
|
|
/** The app's temporary data store. Unsupported on Windows Phone.
|
2022-11-23 11:41:43 -07:00
|
|
|
Files written here may be deleted at any time. */
|
|
|
|
SDL_WINRT_PATH_TEMP_FOLDER
|
|
|
|
} SDL_WinRT_Path;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2023-11-06 08:26:06 -07:00
|
|
|
* WinRT Device Family
|
2022-11-23 11:41:43 -07:00
|
|
|
*/
|
|
|
|
typedef enum
|
|
|
|
{
|
2023-11-06 08:26:06 -07:00
|
|
|
/** Unknown family */
|
2022-11-23 11:41:43 -07:00
|
|
|
SDL_WINRT_DEVICEFAMILY_UNKNOWN,
|
|
|
|
|
2023-11-06 08:26:06 -07:00
|
|
|
/** Desktop family*/
|
2022-11-23 11:41:43 -07:00
|
|
|
SDL_WINRT_DEVICEFAMILY_DESKTOP,
|
|
|
|
|
2023-11-06 08:26:06 -07:00
|
|
|
/** Mobile family (for example smartphone) */
|
2022-11-23 11:41:43 -07:00
|
|
|
SDL_WINRT_DEVICEFAMILY_MOBILE,
|
|
|
|
|
2023-11-06 08:26:06 -07:00
|
|
|
/** XBox family */
|
2022-11-23 11:41:43 -07:00
|
|
|
SDL_WINRT_DEVICEFAMILY_XBOX,
|
|
|
|
} SDL_WinRT_DeviceFamily;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Retrieve a WinRT defined path on the local file system.
|
|
|
|
*
|
|
|
|
* Not all paths are available on all versions of Windows. This is especially
|
|
|
|
* true on Windows Phone. Check the documentation for the given SDL_WinRT_Path
|
|
|
|
* for more information on which path types are supported where.
|
|
|
|
*
|
|
|
|
* Documentation on most app-specific path types on WinRT can be found on
|
|
|
|
* MSDN, at the URL:
|
|
|
|
*
|
|
|
|
* https://msdn.microsoft.com/en-us/library/windows/apps/hh464917.aspx
|
|
|
|
*
|
|
|
|
* \param pathType the type of path to retrieve, one of SDL_WinRT_Path
|
|
|
|
* \returns a UCS-2 string (16-bit, wide-char) containing the path, or NULL if
|
|
|
|
* the path is not available for any reason; call SDL_GetError() for
|
|
|
|
* more information.
|
|
|
|
*
|
|
|
|
* \since This function is available since SDL 2.0.3.
|
|
|
|
*
|
|
|
|
* \sa SDL_WinRTGetFSPathUTF8
|
|
|
|
*/
|
|
|
|
extern DECLSPEC const wchar_t * SDLCALL SDL_WinRTGetFSPathUNICODE(SDL_WinRT_Path pathType);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Retrieve a WinRT defined path on the local file system.
|
|
|
|
*
|
|
|
|
* Not all paths are available on all versions of Windows. This is especially
|
|
|
|
* true on Windows Phone. Check the documentation for the given SDL_WinRT_Path
|
|
|
|
* for more information on which path types are supported where.
|
|
|
|
*
|
|
|
|
* Documentation on most app-specific path types on WinRT can be found on
|
|
|
|
* MSDN, at the URL:
|
|
|
|
*
|
|
|
|
* https://msdn.microsoft.com/en-us/library/windows/apps/hh464917.aspx
|
|
|
|
*
|
|
|
|
* \param pathType the type of path to retrieve, one of SDL_WinRT_Path
|
|
|
|
* \returns a UTF-8 string (8-bit, multi-byte) containing the path, or NULL if
|
|
|
|
* the path is not available for any reason; call SDL_GetError() for
|
|
|
|
* more information.
|
|
|
|
*
|
|
|
|
* \since This function is available since SDL 2.0.3.
|
|
|
|
*
|
|
|
|
* \sa SDL_WinRTGetFSPathUNICODE
|
|
|
|
*/
|
|
|
|
extern DECLSPEC const char * SDLCALL SDL_WinRTGetFSPathUTF8(SDL_WinRT_Path pathType);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Detects the device family of WinRT platform at runtime.
|
|
|
|
*
|
|
|
|
* \returns a value from the SDL_WinRT_DeviceFamily enum.
|
|
|
|
*
|
2022-11-23 11:43:14 -07:00
|
|
|
* \since This function is available since SDL 3.0.0.
|
2022-11-23 11:41:43 -07:00
|
|
|
*/
|
|
|
|
extern DECLSPEC SDL_WinRT_DeviceFamily SDLCALL SDL_WinRTGetDeviceFamily();
|
|
|
|
|
2024-01-23 18:40:51 -07:00
|
|
|
#endif /* SDL_PLATFORM_WINRT */
|
2022-11-23 11:41:43 -07:00
|
|
|
|
2018-08-21 21:03:54 -06:00
|
|
|
/**
|
2021-03-21 12:18:39 -06:00
|
|
|
* Query if the current device is a tablet.
|
|
|
|
*
|
|
|
|
* If SDL can't determine this, it will return SDL_FALSE.
|
|
|
|
*
|
|
|
|
* \returns SDL_TRUE if the device is a tablet, SDL_FALSE otherwise.
|
2021-10-26 19:36:05 -06:00
|
|
|
*
|
2022-11-22 15:40:14 -07:00
|
|
|
* \since This function is available since SDL 3.0.0.
|
2018-08-21 21:03:54 -06:00
|
|
|
*/
|
|
|
|
extern DECLSPEC SDL_bool SDLCALL SDL_IsTablet(void);
|
|
|
|
|
2023-09-15 07:49:43 -06:00
|
|
|
/* Functions used by iOS app delegates to notify SDL about state changes.
|
|
|
|
*
|
|
|
|
* These functions allow iOS apps that have their own event handling to hook
|
|
|
|
* into SDL to generate SDL events. These map directly to iOS-specific
|
|
|
|
* events, but since they don't do anything iOS-specific internally, they
|
|
|
|
* are available on all platforms, in case they might be useful for some
|
|
|
|
* specific paradigm. Most apps do not need to use these directly; SDL's
|
|
|
|
* internal event code will handle all this for windows created by
|
|
|
|
* SDL_CreateWindow!
|
|
|
|
*/
|
2023-02-12 12:39:22 -07:00
|
|
|
|
|
|
|
/*
|
|
|
|
* \since This function is available since SDL 3.0.0.
|
|
|
|
*/
|
2020-01-30 15:51:33 -07:00
|
|
|
extern DECLSPEC void SDLCALL SDL_OnApplicationWillTerminate(void);
|
2023-02-12 12:39:22 -07:00
|
|
|
|
|
|
|
/*
|
|
|
|
* \since This function is available since SDL 3.0.0.
|
|
|
|
*/
|
2020-01-30 15:51:33 -07:00
|
|
|
extern DECLSPEC void SDLCALL SDL_OnApplicationDidReceiveMemoryWarning(void);
|
2023-02-12 12:39:22 -07:00
|
|
|
|
|
|
|
/*
|
|
|
|
* \since This function is available since SDL 3.0.0.
|
|
|
|
*/
|
2020-01-30 15:51:33 -07:00
|
|
|
extern DECLSPEC void SDLCALL SDL_OnApplicationWillResignActive(void);
|
2023-02-12 12:39:22 -07:00
|
|
|
|
|
|
|
/*
|
|
|
|
* \since This function is available since SDL 3.0.0.
|
|
|
|
*/
|
2020-01-30 15:51:33 -07:00
|
|
|
extern DECLSPEC void SDLCALL SDL_OnApplicationDidEnterBackground(void);
|
2023-02-12 12:39:22 -07:00
|
|
|
|
|
|
|
/*
|
|
|
|
* \since This function is available since SDL 3.0.0.
|
|
|
|
*/
|
2020-01-30 15:51:33 -07:00
|
|
|
extern DECLSPEC void SDLCALL SDL_OnApplicationWillEnterForeground(void);
|
2023-02-12 12:39:22 -07:00
|
|
|
|
|
|
|
/*
|
|
|
|
* \since This function is available since SDL 3.0.0.
|
|
|
|
*/
|
2020-01-30 15:51:33 -07:00
|
|
|
extern DECLSPEC void SDLCALL SDL_OnApplicationDidBecomeActive(void);
|
2023-02-12 12:39:22 -07:00
|
|
|
|
2024-01-23 18:40:51 -07:00
|
|
|
#ifdef SDL_PLATFORM_IOS
|
2023-02-12 12:39:22 -07:00
|
|
|
/*
|
|
|
|
* \since This function is available since SDL 3.0.0.
|
|
|
|
*/
|
2020-01-30 15:51:33 -07:00
|
|
|
extern DECLSPEC void SDLCALL SDL_OnApplicationDidChangeStatusBarOrientation(void);
|
|
|
|
#endif
|
|
|
|
|
2023-11-07 15:38:19 -07:00
|
|
|
/*
|
|
|
|
* Functions used only by GDK
|
|
|
|
*/
|
2024-01-23 18:40:51 -07:00
|
|
|
#ifdef SDL_PLATFORM_GDK
|
2023-08-25 08:39:39 -06:00
|
|
|
typedef struct XTaskQueueObject *XTaskQueueHandle;
|
|
|
|
typedef struct XUser *XUserHandle;
|
2022-06-27 11:19:39 -06:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets a reference to the global async task queue handle for GDK,
|
|
|
|
* initializing if needed.
|
2022-06-27 11:20:12 -06:00
|
|
|
*
|
|
|
|
* Once you are done with the task queue, you should call
|
|
|
|
* XTaskQueueCloseHandle to reduce the reference count to avoid a resource
|
|
|
|
* leak.
|
|
|
|
*
|
2022-06-27 11:19:39 -06:00
|
|
|
* \param outTaskQueue a pointer to be filled in with task queue handle.
|
2023-02-12 02:09:42 -07:00
|
|
|
* \returns 0 on success or a negative error code on failure; call
|
|
|
|
* SDL_GetError() for more information.
|
2022-06-27 11:20:12 -06:00
|
|
|
*
|
2022-11-22 15:40:14 -07:00
|
|
|
* \since This function is available since SDL 3.0.0.
|
2022-06-27 11:19:39 -06:00
|
|
|
*/
|
|
|
|
extern DECLSPEC int SDLCALL SDL_GDKGetTaskQueue(XTaskQueueHandle * outTaskQueue);
|
|
|
|
|
2023-08-25 08:39:39 -06:00
|
|
|
/**
|
|
|
|
* Gets a reference to the default user handle for GDK.
|
|
|
|
*
|
|
|
|
* This is effectively a synchronous version of XUserAddAsync, which always
|
|
|
|
* prefers the default user and allows a sign-in UI.
|
|
|
|
*
|
2023-08-25 08:42:25 -06:00
|
|
|
* \param outUserHandle a pointer to be filled in with the default user
|
|
|
|
* handle.
|
2023-08-25 08:39:39 -06:00
|
|
|
* \returns 0 if success, -1 if any error occurs.
|
|
|
|
*
|
|
|
|
* \since This function is available since SDL 2.28.0.
|
|
|
|
*/
|
|
|
|
extern DECLSPEC int SDLCALL SDL_GDKGetDefaultUser(XUserHandle * outUserHandle);
|
|
|
|
|
2022-06-27 11:19:39 -06:00
|
|
|
#endif
|
|
|
|
|
2015-06-21 09:33:46 -06:00
|
|
|
/* Ends C function definitions when using C++ */
|
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|
2022-12-22 09:38:59 -07:00
|
|
|
#include <SDL3/SDL_close_code.h>
|
2015-06-21 09:33:46 -06:00
|
|
|
|
2016-11-20 22:34:54 -07:00
|
|
|
#endif /* SDL_system_h_ */
|