1 /+ 2 + Copyright 2022 – 2023 Aya Partridge 3 + Copyright 2018 - 2022 Michael D. Parker 4 + Distributed under the Boost Software License, Version 1.0. 5 + (See accompanying file LICENSE_1_0.txt or copy at 6 + http://www.boost.org/LICENSE_1_0.txt) 7 +/ 8 module sdl.system; 9 10 import bindbc.sdl.config; 11 import bindbc.sdl.codegen; 12 13 import sdl.render: SDL_Renderer; 14 import sdl.stdinc: SDL_bool; 15 16 version(Windows) version = Win32_GDK; 17 version(WinGDK) version = Win32_GDK; 18 19 version(Win32_GDK){ 20 static if(sdlSupport >= SDLSupport.v2_0_1): 21 struct IDirect3DDevice9; 22 23 static if(sdlSupport >= SDLSupport.v2_0_4): 24 alias SDL_WindowsMessageHook = extern(C) void function(void* userdata, void* hWnd, uint message, ulong wParam, long lParam) nothrow; 25 26 static if(sdlSupport >= SDLSupport.v2_0_16): 27 struct ID3D11Device; 28 29 static if(sdlSupport >= SDLSupport.v2_24): 30 struct ID3D12Device; 31 } 32 version(Android){ 33 enum: int{ 34 SDL_ANDROID_EXTERNAL_STORAGE_READ = 0x01, 35 SDL_ANDROID_EXTERNAL_STORAGE_WRITE = 0x02, 36 } 37 } 38 version(WinRT){ 39 static if(sdlSupport >= SDLSupport.v2_0_3): 40 alias SDL_WinRT_Path = int; 41 enum: SDL_WinRT_Path{ 42 SDL_WINRT_PATH_INSTALLED_LOCATION, 43 SDL_WINRT_PATH_LOCAL_FOLDER, 44 SDL_WINRT_PATH_ROAMING_FOLDER, 45 SDL_WINRT_PATH_TEMP_FOLDER, 46 } 47 48 static if(sdlSupport >= SDLSupport.v2_0_8): 49 alias SDL_WinRT_DeviceFamily = int; 50 enum: SDL_WinRT_DeviceFamily{ 51 SDL_WINRT_DEVICEFAMILY_UNKNOWN, 52 SDL_WINRT_DEVICEFAMILY_DESKTOP, 53 SDL_WINRT_DEVICEFAMILY_MOBILE, 54 SDL_WINRT_DEVICEFAMILY_XBOX, 55 } 56 } 57 version(WinGDK){ 58 static if(sdlSupport >= SDLSupport.v2_24): 59 private struct XTaskQueueObject; 60 alias XTaskQueueHandle = XTaskQueueObject*; 61 } 62 63 mixin(joinFnBinds((){ 64 string[][] ret; 65 static if(sdlSupport >= SDLSupport.v2_0_9){ 66 ret ~= makeFnBinds([ 67 [q{SDL_bool}, q{SDL_IsTablet}, q{}], 68 ]); 69 } 70 static if(sdlSupport >= SDLSupport.v2_0_12){ 71 ret ~= makeFnBinds([ 72 [q{void}, q{SDL_OnApplicationWillTerminate}, q{}], 73 [q{void}, q{SDL_OnApplicationDidReceiveMemoryWarning}, q{}], 74 [q{void}, q{SDL_OnApplicationWillResignActive}, q{}], 75 [q{void}, q{SDL_OnApplicationDidEnterBackground}, q{}], 76 [q{void}, q{SDL_OnApplicationWillEnterForeground}, q{}], 77 [q{void}, q{SDL_OnApplicationDidBecomeActive}, q{}], 78 ]); 79 } 80 version(Win32_GDK){ 81 static if(sdlSupport >= SDLSupport.v2_0_1){ 82 ret ~= makeFnBinds([ 83 [q{int}, q{SDL_Direct3D9GetAdapterIndex}, q{int displayIndex}], 84 [q{IDirect3DDevice9*}, q{SDL_RenderGetD3D9Device}, q{SDL_Renderer* renderer}], 85 ]); 86 } 87 static if(sdlSupport >= SDLSupport.v2_0_2){ 88 ret ~= makeFnBinds([ 89 [q{SDL_bool}, q{SDL_DXGIGetOutputInfo}, q{int displayIndex, int* adapterIndex, int* outputIndex}], 90 ]); 91 } 92 static if(sdlSupport >= SDLSupport.v2_0_4){ 93 ret ~= makeFnBinds([ 94 [q{void}, q{SDL_SetWindowsMessageHook}, q{SDL_WindowsMessageHook callback, void* userdata}], 95 ]); 96 } 97 static if(sdlSupport >= SDLSupport.v2_0_16){ 98 ret ~= makeFnBinds([ 99 [q{void}, q{SDL_RenderGetD3D11Device}, q{SDL_Renderer* renderer}], 100 ]); 101 } 102 } 103 version(linux){ 104 static if(sdlSupport >= SDLSupport.v2_0_9){ 105 ret ~= makeFnBinds([ 106 [q{int}, q{SDL_LinuxSetThreadPriority}, q{long threadID, int priority}], 107 ]); 108 } 109 static if(sdlSupport >= SDLSupport.v2_0_18){ 110 ret ~= makeFnBinds([ 111 [q{int}, q{SDL_LinuxSetThreadPriorityAndPolicy}, q{long threadID, int sdlPriority, int schedPolicy}], 112 ]); 113 } 114 } 115 version(iOS){ 116 ret ~= makeFnBinds([ 117 [q{int}, q{SDL_iPhoneSetAnimationCallback}, q{SDL_Window* window, int interval, void function(void*) callback, void* callbackParam}], 118 [q{void}, q{SDL_iPhoneSetEventPump}, q{SDL_bool enabled}], 119 ]); 120 static if(sdlSupport >= SDLSupport.v2_0_12){ 121 ret ~= makeFnBinds([ 122 [q{void}, q{SDL_OnApplicationDidChangeStatusBarOrientation}, q{}], 123 ]); 124 } 125 } 126 version(Android){ 127 ret ~= makeFnBinds([ 128 [q{void*}, q{SDL_AndroidGetJNIEnv}, q{}], 129 [q{void*}, q{SDL_AndroidGetActivity}, q{}], 130 [q{const(char)*}, q{SDL_AndroidGetInternalStoragePath}, q{}], 131 [q{int}, q{SDL_AndroidGetExternalStorageState}, q{}], 132 [q{const(char)*}, q{SDL_AndroidGetExternalStoragePath}, q{}], 133 ]); 134 static if(sdlSupport >= SDLSupport.v2_0_8){ 135 ret ~= makeFnBinds([ 136 [q{SDL_bool}, q{SDL_IsAndroidTV}, q{}], 137 ]); 138 } 139 static if(sdlSupport >= SDLSupport.v2_0_9){ 140 ret ~= makeFnBinds([ 141 [q{SDL_bool}, q{SDL_IsChromebook}, q{}], 142 [q{SDL_bool}, q{SDL_IsDeXMode}, q{}], 143 [q{void}, q{SDL_AndroidBackButton}, q{}], 144 ]); 145 } 146 static if(sdlSupport >= SDLSupport.v2_0_12){ 147 ret ~= makeFnBinds([ 148 [q{int}, q{SDL_GetAndroidSDKVersion}, q{}], 149 ]); 150 } 151 static if(sdlSupport >= SDLSupport.v2_0_14){ 152 ret ~= makeFnBinds([ 153 [q{SDL_bool}, q{SDL_AndroidRequestPermission}, q{const(char)* permission}], 154 ]); 155 } 156 static if(sdlSupport >= SDLSupport.v2_0_16){ 157 ret ~= makeFnBinds([ 158 [q{int}, q{SDL_AndroidShowToast}, q{const(char)* message, int duration, int gravity, int xoffset, int yoffset}], 159 ]); 160 } 161 static if(sdlSupport >= SDLSupport.v2_0_22){ 162 ret ~= makeFnBinds([ 163 [q{int}, q{SDL_AndroidSendMessage}, q{uint command, int param}], 164 ]); 165 } 166 } 167 version(WinRT){ 168 static if(sdlSupport >= SDLSupport.v2_0_3){ 169 ret ~= makeFnBinds([ 170 [q{wchar_t*}, q{SDL_WinRTGetFSPathUNICODE}, q{SDL_WinRT_Path pathType}], 171 [q{const(char)*}, q{SDL_WinRTGetFSPathUTF8}, q{SDL_WinRT_Path pathType}], 172 ]); 173 } 174 static if(sdlSupport >= SDLSupport.v2_0_8){ 175 ret ~= makeFnBinds([ 176 [q{SDL_WinRT_DeviceFamily}, q{SDL_WinRTGetDeviceFamily}, q{}], 177 ]); 178 } 179 } 180 version(WinGDK){ 181 static if(sdlSupport >= SDLSupport.v2_24){ 182 ret ~= makeFnBinds([ 183 [q{int}, q{SDL_GDKGetTaskQueue}, q{XTaskQueueHandle* outTaskQueue}], 184 ]); 185 } 186 } 187 return ret; 188 }())); 189 190 version(iOS){ 191 static if(sdlSupport >= SDLSupport.v2_0_4): 192 alias SDL_iOSSetAnimationCallback = SDL_iPhoneSetAnimationCallback; 193 alias SDL_iOSSetEventPump = SDL_iPhoneSetEventPump; 194 }