module sdl3::sdl; typedef DisplayID = uint; typedef WindowID = uint; const ZString PROP_GLOBAL_VIDEO_WAYLAND_WL_DISPLAY_POINTER @builtin = "SDL.video.wayland.wl_display"; enum SystemTheme : inline CInt { SYSTEM_THEME_UNKNOWN, SYSTEM_THEME_LIGHT, SYSTEM_THEME_DARK } typedef DisplayModeData = void; struct DisplayMode { DisplayID displayID; PixelFormat format; int w; int h; float pixel_density; float refresh_rate; int refresh_rate_numerator; int refresh_rate_denominator; DisplayModeData *internal; } enum DisplayOrientation : inline CInt { ORIENTATION_UNKNOWN, ORIENTATION_LANDSCAPE, ORIENTATION_LANDSCAPE_FLIPPED, ORIENTATION_PORTRAIT, ORIENTATION_PORTRAIT_FLIPPED } typedef Window = void; typedef WindowFlags = ulong; const WindowFlags WINDOW_FULLSCREEN @builtin = 0x0000000000000001; const WindowFlags WINDOW_OPENGL @builtin = 0x0000000000000002; const WindowFlags WINDOW_OCCLUDED @builtin = 0x0000000000000004; const WindowFlags WINDOW_HIDDEN @builtin = 0x0000000000000008; const WindowFlags WINDOW_BORDERLESS @builtin = 0x0000000000000010; const WindowFlags WINDOW_RESIZABLE @builtin = 0x0000000000000020; const WindowFlags WINDOW_MINIMIZED @builtin = 0x0000000000000040; const WindowFlags WINDOW_MAXIMIZED @builtin = 0x0000000000000080; const WindowFlags WINDOW_MOUSE_GRABBED @builtin = 0x0000000000000100; const WindowFlags WINDOW_INPUT_FOCUS @builtin = 0x0000000000000200; const WindowFlags WINDOW_MOUSE_FOCUS @builtin = 0x0000000000000400; const WindowFlags WINDOW_EXTERNAL @builtin = 0x0000000000000800; const WindowFlags WINDOW_MODAL @builtin = 0x0000000000001000; const WindowFlags WINDOW_HIGH_PIXEL_DENSITY @builtin = 0x0000000000002000; const WindowFlags WINDOW_MOUSE_CAPTURE @builtin = 0x0000000000004000; const WindowFlags WINDOW_MOUSE_RELATIVE_MODE @builtin = 0x0000000000008000; const WindowFlags WINDOW_ALWAYS_ON_TOP @builtin = 0x0000000000010000; const WindowFlags WINDOW_UTILITY @builtin = 0x0000000000020000; const WindowFlags WINDOW_TOOLTIP @builtin = 0x0000000000040000; const WindowFlags WINDOW_POPUP_MENU @builtin = 0x0000000000080000; const WindowFlags WINDOW_KEYBOARD_GRABBED @builtin = 0x0000000000100000; const WindowFlags WINDOW_VULKAN @builtin = 0x0000000010000000; const WindowFlags WINDOW_METAL @builtin = 0x0000000020000000; const WindowFlags WINDOW_TRANSPARENT @builtin = 0x0000000040000000; const WindowFlags WINDOW_NOT_FOCUSABLE @builtin = 0x0000000080000000; const uint WINDOWPOS_UNDEFINED_MASK @builtin = 0x1FFF0000; const uint WINDOWPOS_CENTERED_MASK @builtin = 0x2FFF0000; macro uint @windowpos_undefined_display($x) => WINDOWPOS_UNDEFINED_MASK|$x; macro bool @windowpos_isundefined($x) => ($x&0xFFFF0000) == WINDOWPOS_UNDEFINED_MASK; macro uint @windowpos_centered_display($x) => WINDOWPOS_CENTERED_MASK|$x; macro bool @windowpos_iscentered($x) => ($x&0xFFFF0000) == WINDOWPOS_CENTERED_MASK; const uint WINDOWPOS_UNDEFINED @builtin = @windowpos_undefined_display(0); const uint WINDOWPOS_CENTERED @builtin = @windowpos_centered_display(0); enum FlashOperation : inline CInt { FLASH_CANCEL, FLASH_BRIEFLY, FLASH_UNTIL_FOCUSED } typedef GLContext = void*; typedef EGLDisplay = void*; typedef EGLConfig = void*; typedef EGLSurface = void*; typedef EGLAttrib = ulong; // FIXME: this is not correct for all platforms typedef EGLint = int; //alias EGLAttribArrayCallback = fn SDL_EGLAttrib*(void* userdata); //alias EGLIntArrayCallback = fn SDL_EGLint*(void* userdata, EGLDisplay display, EGLConfig config); enum GLAttr : inline CInt { GL_RED_SIZE, GL_GREEN_SIZE, GL_BLUE_SIZE, GL_ALPHA_SIZE, GL_BUFFER_SIZE, GL_DOUBLEBUFFER, GL_DEPTH_SIZE, GL_STENCIL_SIZE, GL_ACCUM_RED_SIZE, GL_ACCUM_GREEN_SIZE, GL_ACCUM_BLUE_SIZE, GL_ACCUM_ALPHA_SIZE, GL_STEREO, GL_MULTISAMPLEBUFFERS, GL_MULTISAMPLESAMPLES, GL_ACCELERATED_VISUAL, GL_RETAINED_BACKING, GL_CONTEXT_MAJOR_VERSION, GL_CONTEXT_MINOR_VERSION, GL_CONTEXT_FLAGS, GL_CONTEXT_PROFILE_MASK, GL_SHARE_WITH_CURRENT_CONTEXT, GL_FRAMEBUFFER_SRGB_CAPABLE, GL_CONTEXT_RELEASE_BEHAVIOR, GL_CONTEXT_RESET_NOTIFICATION, GL_CONTEXT_NO_ERROR, GL_FLOATBUFFERS, GL_EGL_PLATFORM } typedef GLProfile = uint; const GLProfile GL_CONTEXT_PROFILE_CORE @builtin = 0x0001; const GLProfile GL_CONTEXT_PROFILE_COMPATIBILITY @builtin = 0x0002; const GLProfile GL_CONTEXT_PROFILE_ES @builtin = 0x0004; typedef GLContextFlag = uint; const GLContextFlag GL_CONTEXT_DEBUG_FLAG @builtin = 0x0001; const GLContextFlag GL_CONTEXT_FORWARD_COMPATIBLE_FLAG @builtin = 0x0002; const GLContextFlag GL_CONTEXT_ROBUST_ACCESS_FLAG @builtin = 0x0004; const GLContextFlag GL_CONTEXT_RESET_ISOLATION_FLAG @builtin = 0x0008; typedef GLContextReleaseFlag = uint; const GLContextReleaseFlag GL_CONTEXT_RELEASE_BEHAVIOR_NONE @builtin = 0x0000; const GLContextReleaseFlag GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH @builtin = 0x0001; typedef GLContextResetNotification = uint; const GLContextResetNotification GL_CONTEXT_RESET_NO_NOTIFICATION @builtin = 0x0000; const GLContextResetNotification GL_CONTEXT_RESET_LOSE_CONTEXT @builtin = 0x0001; extern fn int get_num_video_drivers() @extern("SDL_GetNumVideoDrivers"); extern fn ZString get_video_driver(int index) @extern("SDL_GetVideoDriver"); extern fn ZString get_current_video_driver() @extern("SDL_GetCurrentVideoDriver"); extern fn SystemTheme get_system_theme() @extern("SDL_GetSystemTheme"); extern fn DisplayID * get_displays(int *count) @extern("SDL_GetDisplays"); extern fn DisplayID get_primary_display() @extern("SDL_GetPrimaryDisplay"); extern fn PropertiesID get_display_properties(DisplayID displayID) @extern("SDL_GetDisplayProperties"); const ZString PROP_DISPLAY_HDR_ENABLED_BOOLEAN @builtin = "SDL.display.HDR_enabled"; const ZString PROP_DISPLAY_KMSDRM_PANEL_ORIENTATION_NUMBER @builtin = "SDL.display.KMSDRM.panel_orientation"; extern fn ZString get_display_name(DisplayID displayID) @extern("SDL_GetDisplayName"); extern fn bool get_display_bounds(DisplayID displayID, Rect* rect) @extern("SDL_GetDisplayBounds"); extern fn bool get_display_usable_bounds(DisplayID displayID, Rect* rect) @extern("SDL_GetDisplayUsableBounds"); extern fn DisplayOrientation get_natural_display_orientation(DisplayID displayID) @extern("SDL_GetNaturalDisplayOrientation"); extern fn DisplayOrientation get_current_display_orientation(DisplayID displayID) @extern("SDL_GetCurrentDisplayOrientation"); extern fn float get_display_content_scale(DisplayID displayID) @extern("SDL_GetDisplayContentScale"); extern fn DisplayMode** get_fullscreen_display_modes(DisplayID displayID, int *count) @extern("SDL_GetFullscreenDisplayModes"); extern fn bool get_closest_fullscreen_display_mode(DisplayID displayID, int w, int h, float refresh_rate, bool include_high_density_modes, DisplayMode*closest) @extern("SDL_GetClosestFullscreenDisplayMode"); extern fn DisplayMode* get_desktop_display_mode(DisplayID displayID) @extern("SDL_GetDesktopDisplayMode"); extern fn DisplayMode* get_current_display_mode(DisplayID displayID) @extern("SDL_GetCurrentDisplayMode"); extern fn DisplayID get_display_for_point(Point *point) @extern("SDL_GetDisplayForPoint"); extern fn DisplayID get_display_for_rect(Rect *rect) @extern("SDL_GetDisplayForRect"); extern fn DisplayID get_display_for_window(Window *window) @extern("SDL_GetDisplayForWindow"); extern fn float get_window_pixel_density(Window *window) @extern("SDL_GetWindowPixelDensity"); extern fn float get_window_display_scale(Window *window) @extern("SDL_GetWindowDisplayScale"); extern fn bool set_window_fullscreen_mode(Window *window, DisplayMode* mode) @extern("SDL_SetWindowFullscreenMode"); extern fn DisplayMode* get_window_fullscreen_mode(Window *window) @extern("SDL_GetWindowFullscreenMode"); extern fn void* get_window_icc_profile(Window *window, isz* size) @extern("SDL_GetWindowICCProfile"); extern fn PixelFormat get_window_pixel_format(Window *window) @extern("SDL_GetWindowPixelFormat"); extern fn Window** get_windows(int *count) @extern("SDL_GetWindows"); extern fn Window* create_window(ZString title, int w, int h, WindowFlags flags) @extern("SDL_CreateWindow"); extern fn Window* create_popup_window(Window *parent, int offset_x, int offset_y, int w, int h, WindowFlags flags) @extern("SDL_CreatePopupWindow"); extern fn Window* create_window_with_properties(PropertiesID props) @extern("SDL_CreateWindowWithProperties"); const ZString PROP_WINDOW_CREATE_ALWAYS_ON_TOP_BOOLEAN @builtin = "SDL.window.create.always_on_top"; const ZString PROP_WINDOW_CREATE_BORDERLESS_BOOLEAN @builtin = "SDL.window.create.borderless"; const ZString PROP_WINDOW_CREATE_FOCUSABLE_BOOLEAN @builtin = "SDL.window.create.focusable"; const ZString PROP_WINDOW_CREATE_EXTERNAL_GRAPHICS_CONTEXT_BOOLEAN @builtin = "SDL.window.create.external_graphics_context"; const ZString PROP_WINDOW_CREATE_FLAGS_NUMBER @builtin = "SDL.window.create.flags"; const ZString PROP_WINDOW_CREATE_FULLSCREEN_BOOLEAN @builtin = "SDL.window.create.fullscreen"; const ZString PROP_WINDOW_CREATE_HEIGHT_NUMBER @builtin = "SDL.window.create.height"; const ZString PROP_WINDOW_CREATE_HIDDEN_BOOLEAN @builtin = "SDL.window.create.hidden"; const ZString PROP_WINDOW_CREATE_HIGH_PIXEL_DENSITY_BOOLEAN @builtin = "SDL.window.create.high_pixel_density"; const ZString PROP_WINDOW_CREATE_MAXIMIZED_BOOLEAN @builtin = "SDL.window.create.maximized"; const ZString PROP_WINDOW_CREATE_MENU_BOOLEAN @builtin = "SDL.window.create.menu"; const ZString PROP_WINDOW_CREATE_METAL_BOOLEAN @builtin = "SDL.window.create.metal"; const ZString PROP_WINDOW_CREATE_MINIMIZED_BOOLEAN @builtin = "SDL.window.create.minimized"; const ZString PROP_WINDOW_CREATE_MODAL_BOOLEAN @builtin = "SDL.window.create.modal"; const ZString PROP_WINDOW_CREATE_MOUSE_GRABBED_BOOLEAN @builtin = "SDL.window.create.mouse_grabbed"; const ZString PROP_WINDOW_CREATE_OPENGL_BOOLEAN @builtin = "SDL.window.create.opengl"; const ZString PROP_WINDOW_CREATE_PARENT_POINTER @builtin = "SDL.window.create.parent"; const ZString PROP_WINDOW_CREATE_RESIZABLE_BOOLEAN @builtin = "SDL.window.create.resizable"; const ZString PROP_WINDOW_CREATE_TITLE_STRING @builtin = "SDL.window.create.title"; const ZString PROP_WINDOW_CREATE_TRANSPARENT_BOOLEAN @builtin = "SDL.window.create.transparent"; const ZString PROP_WINDOW_CREATE_TOOLTIP_BOOLEAN @builtin = "SDL.window.create.tooltip"; const ZString PROP_WINDOW_CREATE_UTILITY_BOOLEAN @builtin = "SDL.window.create.utility"; const ZString PROP_WINDOW_CREATE_VULKAN_BOOLEAN @builtin = "SDL.window.create.vulkan"; const ZString PROP_WINDOW_CREATE_WIDTH_NUMBER @builtin = "SDL.window.create.width"; const ZString PROP_WINDOW_CREATE_X_NUMBER @builtin = "SDL.window.create.x"; const ZString PROP_WINDOW_CREATE_Y_NUMBER @builtin = "SDL.window.create.y"; const ZString PROP_WINDOW_CREATE_COCOA_WINDOW_POINTER @builtin = "SDL.window.create.cocoa.window"; const ZString PROP_WINDOW_CREATE_COCOA_VIEW_POINTER @builtin = "SDL.window.create.cocoa.view"; const ZString PROP_WINDOW_CREATE_WAYLAND_SURFACE_ROLE_CUSTOM_BOOLEAN @builtin = "SDL.window.create.wayland.surface_role_custom"; const ZString PROP_WINDOW_CREATE_WAYLAND_CREATE_EGL_WINDOW_BOOLEAN @builtin = "SDL.window.create.wayland.create_egl_window"; const ZString PROP_WINDOW_CREATE_WAYLAND_WL_SURFACE_POINTER @builtin = "SDL.window.create.wayland.wl_surface"; const ZString PROP_WINDOW_CREATE_WIN32_HWND_POINTER @builtin = "SDL.window.create.win32.hwnd"; const ZString PROP_WINDOW_CREATE_WIN32_PIXEL_FORMAT_HWND_POINTER @builtin = "SDL.window.create.win32.pixel_format_hwnd"; const ZString PROP_WINDOW_CREATE_X11_WINDOW_NUMBER @builtin = "SDL.window.create.x11.window"; extern fn WindowID get_window_id(Window* window) @extern("SDL_GetWindowID"); extern fn Window* get_window_from_id(WindowID id) @extern("SDL_GetWindowFromID"); extern fn Window* get_window_parent(Window* window) @extern("SDL_GetWindowParent"); extern fn PropertiesID get_window_properties(Window* window) @extern("SDL_GetWindowProperties"); const ZString PROP_WINDOW_SHAPE_POINTER @builtin = "SDL.window.shape"; const ZString PROP_WINDOW_HDR_ENABLED_BOOLEAN @builtin = "SDL.window.HDR_enabled"; const ZString PROP_WINDOW_SDR_WHITE_LEVEL_FLOAT @builtin = "SDL.window.SDR_white_level"; const ZString PROP_WINDOW_HDR_HEADROOM_FLOAT @builtin = "SDL.window.HDR_headroom"; const ZString PROP_WINDOW_ANDROID_WINDOW_POINTER @builtin = "SDL.window.android.window"; const ZString PROP_WINDOW_ANDROID_SURFACE_POINTER @builtin = "SDL.window.android.surface"; const ZString PROP_WINDOW_UIKIT_WINDOW_POINTER @builtin = "SDL.window.uikit.window"; const ZString PROP_WINDOW_UIKIT_METAL_VIEW_TAG_NUMBER @builtin = "SDL.window.uikit.metal_view_tag"; const ZString PROP_WINDOW_UIKIT_OPENGL_FRAMEBUFFER_NUMBER @builtin = "SDL.window.uikit.opengl.framebuffer"; const ZString PROP_WINDOW_UIKIT_OPENGL_RENDERBUFFER_NUMBER @builtin = "SDL.window.uikit.opengl.renderbuffer"; const ZString PROP_WINDOW_UIKIT_OPENGL_RESOLVE_FRAMEBUFFER_NUMBER @builtin = "SDL.window.uikit.opengl.resolve_framebuffer"; const ZString PROP_WINDOW_KMSDRM_DEVICE_INDEX_NUMBER @builtin = "SDL.window.kmsdrm.dev_index"; const ZString PROP_WINDOW_KMSDRM_DRM_FD_NUMBER @builtin = "SDL.window.kmsdrm.drm_fd"; const ZString PROP_WINDOW_KMSDRM_GBM_DEVICE_POINTER @builtin = "SDL.window.kmsdrm.gbm_dev"; const ZString PROP_WINDOW_COCOA_WINDOW_POINTER @builtin = "SDL.window.cocoa.window"; const ZString PROP_WINDOW_COCOA_METAL_VIEW_TAG_NUMBER @builtin = "SDL.window.cocoa.metal_view_tag"; const ZString PROP_WINDOW_OPENVR_OVERLAY_ID @builtin = "SDL.window.openvr.overlay_id"; const ZString PROP_WINDOW_VIVANTE_DISPLAY_POINTER @builtin = "SDL.window.vivante.display"; const ZString PROP_WINDOW_VIVANTE_WINDOW_POINTER @builtin = "SDL.window.vivante.window"; const ZString PROP_WINDOW_VIVANTE_SURFACE_POINTER @builtin = "SDL.window.vivante.surface"; const ZString PROP_WINDOW_WIN32_HWND_POINTER @builtin = "SDL.window.win32.hwnd"; const ZString PROP_WINDOW_WIN32_HDC_POINTER @builtin = "SDL.window.win32.hdc"; const ZString PROP_WINDOW_WIN32_INSTANCE_POINTER @builtin = "SDL.window.win32.instance"; const ZString PROP_WINDOW_WAYLAND_DISPLAY_POINTER @builtin = "SDL.window.wayland.display"; const ZString PROP_WINDOW_WAYLAND_SURFACE_POINTER @builtin = "SDL.window.wayland.surface"; const ZString PROP_WINDOW_WAYLAND_VIEWPORT_POINTER @builtin = "SDL.window.wayland.viewport"; const ZString PROP_WINDOW_WAYLAND_EGL_WINDOW_POINTER @builtin = "SDL.window.wayland.egl_window"; const ZString PROP_WINDOW_WAYLAND_XDG_SURFACE_POINTER @builtin = "SDL.window.wayland.xdg_surface"; const ZString PROP_WINDOW_WAYLAND_XDG_TOPLEVEL_POINTER @builtin = "SDL.window.wayland.xdg_toplevel"; const ZString PROP_WINDOW_WAYLAND_XDG_TOPLEVEL_EXPORT_HANDLE_STRING @builtin = "SDL.window.wayland.xdg_toplevel_export_handle"; const ZString PROP_WINDOW_WAYLAND_XDG_POPUP_POINTER @builtin = "SDL.window.wayland.xdg_popup"; const ZString PROP_WINDOW_WAYLAND_XDG_POSITIONER_POINTER @builtin = "SDL.window.wayland.xdg_positioner"; const ZString PROP_WINDOW_X11_DISPLAY_POINTER @builtin = "SDL.window.x11.display"; const ZString PROP_WINDOW_X11_SCREEN_NUMBER @builtin = "SDL.window.x11.screen"; const ZString PROP_WINDOW_X11_WINDOW_NUMBER @builtin = "SDL.window.x11.window"; extern fn WindowFlags get_window_flags(Window* window) @extern("SDL_GetWindowFlags"); extern fn bool set_window_title(Window* window, ZString title) @extern("SDL_SetWindowTitle"); extern fn ZString get_window_title(Window* window) @extern("SDL_GetWindowTitle"); extern fn bool set_window_icon(Window* window, Surface *icon) @extern("SDL_SetWindowIcon"); extern fn bool set_window_position(Window* window, int x, int y) @extern("SDL_SetWindowPosition"); extern fn bool get_window_position(Window* window, int *x, int *y) @extern("SDL_GetWindowPosition"); extern fn bool set_window_size(Window* window, int w, int h) @extern("SDL_SetWindowSize"); extern fn bool get_window_size(Window* window, int *w, int *h) @extern("SDL_GetWindowSize"); extern fn bool get_window_safe_area(Window* window, Rect *rect) @extern("SDL_GetWindowSafeArea"); extern fn bool set_window_aspect_ratio(Window* window, float min_aspect, float max_aspect) @extern("SDL_SetWindowAspectRatio"); extern fn bool get_window_aspect_ratio(Window* window, float *min_aspect, float *max_aspect) @extern("SDL_GetWindowAspectRatio"); extern fn bool get_window_borders_size(Window* window, int *top, int *left, int *bottom, int *right) @extern("SDL_GetWindowBordersSize"); extern fn bool get_window_size_in_pixels(Window* window, int *w, int *h) @extern("SDL_GetWindowSizeInPixels"); extern fn bool set_window_minimum_size(Window* window, int min_w, int min_h) @extern("SDL_SetWindowMinimumSize"); extern fn bool get_window_minimum_size(Window* window, int *w, int *h) @extern("SDL_GetWindowMinimumSize"); extern fn bool set_window_maximum_size(Window* window, int max_w, int max_h) @extern("SDL_SetWindowMaximumSize"); extern fn bool get_window_maximum_size(Window* window, int *w, int *h) @extern("SDL_GetWindowMaximumSize"); extern fn bool set_window_bordered(Window* window, bool bordered) @extern("SDL_SetWindowBordered"); extern fn bool set_window_resizable(Window* window, bool resizable) @extern("SDL_SetWindowResizable"); extern fn bool set_window_always_on_top(Window* window, bool on_top) @extern("SDL_SetWindowAlwaysOnTop"); extern fn bool show_window(Window* window) @extern("SDL_ShowWindow"); extern fn bool hide_window(Window* window) @extern("SDL_HideWindow"); extern fn bool raise_window(Window* window) @extern("SDL_RaiseWindow"); extern fn bool maximize_window(Window* window) @extern("SDL_MaximizeWindow"); extern fn bool minimize_window(Window* window) @extern("SDL_MinimizeWindow"); extern fn bool restore_window(Window* window) @extern("SDL_RestoreWindow"); extern fn bool set_window_fullscreen(Window* window, bool fullscreen) @extern("SDL_SetWindowFullscreen"); extern fn bool sync_window(Window* window) @extern("SDL_SyncWindow"); extern fn bool window_has_surface(Window* window) @extern("SDL_WindowHasSurface"); extern fn Surface* get_window_surface(Window* window) @extern("SDL_GetWindowSurface"); extern fn bool set_window_surface_v_sync(Window* window, int vsync) @extern("SDL_SetWindowSurfaceVSync"); const int WINDOW_SURFACE_VSYNC_DISABLED @builtin = 0; const int WINDOW_SURFACE_VSYNC_ADAPTIVE @builtin = -1; extern fn bool get_window_surface_v_sync(Window* window, int *vsync) @extern("SDL_GetWindowSurfaceVSync"); extern fn bool update_window_surface(Window* window) @extern("SDL_UpdateWindowSurface"); extern fn bool update_window_surface_rects(Window* window, Rect* rects, int numrects) @extern("SDL_UpdateWindowSurfaceRects"); extern fn bool destroy_window_surface(Window* window) @extern("SDL_DestroyWindowSurface"); extern fn bool set_window_keyboard_grab(Window* window, bool grabbed) @extern("SDL_SetWindowKeyboardGrab"); extern fn bool set_window_mouse_grab(Window* window, bool grabbed) @extern("SDL_SetWindowMouseGrab"); extern fn bool get_window_keyboard_grab(Window* window) @extern("SDL_GetWindowKeyboardGrab"); extern fn bool get_window_mouse_grab(Window* window) @extern("SDL_GetWindowMouseGrab"); extern fn Window* get_grabbed_window() @extern("SDL_GetGrabbedWindow"); extern fn bool set_window_mouse_rect(Window* window, Rect* rect) @extern("SDL_SetWindowMouseRect"); extern fn Rect* get_window_mouse_rect(Window* window) @extern("SDL_GetWindowMouseRect"); extern fn bool set_window_opacity(Window* window, float opacity) @extern("SDL_SetWindowOpacity"); extern fn float get_window_opacity(Window* window) @extern("SDL_GetWindowOpacity"); extern fn bool set_window_parent(Window* window, Window* parent) @extern("SDL_SetWindowParent"); extern fn bool set_window_modal(Window* window, bool modal) @extern("SDL_SetWindowModal"); extern fn bool set_window_focusable(Window* window, bool focusable) @extern("SDL_SetWindowFocusable"); extern fn bool show_window_system_menu(Window* window, int x, int y) @extern("SDL_ShowWindowSystemMenu"); enum HitTestResult : inline CInt{ HITTEST_NORMAL, HITTEST_DRAGGABLE, HITTEST_RESIZE_TOPLEFT, HITTEST_RESIZE_TOP, HITTEST_RESIZE_TOPRIGHT, HITTEST_RESIZE_RIGHT, HITTEST_RESIZE_BOTTOMRIGHT, HITTEST_RESIZE_BOTTOM, HITTEST_RESIZE_BOTTOMLEFT, HITTEST_RESIZE_LEFT } alias HitTest = fn HitTestResult(Window *win, Point *area, void *data); extern fn bool set_window_hit_test(Window *window, HitTest callback, void *callback_data) @extern("SDL_SetWindowHitTest"); extern fn bool set_window_shape(Window *window, Surface *shape) @extern("SDL_SetWindowShape"); extern fn bool flash_window(Window *window, FlashOperation operation) @extern("SDL_FlashWindow"); extern fn void destroy_window(Window *window) @extern("SDL_DestroyWindow"); extern fn bool screen_saver_enabled() @extern("SDL_ScreenSaverEnabled"); extern fn bool enable_screen_saver() @extern("SDL_EnableScreenSaver"); extern fn bool disable_screen_saver() @extern("SDL_DisableScreenSaver"); extern fn bool gl_load_library(ZString path) @extern("SDL_GL_LoadLibrary"); extern fn FunctionPointer gl_get_proc_address(ZString proc) @extern("SDL_GL_GetProcAddress"); extern fn FunctionPointer egl_get_proc_address(ZString proc) @extern("SDL_EGL_GetProcAddress"); extern fn void gl_unload_library() @extern("SDL_GL_UnloadLibrary"); extern fn bool gl_extension_supported(ZString extension) @extern("SDL_GL_ExtensionSupported"); extern fn void gl_reset_attributes() @extern("SDL_GL_ResetAttributes"); extern fn bool gl_set_attribute(GLAttr attr, int value) @extern("SDL_GL_SetAttribute"); extern fn bool gl_get_attribute(GLAttr attr, int *value) @extern("SDL_GL_GetAttribute"); extern fn GLContext gl_create_context(Window* window) @extern("SDL_GL_CreateContext"); extern fn bool gl_make_current(Window* window, GLContext context) @extern("SDL_GL_MakeCurrent"); extern fn Window* gl_get_current_window() @extern("SDL_GL_GetCurrentWindow"); extern fn GLContext gl_get_current_context() @extern("SDL_GL_GetCurrentContext"); extern fn EGLDisplay egl_get_current_display() @extern("SDL_EGL_GetCurrentDisplay"); extern fn EGLConfig egl_get_current_config() @extern("SDL_EGL_GetCurrentConfig"); extern fn EGLSurface egl_get_window_surface(Window* window) @extern("SDL_EGL_GetWindowSurface"); //extern fn void EGL_SetAttributeCallbacks(EGLAttribArrayCallback platformAttribCallback, EGLIntArrayCallback surfaceAttribCallback, EGLIntArrayCallback contextAttribCallback, void *userdata) @extern("SDL_EGL_SetAttributeCallbacks"); extern fn bool gl_set_swap_interval(int interval) @extern("SDL_GL_SetSwapInterval"); extern fn bool gl_get_swap_interval(int *interval) @extern("SDL_GL_GetSwapInterval"); extern fn bool gl_swap_window(Window *window) @extern("SDL_GL_SwapWindow"); extern fn bool gl_destroy_context(GLContext context) @extern("SDL_GL_DestroyContext");