/*
  <auto-generated/>
  C# bindings for Simple DirectMedia Layer.
  Original copyright notice of input files:

  Simple DirectMedia Layer
  Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>

  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 SDL_Tray* SDL_CreateTrayWithProperties(SDL_PropertiesID props);

        [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* count);

        [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]<IntPtr, SDL_TrayEntry*, void> callback, [NativeTypeName("void*")] IntPtr userdata);

        [DllImport("SDL3", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
        public static extern void SDL_ClickTrayEntry(SDL_TrayEntry* entry);

        [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);

        [DllImport("SDL3", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
        public static extern void SDL_UpdateTrays();

        [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;

        [NativeTypeName("#define SDL_PROP_TRAY_CREATE_ICON_POINTER \"SDL.tray.create.icon\"")]
        public static ReadOnlySpan<byte> SDL_PROP_TRAY_CREATE_ICON_POINTER => "SDL.tray.create.icon"u8;

        [NativeTypeName("#define SDL_PROP_TRAY_CREATE_TOOLTIP_STRING \"SDL.tray.create.tooltip\"")]
        public static ReadOnlySpan<byte> SDL_PROP_TRAY_CREATE_TOOLTIP_STRING => "SDL.tray.create.tooltip"u8;

        [NativeTypeName("#define SDL_PROP_TRAY_CREATE_USERDATA_POINTER \"SDL.tray.create.userdata\"")]
        public static ReadOnlySpan<byte> SDL_PROP_TRAY_CREATE_USERDATA_POINTER => "SDL.tray.create.userdata"u8;

        [NativeTypeName("#define SDL_PROP_TRAY_CREATE_LEFTCLICK_CALLBACK_POINTER \"SDL.tray.create.leftclick_callback\"")]
        public static ReadOnlySpan<byte> SDL_PROP_TRAY_CREATE_LEFTCLICK_CALLBACK_POINTER => "SDL.tray.create.leftclick_callback"u8;

        [NativeTypeName("#define SDL_PROP_TRAY_CREATE_RIGHTCLICK_CALLBACK_POINTER \"SDL.tray.create.rightclick_callback\"")]
        public static ReadOnlySpan<byte> SDL_PROP_TRAY_CREATE_RIGHTCLICK_CALLBACK_POINTER => "SDL.tray.create.rightclick_callback"u8;

        [NativeTypeName("#define SDL_PROP_TRAY_CREATE_MIDDLECLICK_CALLBACK_POINTER \"SDL.tray.create.middleclick_callback\"")]
        public static ReadOnlySpan<byte> SDL_PROP_TRAY_CREATE_MIDDLECLICK_CALLBACK_POINTER => "SDL.tray.create.middleclick_callback"u8;
    }
}
