From e017626460163a1e8c424550d28b1ea0fab9519b Mon Sep 17 00:00:00 2001 From: Susko3 Date: Tue, 31 Dec 2024 01:05:30 +0100 Subject: [PATCH] Add SDL_tray --- SDL3-CS/SDL3/ClangSharp/SDL_tray.g.cs | 127 ++++++++++++++++++++++++++ SDL3-CS/SDL3/SDL_tray.cs | 30 ++++++ SDL3-CS/generate_bindings.py | 1 + 3 files changed, 158 insertions(+) create mode 100644 SDL3-CS/SDL3/ClangSharp/SDL_tray.g.cs create mode 100644 SDL3-CS/SDL3/SDL_tray.cs diff --git a/SDL3-CS/SDL3/ClangSharp/SDL_tray.g.cs b/SDL3-CS/SDL3/ClangSharp/SDL_tray.g.cs new file mode 100644 index 0000000..386d48b --- /dev/null +++ b/SDL3-CS/SDL3/ClangSharp/SDL_tray.g.cs @@ -0,0 +1,127 @@ +/* + + C# bindings for Simple DirectMedia Layer. + Original copyright notice of input files: + + Simple DirectMedia Layer + Copyright (C) 1997-2024 Sam Lantinga + + 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. +*/ + +using System; +using System.Runtime.InteropServices; + +namespace SDL +{ + public partial struct SDL_Tray + { + } + + public partial struct SDL_TrayMenu + { + } + + public partial struct SDL_TrayEntry + { + } + + public static unsafe partial class SDL3 + { + [DllImport("SDL3", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern SDL_Tray* SDL_CreateTray(SDL_Surface* icon, [NativeTypeName("const char *")] byte* tooltip); + + [DllImport("SDL3", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void SDL_SetTrayIcon(SDL_Tray* tray, SDL_Surface* icon); + + [DllImport("SDL3", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void SDL_SetTrayTooltip(SDL_Tray* tray, [NativeTypeName("const char *")] byte* tooltip); + + [DllImport("SDL3", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern SDL_TrayMenu* SDL_CreateTrayMenu(SDL_Tray* tray); + + [DllImport("SDL3", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern SDL_TrayMenu* SDL_CreateTraySubmenu(SDL_TrayEntry* entry); + + [DllImport("SDL3", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern SDL_TrayMenu* SDL_GetTrayMenu(SDL_Tray* tray); + + [DllImport("SDL3", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern SDL_TrayMenu* SDL_GetTraySubmenu(SDL_TrayEntry* entry); + + [DllImport("SDL3", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const SDL_TrayEntry **")] + public static extern SDL_TrayEntry** SDL_GetTrayEntries(SDL_TrayMenu* menu, int* size); + + [DllImport("SDL3", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void SDL_RemoveTrayEntry(SDL_TrayEntry* entry); + + [DllImport("SDL3", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern SDL_TrayEntry* SDL_InsertTrayEntryAt(SDL_TrayMenu* menu, int pos, [NativeTypeName("const char *")] byte* label, SDL_TrayEntryFlags flags); + + [DllImport("SDL3", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void SDL_SetTrayEntryLabel(SDL_TrayEntry* entry, [NativeTypeName("const char *")] byte* label); + + [DllImport("SDL3", CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_GetTrayEntryLabel", ExactSpelling = true)] + [return: NativeTypeName("const char *")] + public static extern byte* Unsafe_SDL_GetTrayEntryLabel(SDL_TrayEntry* entry); + + [DllImport("SDL3", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void SDL_SetTrayEntryChecked(SDL_TrayEntry* entry, [NativeTypeName("bool")] SDLBool @checked); + + [DllImport("SDL3", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern SDLBool SDL_GetTrayEntryChecked(SDL_TrayEntry* entry); + + [DllImport("SDL3", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void SDL_SetTrayEntryEnabled(SDL_TrayEntry* entry, [NativeTypeName("bool")] SDLBool enabled); + + [DllImport("SDL3", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern SDLBool SDL_GetTrayEntryEnabled(SDL_TrayEntry* entry); + + [DllImport("SDL3", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void SDL_SetTrayEntryCallback(SDL_TrayEntry* entry, [NativeTypeName("SDL_TrayCallback")] delegate* unmanaged[Cdecl] callback, [NativeTypeName("void*")] IntPtr userdata); + + [DllImport("SDL3", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void SDL_DestroyTray(SDL_Tray* tray); + + [DllImport("SDL3", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern SDL_TrayMenu* SDL_GetTrayEntryParent(SDL_TrayEntry* entry); + + [DllImport("SDL3", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern SDL_TrayEntry* SDL_GetTrayMenuParentEntry(SDL_TrayMenu* menu); + + [DllImport("SDL3", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern SDL_Tray* SDL_GetTrayMenuParentTray(SDL_TrayMenu* menu); + + [NativeTypeName("#define SDL_TRAYENTRY_BUTTON 0x00000001u")] + public const uint SDL_TRAYENTRY_BUTTON = 0x00000001U; + + [NativeTypeName("#define SDL_TRAYENTRY_CHECKBOX 0x00000002u")] + public const uint SDL_TRAYENTRY_CHECKBOX = 0x00000002U; + + [NativeTypeName("#define SDL_TRAYENTRY_SUBMENU 0x00000004u")] + public const uint SDL_TRAYENTRY_SUBMENU = 0x00000004U; + + [NativeTypeName("#define SDL_TRAYENTRY_DISABLED 0x80000000u")] + public const uint SDL_TRAYENTRY_DISABLED = 0x80000000U; + + [NativeTypeName("#define SDL_TRAYENTRY_CHECKED 0x40000000u")] + public const uint SDL_TRAYENTRY_CHECKED = 0x40000000U; + } +} diff --git a/SDL3-CS/SDL3/SDL_tray.cs b/SDL3-CS/SDL3/SDL_tray.cs new file mode 100644 index 0000000..6a9c1df --- /dev/null +++ b/SDL3-CS/SDL3/SDL_tray.cs @@ -0,0 +1,30 @@ +// 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 +{ + [Flags] + [Typedef] + public enum SDL_TrayEntryFlags : UInt32 + { + SDL_TRAYENTRY_BUTTON = SDL3.SDL_TRAYENTRY_BUTTON, + SDL_TRAYENTRY_CHECKBOX = SDL3.SDL_TRAYENTRY_CHECKBOX, + SDL_TRAYENTRY_SUBMENU = SDL3.SDL_TRAYENTRY_SUBMENU, + SDL_TRAYENTRY_DISABLED = SDL3.SDL_TRAYENTRY_DISABLED, + SDL_TRAYENTRY_CHECKED = SDL3.SDL_TRAYENTRY_CHECKED, + } + + public static partial class SDL3 + { + // The code below is currently incorrect because of https://github.com/libsdl-org/SDL/issues/11787. + // [MustDisposeResource] + // public static unsafe SDLOpaquePointerArray? SDL_GetTrayEntries(SDL_TrayMenu* menu) + // { + // int count; + // var array = SDL_GetTrayEntries(menu, &count); + // return SDLArray.CreateOpaque(array, count); + // } + } +} diff --git a/SDL3-CS/generate_bindings.py b/SDL3-CS/generate_bindings.py index 85dd003..086440f 100644 --- a/SDL3-CS/generate_bindings.py +++ b/SDL3-CS/generate_bindings.py @@ -156,6 +156,7 @@ headers = [ add("SDL3/SDL_thread.h"), add("SDL3/SDL_time.h"), add("SDL3/SDL_timer.h"), + add("SDL3/SDL_tray.h"), add("SDL3/SDL_touch.h"), add("SDL3/SDL_version.h"), add("SDL3/SDL_video.h"),