From 77ab7fed42f9f8f88bb32dc76473cd3725c67c35 Mon Sep 17 00:00:00 2001 From: Susko3 Date: Sat, 6 Apr 2024 14:05:52 +0200 Subject: [PATCH] Manually implement macro functions All of these get "Function like macro definition records are not supported: [...] Generated bindings may be incomplete." warnings when running ClangSharp. --- SDL3-CS/MacroAttribute.cs | 16 ++++ SDL3-CS/SDL3/SDL_atomic.cs | 14 ++++ SDL3-CS/SDL3/SDL_audio.cs | 27 +++++++ SDL3-CS/SDL3/SDL_error.cs | 21 +++++ SDL3-CS/SDL3/SDL_keycode.cs | 11 +++ SDL3-CS/SDL3/SDL_mouse.cs | 25 ++++++ SDL3-CS/SDL3/SDL_pen.cs | 21 +++++ SDL3-CS/SDL3/SDL_pixels.cs | 137 +++++++++++++++++++++++++++++++++ SDL3-CS/SDL3/SDL_quit.cs | 15 ++++ SDL3-CS/SDL3/SDL_stdinc.cs | 6 ++ SDL3-CS/SDL3/SDL_surface.cs | 11 +++ SDL3-CS/SDL3/SDL_system.iOS.cs | 21 +++++ SDL3-CS/SDL3/SDL_timer.cs | 21 +++++ SDL3-CS/SDL3/SDL_version.cs | 22 ++++++ SDL3-CS/SDL3/SDL_video.cs | 15 ++++ 15 files changed, 383 insertions(+) create mode 100644 SDL3-CS/MacroAttribute.cs create mode 100644 SDL3-CS/SDL3/SDL_atomic.cs create mode 100644 SDL3-CS/SDL3/SDL_error.cs create mode 100644 SDL3-CS/SDL3/SDL_keycode.cs create mode 100644 SDL3-CS/SDL3/SDL_pixels.cs create mode 100644 SDL3-CS/SDL3/SDL_quit.cs create mode 100644 SDL3-CS/SDL3/SDL_surface.cs create mode 100644 SDL3-CS/SDL3/SDL_system.iOS.cs create mode 100644 SDL3-CS/SDL3/SDL_version.cs diff --git a/SDL3-CS/MacroAttribute.cs b/SDL3-CS/MacroAttribute.cs new file mode 100644 index 0000000..ee07455 --- /dev/null +++ b/SDL3-CS/MacroAttribute.cs @@ -0,0 +1,16 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System; +using System.Diagnostics; + +namespace SDL +{ + /// + /// Denotes a manually implemented macro function. + /// Such functions should be excluded from ClangSharp generation to prevent warnings. + /// + [AttributeUsage(AttributeTargets.Method)] + [Conditional("NEVER")] + internal class MacroAttribute : Attribute; +} diff --git a/SDL3-CS/SDL3/SDL_atomic.cs b/SDL3-CS/SDL3/SDL_atomic.cs new file mode 100644 index 0000000..2feb9f5 --- /dev/null +++ b/SDL3-CS/SDL3/SDL_atomic.cs @@ -0,0 +1,14 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +namespace SDL +{ + public unsafe partial class SDL3 + { + [Macro] + public static int SDL_AtomicIncRef(SDL_AtomicInt* a) => SDL_AtomicAdd(a, 1); + + [Macro] + public static bool SDL_AtomicDecRef(SDL_AtomicInt* a) => SDL_AtomicAdd(a, -1) == 1; + } +} diff --git a/SDL3-CS/SDL3/SDL_audio.cs b/SDL3-CS/SDL3/SDL_audio.cs index 777cc84..df24453 100644 --- a/SDL3-CS/SDL3/SDL_audio.cs +++ b/SDL3-CS/SDL3/SDL_audio.cs @@ -31,5 +31,32 @@ namespace SDL [Constant] public static readonly SDL_AudioFormat SDL_AUDIO_F32 = BitConverter.IsLittleEndian ? SDL_AudioFormat.SDL_AUDIO_F32LE : SDL_AudioFormat.SDL_AUDIO_F32BE; + + [Macro] + public static int SDL_AUDIO_BITSIZE(SDL_AudioFormat x) => (UInt16)x & SDL_AUDIO_MASK_BITSIZE; + + [Macro] + public static int SDL_AUDIO_BYTESIZE(SDL_AudioFormat x) => SDL_AUDIO_BITSIZE(x) / 8; + + [Macro] + public static bool SDL_AUDIO_ISFLOAT(SDL_AudioFormat x) => ((UInt16)x & SDL_AUDIO_MASK_FLOAT) != 0; + + [Macro] + public static bool SDL_AUDIO_ISBIGENDIAN(SDL_AudioFormat x) => ((UInt16)x & SDL_AUDIO_MASK_BIG_ENDIAN) != 0; + + [Macro] + public static bool SDL_AUDIO_ISLITTLEENDIAN(SDL_AudioFormat x) => !SDL_AUDIO_ISBIGENDIAN(x); + + [Macro] + public static bool SDL_AUDIO_ISSIGNED(SDL_AudioFormat x) => ((UInt16)x & SDL_AUDIO_MASK_SIGNED) != 0; + + [Macro] + public static bool SDL_AUDIO_ISINT(SDL_AudioFormat x) => !SDL_AUDIO_ISFLOAT(x); + + [Macro] + public static bool SDL_AUDIO_ISUNSIGNED(SDL_AudioFormat x) => !SDL_AUDIO_ISSIGNED(x); + + [Macro] + public static int SDL_AUDIO_FRAMESIZE(SDL_AudioSpec x) => SDL_AUDIO_BYTESIZE((x).format) * (x).channels; } } diff --git a/SDL3-CS/SDL3/SDL_error.cs b/SDL3-CS/SDL3/SDL_error.cs new file mode 100644 index 0000000..e4f0e57 --- /dev/null +++ b/SDL3-CS/SDL3/SDL_error.cs @@ -0,0 +1,21 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +namespace SDL +{ + public static partial class SDL3 + { + [Macro] + public static int SDL_OutOfMemory() => SDL_Error(SDL_errorcode.SDL_ENOMEM); + + [Macro] + public static int SDL_Unsupported() => SDL_Error(SDL_errorcode.SDL_UNSUPPORTED); + + [Macro] + public static unsafe int SDL_InvalidParamError([NativeTypeName("const char *")] byte* param) + { + fixed (byte* fmt = "Parameter '%s' is invalid"u8) + return SDL_SetError(fmt, __arglist(param)); + } + } +} diff --git a/SDL3-CS/SDL3/SDL_keycode.cs b/SDL3-CS/SDL3/SDL_keycode.cs new file mode 100644 index 0000000..f6f8791 --- /dev/null +++ b/SDL3-CS/SDL3/SDL_keycode.cs @@ -0,0 +1,11 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +namespace SDL +{ + public static partial class SDL3 + { + [Macro] + public static SDL_Keycode SDL_SCANCODE_TO_KEYCODE(SDL_Scancode scancode) => (SDL_Keycode)((int)scancode | SDLK_SCANCODE_MASK); + } +} diff --git a/SDL3-CS/SDL3/SDL_mouse.cs b/SDL3-CS/SDL3/SDL_mouse.cs index 0af442b..85d61b9 100644 --- a/SDL3-CS/SDL3/SDL_mouse.cs +++ b/SDL3-CS/SDL3/SDL_mouse.cs @@ -7,4 +7,29 @@ namespace SDL { [Typedef] public enum SDL_MouseID : UInt32; + + public enum SDLButton + { + SDL_BUTTON_LEFT = SDL3.SDL_BUTTON_LEFT, + SDL_BUTTON_MIDDLE = SDL3.SDL_BUTTON_MIDDLE, + SDL_BUTTON_RIGHT = SDL3.SDL_BUTTON_RIGHT, + SDL_BUTTON_X1 = SDL3.SDL_BUTTON_X1, + SDL_BUTTON_X2 = SDL3.SDL_BUTTON_X2, + } + + [Flags] + public enum SDLButtonMask + { + SDL_BUTTON_LMASK = SDL3.SDL_BUTTON_LMASK, + SDL_BUTTON_MMASK = SDL3.SDL_BUTTON_MMASK, + SDL_BUTTON_RMASK = SDL3.SDL_BUTTON_RMASK, + SDL_BUTTON_X1MASK = SDL3.SDL_BUTTON_X1MASK, + SDL_BUTTON_X2MASK = SDL3.SDL_BUTTON_X2MASK, + } + + public static partial class SDL3 + { + [Macro] + public static SDLButtonMask SDL_BUTTON(SDLButton button) => (SDLButtonMask)(1 << ((int)button - 1)); + } } diff --git a/SDL3-CS/SDL3/SDL_pen.cs b/SDL3-CS/SDL3/SDL_pen.cs index ec3da99..58436e8 100644 --- a/SDL3-CS/SDL3/SDL_pen.cs +++ b/SDL3-CS/SDL3/SDL_pen.cs @@ -8,9 +8,30 @@ namespace SDL [Typedef] public enum SDL_PenID : UInt32; + [Flags] + public enum SDL_PEN_CAPABILITIES : uint + { + SDL_PEN_DOWN_MASK = SDL3.SDL_PEN_DOWN_MASK, + SDL_PEN_INK_MASK = SDL3.SDL_PEN_INK_MASK, + SDL_PEN_ERASER_MASK = SDL3.SDL_PEN_ERASER_MASK, + SDL_PEN_AXIS_PRESSURE_MASK = SDL3.SDL_PEN_AXIS_PRESSURE_MASK, + SDL_PEN_AXIS_XTILT_MASK = SDL3.SDL_PEN_AXIS_XTILT_MASK, + SDL_PEN_AXIS_YTILT_MASK = SDL3.SDL_PEN_AXIS_YTILT_MASK, + SDL_PEN_AXIS_DISTANCE_MASK = SDL3.SDL_PEN_AXIS_DISTANCE_MASK, + SDL_PEN_AXIS_ROTATION_MASK = SDL3.SDL_PEN_AXIS_ROTATION_MASK, + SDL_PEN_AXIS_SLIDER_MASK = SDL3.SDL_PEN_AXIS_SLIDER_MASK, + SDL_PEN_AXIS_BIDIRECTIONAL_MASKS = SDL3.SDL_PEN_AXIS_BIDIRECTIONAL_MASKS, + } + public static partial class SDL3 { [Constant] public const SDL_MouseID SDL_PEN_MOUSEID = unchecked((SDL_MouseID)(-2)); + + [Macro] + public static SDL_PEN_CAPABILITIES SDL_PEN_CAPABILITY(int capbit) => (SDL_PEN_CAPABILITIES)(1ul << (capbit)); + + [Macro] + public static SDL_PEN_CAPABILITIES SDL_PEN_AXIS_CAPABILITY(SDL_PenAxis axis) => SDL_PEN_CAPABILITY((int)axis + SDL_PEN_FLAG_AXIS_BIT_OFFSET); } } diff --git a/SDL3-CS/SDL3/SDL_pixels.cs b/SDL3-CS/SDL3/SDL_pixels.cs new file mode 100644 index 0000000..f23cfb2 --- /dev/null +++ b/SDL3-CS/SDL3/SDL_pixels.cs @@ -0,0 +1,137 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System; + +namespace SDL +{ + using static SDL_PixelFormatEnum; + using static SDL_PixelType; + using static SDL_PackedOrder; + using static SDL_PackedLayout; + using static SDL_MatrixCoefficients; + using static SDL_ColorRange; + + public static partial class SDL3 + { + [Macro] + public static SDL_PixelFormatEnum SDL_DEFINE_PIXELFOURCC(byte A, byte B, byte C, byte D) => (SDL_PixelFormatEnum)SDL_FOURCC(A, B, C, D); + + [Macro] + public static SDL_PixelFormatEnum SDL_DEFINE_PIXELFORMAT(int type, int order, int layout, int bits, int bytes) + => (SDL_PixelFormatEnum)((1 << 28) | ((type) << 24) | ((order) << 20) | ((layout) << 16) | + ((bits) << 8) | ((bytes) << 0)); + + [Macro] + public static int SDL_PIXELFLAG(SDL_PixelFormatEnum X) => ((int)X >> 28) & 0x0F; + + [Macro] + public static SDL_PixelType SDL_PIXELTYPE(SDL_PixelFormatEnum X) => (SDL_PixelType)(((int)X >> 24) & 0x0F); + + [Macro] + public static SDL_PackedOrder SDL_PIXELORDER(SDL_PixelFormatEnum X) => (SDL_PackedOrder)(((int)X >> 20) & 0x0F); + + [Macro] + public static SDL_PackedLayout SDL_PIXELLAYOUT(SDL_PixelFormatEnum X) => (SDL_PackedLayout)(((int)X >> 16) & 0x0F); + + [Macro] + public static int SDL_BITSPERPIXEL(SDL_PixelFormatEnum X) => ((int)X >> 8) & 0xFF; + + [Macro] + public static int SDL_BYTESPERPIXEL(SDL_PixelFormatEnum X) => + (SDL_ISPIXELFORMAT_FOURCC(X) + ? ((((X) == SDL_PIXELFORMAT_YUY2) || + ((X) == SDL_PIXELFORMAT_UYVY) || + ((X) == SDL_PIXELFORMAT_YVYU) || + ((X) == SDL_PIXELFORMAT_P010)) + ? 2 + : 1) + : ((((int)X) >> 0) & 0xFF)); + + [Macro] + public static bool SDL_ISPIXELFORMAT_INDEXED(SDL_PixelFormatEnum format) => + (!SDL_ISPIXELFORMAT_FOURCC(format) && + ((SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX1) || + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX2) || + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX4) || + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX8))); + + [Macro] + public static bool SDL_ISPIXELFORMAT_PACKED(SDL_PixelFormatEnum format) => + (!SDL_ISPIXELFORMAT_FOURCC(format) && + ((SDL_PIXELTYPE(format) == SDL_PIXELTYPE_PACKED8) || + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_PACKED16) || + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_PACKED32))); + + [Macro] + public static bool SDL_ISPIXELFORMAT_ARRAY(SDL_PixelFormatEnum format) => + (!SDL_ISPIXELFORMAT_FOURCC(format) && + ((SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYU8) || + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYU16) || + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYU32) || + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYF16) || + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYF32))); + + [Macro] + public static bool SDL_ISPIXELFORMAT_ALPHA(SDL_PixelFormatEnum format) => + ((SDL_ISPIXELFORMAT_PACKED(format) && + ((SDL_PIXELORDER(format) == SDL_PACKEDORDER_ARGB) || + (SDL_PIXELORDER(format) == SDL_PACKEDORDER_RGBA) || + (SDL_PIXELORDER(format) == SDL_PACKEDORDER_ABGR) || + (SDL_PIXELORDER(format) == SDL_PACKEDORDER_BGRA)))); + + [Macro] + public static bool SDL_ISPIXELFORMAT_10BIT(SDL_PixelFormatEnum format) => + (!SDL_ISPIXELFORMAT_FOURCC(format) && + ((SDL_PIXELTYPE(format) == SDL_PIXELTYPE_PACKED32) && + (SDL_PIXELLAYOUT(format) == SDL_PACKEDLAYOUT_2101010))); + + [Macro] + public static bool SDL_ISPIXELFORMAT_FLOAT(SDL_PixelFormatEnum format) => + (!SDL_ISPIXELFORMAT_FOURCC(format) && + ((SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYF16) || + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYF32))); + + [Macro] + public static bool SDL_ISPIXELFORMAT_FOURCC(SDL_PixelFormatEnum format) => + ((format != 0) && (SDL_PIXELFLAG(format) != 1)); + + [Macro] + public static SDL_Colorspace SDL_DEFINE_COLORSPACE(UInt32 type, UInt32 range, UInt32 primaries, UInt32 transfer, UInt32 matrix, UInt32 chroma) + => (SDL_Colorspace)(((type) << 28) | ((range) << 24) | ((chroma) << 20) | + ((primaries) << 10) | ((transfer) << 5) | ((matrix) << 0)); + + [Macro] + public static SDL_ColorType SDL_COLORSPACETYPE(SDL_Colorspace X) => (SDL_ColorType)(((int)X >> 28) & 0x0F); + + [Macro] + public static SDL_ColorRange SDL_COLORSPACERANGE(SDL_Colorspace X) => (SDL_ColorRange)(((int)X >> 24) & 0x0F); + + [Macro] + public static SDL_ChromaLocation SDL_COLORSPACECHROMA(SDL_Colorspace X) => (SDL_ChromaLocation)(((int)X >> 20) & 0x0F); + + [Macro] + public static SDL_ColorPrimaries SDL_COLORSPACEPRIMARIES(SDL_Colorspace X) => (SDL_ColorPrimaries)(((int)X >> 10) & 0x1F); + + [Macro] + public static SDL_TransferCharacteristics SDL_COLORSPACETRANSFER(SDL_Colorspace X) => (SDL_TransferCharacteristics)(((int)X >> 5) & 0x1F); + + [Macro] + public static SDL_MatrixCoefficients SDL_COLORSPACEMATRIX(SDL_Colorspace X) => (SDL_MatrixCoefficients)((int)X & 0x1F); + + [Macro] + public static bool SDL_ISCOLORSPACE_MATRIX_BT601(SDL_Colorspace X) => (SDL_COLORSPACEMATRIX(X) == SDL_MATRIX_COEFFICIENTS_BT601 || SDL_COLORSPACEMATRIX(X) == SDL_MATRIX_COEFFICIENTS_BT470BG); + + [Macro] + public static bool SDL_ISCOLORSPACE_MATRIX_BT709(SDL_Colorspace X) => (SDL_COLORSPACEMATRIX(X) == SDL_MATRIX_COEFFICIENTS_BT709); + + [Macro] + public static bool SDL_ISCOLORSPACE_MATRIX_BT2020_NCL(SDL_Colorspace X) => (SDL_COLORSPACEMATRIX(X) == SDL_MATRIX_COEFFICIENTS_BT2020_NCL); + + [Macro] + public static bool SDL_ISCOLORSPACE_LIMITED_RANGE(SDL_Colorspace X) => (SDL_COLORSPACERANGE(X) != SDL_COLOR_RANGE_FULL); + + [Macro] + public static bool SDL_ISCOLORSPACE_FULL_RANGE(SDL_Colorspace X) => (SDL_COLORSPACERANGE(X) == SDL_COLOR_RANGE_FULL); + } +} diff --git a/SDL3-CS/SDL3/SDL_quit.cs b/SDL3-CS/SDL3/SDL_quit.cs new file mode 100644 index 0000000..71dedc3 --- /dev/null +++ b/SDL3-CS/SDL3/SDL_quit.cs @@ -0,0 +1,15 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +namespace SDL +{ + public partial class SDL3 + { + [Macro] + public static unsafe bool SDL_QuitRequested() + { + SDL_PumpEvents(); + return SDL_PeepEvents(null, 0, SDL_eventaction.SDL_PEEKEVENT, (uint)SDL_EventType.SDL_EVENT_QUIT, (uint)SDL_EventType.SDL_EVENT_QUIT) > 0; + } + } +} diff --git a/SDL3-CS/SDL3/SDL_stdinc.cs b/SDL3-CS/SDL3/SDL_stdinc.cs index d64e1b7..67084b2 100644 --- a/SDL3-CS/SDL3/SDL_stdinc.cs +++ b/SDL3-CS/SDL3/SDL_stdinc.cs @@ -14,4 +14,10 @@ namespace SDL [Typedef] public enum SDL_Time : Int64; + + public partial class SDL3 + { + [Macro] + public static uint SDL_FOURCC(byte A, byte B, byte C, byte D) => (uint)((A << 0) | (B << 8) | (C << 16) | (D << 24)); + } } diff --git a/SDL3-CS/SDL3/SDL_surface.cs b/SDL3-CS/SDL3/SDL_surface.cs new file mode 100644 index 0000000..65e990a --- /dev/null +++ b/SDL3-CS/SDL3/SDL_surface.cs @@ -0,0 +1,11 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +namespace SDL +{ + public static partial class SDL3 + { + [Macro] + public static unsafe bool SDL_MUSTLOCK(SDL_Surface* S) => (((S)->flags & SDL_RLEACCEL) != 0); + } +} diff --git a/SDL3-CS/SDL3/SDL_system.iOS.cs b/SDL3-CS/SDL3/SDL_system.iOS.cs new file mode 100644 index 0000000..c40537b --- /dev/null +++ b/SDL3-CS/SDL3/SDL_system.iOS.cs @@ -0,0 +1,21 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System; +using System.Runtime.Versioning; + +namespace SDL +{ + public static partial class SDL3 + { + [SupportedOSPlatform("iOS")] + [Macro] + public static unsafe int SDL_iOSSetAnimationCallback(SDL_Window* window, int interval, delegate* unmanaged[Cdecl] callback, IntPtr callbackParam) + => SDL_iPhoneSetAnimationCallback(window, interval, callback, callbackParam); + + [SupportedOSPlatform("iOS")] + [Macro] + public static void SDL_iOSSetEventPump(SDL_bool enabled) + => SDL_iPhoneSetEventPump(enabled); + } +} diff --git a/SDL3-CS/SDL3/SDL_timer.cs b/SDL3-CS/SDL3/SDL_timer.cs index bee2901..4ec7dff 100644 --- a/SDL3-CS/SDL3/SDL_timer.cs +++ b/SDL3-CS/SDL3/SDL_timer.cs @@ -7,4 +7,25 @@ namespace SDL { [Typedef] public enum SDL_TimerID : UInt32; + + public static partial class SDL3 + { + [Macro] + public static UInt64 SDL_SECONDS_TO_NS(UInt64 S) => (((UInt64)(S)) * SDL_NS_PER_SECOND); + + [Macro] + public static UInt64 SDL_NS_TO_SECONDS(UInt64 NS) => ((NS) / SDL_NS_PER_SECOND); + + [Macro] + public static UInt64 SDL_MS_TO_NS(UInt64 MS) => (((UInt64)(MS)) * SDL_NS_PER_MS); + + [Macro] + public static UInt64 SDL_NS_TO_MS(UInt64 NS) => ((NS) / SDL_NS_PER_MS); + + [Macro] + public static UInt64 SDL_US_TO_NS(UInt64 US) => (((UInt64)(US)) * SDL_NS_PER_US); + + [Macro] + public static UInt64 SDL_NS_TO_US(UInt64 NS) => ((NS) / SDL_NS_PER_US); + } } diff --git a/SDL3-CS/SDL3/SDL_version.cs b/SDL3-CS/SDL3/SDL_version.cs new file mode 100644 index 0000000..69bd75c --- /dev/null +++ b/SDL3-CS/SDL3/SDL_version.cs @@ -0,0 +1,22 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +namespace SDL +{ + public static partial class SDL3 + { + [Macro] + public static void SDL_VERSION(ref SDL_Version version) + { + version.major = SDL_MAJOR_VERSION; + version.minor = SDL_MINOR_VERSION; + version.patch = SDL_PATCHLEVEL; + } + + [Macro] + public static int SDL_VERSIONNUM(int X, int Y, int Z) => ((X) << 24 | (Y) << 8 | (Z) << 0); + + [Macro] + public static bool SDL_VERSION_ATLEAST(int X, int Y, int Z) => SDL_COMPILEDVERSION >= SDL_VERSIONNUM(X, Y, Z); + } +} diff --git a/SDL3-CS/SDL3/SDL_video.cs b/SDL3-CS/SDL3/SDL_video.cs index 391e501..61d8d63 100644 --- a/SDL3-CS/SDL3/SDL_video.cs +++ b/SDL3-CS/SDL3/SDL_video.cs @@ -39,4 +39,19 @@ namespace SDL SDL_WINDOW_TRANSPARENT = SDL3.SDL_WINDOW_TRANSPARENT, SDL_WINDOW_NOT_FOCUSABLE = SDL3.SDL_WINDOW_NOT_FOCUSABLE, } + + public static partial class SDL3 + { + [Macro] + public static int SDL_WINDOWPOS_UNDEFINED_DISPLAY(int X) => (int)(SDL_WINDOWPOS_UNDEFINED_MASK | (X)); + + [Macro] + public static bool SDL_WINDOWPOS_ISUNDEFINED(int X) => (((X) & 0xFFFF0000) == SDL_WINDOWPOS_UNDEFINED_MASK); + + [Macro] + public static int SDL_WINDOWPOS_CENTERED_DISPLAY(int X) => (int)(SDL_WINDOWPOS_CENTERED_MASK | (X)); + + [Macro] + public static bool SDL_WINDOWPOS_ISCENTERED(int X) => (((X) & 0xFFFF0000) == SDL_WINDOWPOS_CENTERED_MASK); + } }