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