1737 lines
59 KiB
C#
1737 lines
59 KiB
C#
#region License
|
|
//
|
|
// The Open Toolkit Library License
|
|
//
|
|
// Copyright (c) 2006 - 2013 Stefanos Apostolopoulos for the Open Toolkit library.
|
|
//
|
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
// of this software and associated documentation files (the "Software"), to deal
|
|
// in the Software without restriction, including without limitation the rights to
|
|
// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
// the Software, and to permit persons to whom the Software is furnished to do
|
|
// so, subject to the following conditions:
|
|
//
|
|
// The above copyright notice and this permission notice shall be included in all
|
|
// copies or substantial portions of the Software.
|
|
//
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
|
// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
|
// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
|
// OTHER DEALINGS IN THE SOFTWARE.
|
|
//
|
|
|
|
#endregion
|
|
|
|
using System;
|
|
using System.Diagnostics;
|
|
using System.Security;
|
|
using System.Runtime.InteropServices;
|
|
|
|
#pragma warning disable 0169
|
|
|
|
namespace OpenTK.Platform.SDL2
|
|
{
|
|
using Surface = IntPtr;
|
|
using Cursor = IntPtr;
|
|
|
|
partial class SDL
|
|
{
|
|
#if ANDROID
|
|
const string lib = "libSDL2.so";
|
|
#elif IPHONE
|
|
const string lib = "__Internal";
|
|
#else
|
|
const string lib = "SDL2.dll";
|
|
#endif
|
|
|
|
public readonly static object Sync = new object();
|
|
static Nullable<Version> version;
|
|
public static Version Version
|
|
{
|
|
get
|
|
{
|
|
try
|
|
{
|
|
if (!version.HasValue)
|
|
{
|
|
version = GetVersion();
|
|
}
|
|
return version.Value;
|
|
}
|
|
catch
|
|
{
|
|
// nom nom
|
|
Debug.Print("[SDL2] Failed to retrieve version");
|
|
return new Version();
|
|
}
|
|
}
|
|
}
|
|
|
|
#region Functions
|
|
|
|
static string IntPtrToString(IntPtr ptr)
|
|
{
|
|
return Marshal.PtrToStringAnsi(ptr);
|
|
//int strlen = 0;
|
|
//while (Marshal.ReadByte(ptr) != 0)
|
|
// strlen++;
|
|
}
|
|
|
|
#region Cursor
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_CreateColorCursor", ExactSpelling = true)]
|
|
public static extern Cursor CreateColorCursor(Surface surface, int hot_x, int hot_y);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_FreeCursor", ExactSpelling = true)]
|
|
public static extern void FreeCursor(Cursor cursor);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_GetDefaultCursor", ExactSpelling = true)]
|
|
public static extern IntPtr GetDefaultCursor();
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_SetCursor", ExactSpelling = true)]
|
|
public static extern void SetCursor(Cursor cursor);
|
|
|
|
#endregion
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_AddEventWatch", ExactSpelling = true)]
|
|
public static extern void AddEventWatch(EventFilter filter, IntPtr userdata);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_AddEventWatch", ExactSpelling = true)]
|
|
public static extern void AddEventWatch(IntPtr filter, IntPtr userdata);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_CreateRGBSurfaceFrom", ExactSpelling = true)]
|
|
public static extern IntPtr CreateRGBSurfaceFrom(IntPtr pixels,
|
|
int width, int height, int depth, int pitch,
|
|
uint Rmask, uint Gmask, uint Bmask, uint Amask);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_CreateWindow", ExactSpelling = true)]
|
|
public static extern IntPtr CreateWindow(string title, int x, int y, int w, int h, WindowFlags flags);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_CreateWindowFrom", ExactSpelling = true)]
|
|
public static extern IntPtr CreateWindowFrom(IntPtr data);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_DelEventWatch", ExactSpelling = true)]
|
|
public static extern void DelEventWatch(EventFilter filter, IntPtr userdata);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_DelEventWatch", ExactSpelling = true)]
|
|
public static extern void DelEventWatch(IntPtr filter, IntPtr userdata);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_DestroyWindow", ExactSpelling = true)]
|
|
public static extern void DestroyWindow(IntPtr window);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_FreeSurface", ExactSpelling = true)]
|
|
public static extern void FreeSurface(IntPtr surface);
|
|
|
|
#region GameContoller
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_GameControllerEventState", ExactSpelling = true)]
|
|
public static extern EventState GameControllerEventState(EventState state);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_GameControllerGetAxis", ExactSpelling = true)]
|
|
public static extern short GameControllerGetAxis(IntPtr gamecontroller, GameControllerAxis axis);
|
|
|
|
/// <summary>
|
|
/// Gets the SDL joystick layer binding for the specified game controller axis
|
|
/// </summary>
|
|
/// <param name="gamecontroller">Pointer to a game controller instance returned by <c>GameControllerOpen</c>.</param>
|
|
/// <param name="axis">A value from the <c>GameControllerAxis</c> enumeration</param>
|
|
/// <returns>A GameControllerButtonBind instance describing the specified binding</returns>
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_GameControllerGetBindForAxis", ExactSpelling = true)]
|
|
public static extern GameControllerButtonBind GameControllerGetBindForAxis(IntPtr gamecontroller, GameControllerAxis axis);
|
|
|
|
/// <summary>
|
|
/// Gets the SDL joystick layer binding for the specified game controller button
|
|
/// </summary>
|
|
/// <param name="gamecontroller">Pointer to a game controller instance returned by <c>GameControllerOpen</c>.</param>
|
|
/// <param name="button">A value from the <c>GameControllerButton</c> enumeration</param>
|
|
/// <returns>A GameControllerButtonBind instance describing the specified binding</returns>
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_GameControllerGetBindForButton", ExactSpelling = true)]
|
|
public static extern GameControllerButtonBind GameControllerGetBindForButton(
|
|
IntPtr gamecontroller, GameControllerButton button);
|
|
|
|
/// <summary>
|
|
/// Gets the current state of a button on a game controller.
|
|
/// </summary>
|
|
/// <param name="gamecontroller">A game controller handle previously opened with <c>GameControllerOpen</c>.</param>
|
|
/// <param name="button">A zero-based <c>GameControllerButton</c> value.</param>
|
|
/// <returns><c>true</c> if the specified button is pressed; <c>false</c> otherwise.</returns>
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_GameControllerGetButton", ExactSpelling = true)]
|
|
public static extern bool GameControllerGetButton(IntPtr gamecontroller, GameControllerButton button);
|
|
|
|
/// <summary>
|
|
/// Retrieve the joystick handle that corresponds to the specified game controller.
|
|
/// </summary>
|
|
/// <param name="gamecontroller">A game controller handle previously opened with <c>GameControllerOpen</c>.</param>
|
|
/// <returns>A handle to a joystick, or IntPtr.Zero in case of error. The pointer is owned by the callee. Use <c>SDL.GetError</c> to retrieve error information</returns>
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_GameControllerGetJoystick", ExactSpelling = true)]
|
|
public static extern IntPtr GameControllerGetJoystick(IntPtr gamecontroller);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_GetCurrentDisplayMode", ExactSpelling = true)]
|
|
public static extern int GetCurrentDisplayMode(int displayIndex, out DisplayMode mode);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_GameControllerName", ExactSpelling = true)]
|
|
static extern IntPtr GameControllerNameInternal(IntPtr gamecontroller);
|
|
|
|
/// <summary>
|
|
/// Return the name for an openend game controller instance.
|
|
/// </summary>
|
|
/// <returns>The name of the game controller name.</returns>
|
|
/// <param name="gamecontroller">Pointer to a game controller instance returned by <c>GameControllerOpen</c>.</param>
|
|
public static string GameControllerName(IntPtr gamecontroller)
|
|
{
|
|
unsafe
|
|
{
|
|
return new string((sbyte*)GameControllerNameInternal(gamecontroller));
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Opens a game controller for use.
|
|
/// </summary>
|
|
/// <param name="joystick_index">
|
|
/// A zero-based index for the game controller.
|
|
/// This index is the value which will identify this controller in future controller events.
|
|
/// </param>
|
|
/// <returns>A handle to the game controller instance, or IntPtr.Zero in case of error.</returns>
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_GameControllerOpen", ExactSpelling = true)]
|
|
public static extern IntPtr GameControllerOpen(int joystick_index);
|
|
|
|
#endregion
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_GetDisplayBounds", ExactSpelling = true)]
|
|
public static extern int GetDisplayBounds(int displayIndex, out Rect rect);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_GetDisplayMode", ExactSpelling = true)]
|
|
public static extern int GetDisplayMode(int displayIndex, int modeIndex, out DisplayMode mode);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_GetError", ExactSpelling = true)]
|
|
static extern IntPtr GetErrorInternal();
|
|
public static string GetError()
|
|
{
|
|
return IntPtrToString(GetErrorInternal());
|
|
}
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_GetModState", ExactSpelling = true)]
|
|
public static extern Keymod GetModState();
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_GetMouseState", ExactSpelling = true)]
|
|
public static extern ButtonFlags GetMouseState(out int hx, out int hy);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_GetNumDisplayModes", ExactSpelling = true)]
|
|
public static extern int GetNumDisplayModes(int displayIndex);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_GetNumVideoDisplays", ExactSpelling = true)]
|
|
public static extern int GetNumVideoDisplays();
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_GetScancodeFromKey", ExactSpelling = true)]
|
|
public static extern Scancode GetScancodeFromKey(Keycode key);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_GetVersion", ExactSpelling = true)]
|
|
public static extern void GetVersion(out Version version);
|
|
public static Version GetVersion()
|
|
{
|
|
Version v;
|
|
GetVersion(out v);
|
|
return v;
|
|
}
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_GetWindowID", ExactSpelling = true)]
|
|
public static extern uint GetWindowID(IntPtr window);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_GetWindowPosition", ExactSpelling = true)]
|
|
public static extern void GetWindowPosition(IntPtr window, out int x, out int y);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_GetWindowSize", ExactSpelling = true)]
|
|
public static extern void GetWindowSize(IntPtr window, out int w, out int h);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_GetWindowTitle", ExactSpelling = true)]
|
|
static extern IntPtr GetWindowTitlePrivate(IntPtr window);
|
|
public static string GetWindowTitle(IntPtr window)
|
|
{
|
|
return Marshal.PtrToStringAnsi(GetWindowTitlePrivate(window));
|
|
}
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_HideWindow", ExactSpelling = true)]
|
|
public static extern void HideWindow(IntPtr window);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_Init", ExactSpelling = true)]
|
|
public static extern int Init(SystemFlags flags);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_InitSubSystem", ExactSpelling = true)]
|
|
public static extern int InitSubSystem(SystemFlags flags);
|
|
|
|
/// <summary>
|
|
/// Determines if the specified joystick is supported by the GameController API.
|
|
/// </summary>
|
|
/// <returns><c>true</c> if joystick_index is supported by the GameController API; <c>false</c> otherwise.</returns>
|
|
/// <param name="joystick_index">The index of the joystick to check.</param>
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_IsGameController", ExactSpelling = true)]
|
|
public static extern bool IsGameController(int joystick_index);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_JoystickClose", ExactSpelling = true)]
|
|
public static extern void JoystickClose(IntPtr joystick);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_JoystickEventState", ExactSpelling = true)]
|
|
public static extern EventState JoystickEventState(EventState enabled);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_JoystickGetAxis", ExactSpelling = true)]
|
|
public static extern short JoystickGetAxis(IntPtr joystick, int axis);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_JoystickGetButton", ExactSpelling = true)]
|
|
public static extern byte JoystickGetButton(IntPtr joystick, int button);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_JoystickGetGUID", ExactSpelling = true)]
|
|
public static extern JoystickGuid JoystickGetGUID(IntPtr joystick);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_JoystickName", ExactSpelling = true)]
|
|
static extern IntPtr JoystickNameInternal(IntPtr joystick);
|
|
public static string JoystickName(IntPtr joystick)
|
|
{
|
|
unsafe
|
|
{
|
|
return new string((sbyte*)JoystickNameInternal(joystick));
|
|
}
|
|
}
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_JoystickNumAxes", ExactSpelling = true)]
|
|
public static extern int JoystickNumAxes(IntPtr joystick);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_JoystickNumBalls", ExactSpelling = true)]
|
|
public static extern int JoystickNumBalls(IntPtr joystick);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_JoystickNumButtons", ExactSpelling = true)]
|
|
public static extern int JoystickNumButtons(IntPtr joystick);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_JoystickNumHats", ExactSpelling = true)]
|
|
public static extern int JoystickNumHats(IntPtr joystick);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_JoystickOpen", ExactSpelling = true)]
|
|
public static extern IntPtr JoystickOpen(int device_index);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_JoystickUpdate", ExactSpelling = true)]
|
|
public static extern void JoystickUpdate();
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_MaximizeWindow", ExactSpelling = true)]
|
|
public static extern void MaximizeWindow(IntPtr window);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_MinimizeWindow", ExactSpelling = true)]
|
|
public static extern void MinimizeWindow(IntPtr window);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_NumJoysticks", ExactSpelling = true)]
|
|
public static extern int NumJoysticks();
|
|
|
|
public static int PeepEvents(ref Event e, EventAction action, EventType min, EventType max)
|
|
{
|
|
unsafe
|
|
{
|
|
fixed (Event* pe = &e)
|
|
{
|
|
return PeepEvents(pe, 1, action, min, max);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static int PeepEvents(Event[] e, int count, EventAction action, EventType min, EventType max)
|
|
{
|
|
if (e == null)
|
|
throw new ArgumentNullException();
|
|
if (count <= 0 || count > e.Length)
|
|
throw new ArgumentOutOfRangeException();
|
|
|
|
unsafe
|
|
{
|
|
fixed (Event *pe = e)
|
|
{
|
|
return PeepEvents(pe, count, action, min, max);
|
|
}
|
|
}
|
|
}
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_PeepEvents", ExactSpelling = true)]
|
|
unsafe static extern int PeepEvents(Event* e, int count, EventAction action, EventType min, EventType max);
|
|
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_PixelFormatEnumToMasks", ExactSpelling = true)]
|
|
public static extern bool PixelFormatEnumToMasks(uint format, out int bpp,
|
|
out uint rmask, out uint gmask, out uint bmask, out uint amask);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_PollEvent", ExactSpelling = true)]
|
|
public static extern int PollEvent(out Event e);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_PumpEvents", ExactSpelling = true)]
|
|
public static extern void PumpEvents();
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_PushEvent", ExactSpelling = true)]
|
|
public static extern int PushEvent(ref Event @event);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_RaiseWindow", ExactSpelling = true)]
|
|
public static extern void RaiseWindow(IntPtr window);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_RestoreWindow", ExactSpelling = true)]
|
|
public static extern void RestoreWindow(IntPtr window);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_SetRelativeMouseMode", ExactSpelling = true)]
|
|
public static extern int SetRelativeMouseMode(bool enabled);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_SetWindowBordered", ExactSpelling = true)]
|
|
public static extern void SetWindowBordered(IntPtr window, bool bordered);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_SetWindowFullscreen", ExactSpelling = true)]
|
|
public static extern int SetWindowFullscreen(IntPtr window, uint flags);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_SetWindowGrab", ExactSpelling = true)]
|
|
public static extern void SetWindowGrab(IntPtr window, bool grabbed);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_SetWindowIcon", ExactSpelling = true)]
|
|
public static extern void SetWindowIcon(IntPtr window, IntPtr icon);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_SetWindowPosition", ExactSpelling = true)]
|
|
public static extern void SetWindowPosition(IntPtr window, int x, int y);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_SetWindowSize", ExactSpelling = true)]
|
|
public static extern void SetWindowSize(IntPtr window, int x, int y);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_SetWindowTitle", ExactSpelling = true)]
|
|
public static extern void SetWindowTitle(IntPtr window, string title);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_ShowCursor", ExactSpelling = true)]
|
|
public static extern int ShowCursor(bool toggle);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_ShowWindow", ExactSpelling = true)]
|
|
public static extern void ShowWindow(IntPtr window);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_WasInit", ExactSpelling = true)]
|
|
public static extern bool WasInit(SystemFlags flags);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_WarpMouseInWindow", ExactSpelling = true)]
|
|
public static extern void WarpMouseInWindow(IntPtr window, int x, int y);
|
|
|
|
#region SysWM
|
|
|
|
/// <summary>
|
|
/// Retrieves driver-dependent window information.
|
|
/// </summary>
|
|
/// <param name="window">
|
|
/// The window about which information is being requested.
|
|
/// </param>
|
|
/// <param name="info">
|
|
/// Returns driver-dependent information about the specified window.
|
|
/// </param>
|
|
/// <returns>
|
|
/// True, if the function is implemented and the version number of the info struct is valid;
|
|
/// false, otherwise.
|
|
/// </returns>
|
|
public static bool GetWindowWMInfo(IntPtr window, out SysWMInfo info)
|
|
{
|
|
info = new SysWMInfo();
|
|
info.Version = GetVersion();
|
|
return GetWindowWMInfoInternal(window, ref info);
|
|
}
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_GetWindowWMInfo", ExactSpelling = true)]
|
|
static extern bool GetWindowWMInfoInternal(IntPtr window, ref SysWMInfo info);
|
|
|
|
#endregion
|
|
|
|
public partial class GL
|
|
{
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_GL_CreateContext", ExactSpelling = true)]
|
|
public static extern IntPtr CreateContext(IntPtr window);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_GL_DeleteContext", ExactSpelling = true)]
|
|
public static extern void DeleteContext(IntPtr context);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_GL_GetAttribute", ExactSpelling = true)]
|
|
public static extern int GetAttribute(ContextAttribute attr, out int value);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_GL_GetCurrentContext", ExactSpelling = true)]
|
|
public static extern IntPtr GetCurrentContext();
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_GL_GetDrawableSize", ExactSpelling = true)]
|
|
public static extern void GetDrawableSize(IntPtr window, out int w, out int h);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_GL_GetProcAddress", ExactSpelling = true)]
|
|
public static extern IntPtr GetProcAddress(IntPtr proc);
|
|
public static IntPtr GetProcAddress(string proc)
|
|
{
|
|
IntPtr p = Marshal.StringToHGlobalAnsi(proc);
|
|
try
|
|
{
|
|
return GetProcAddress(p);
|
|
}
|
|
finally
|
|
{
|
|
Marshal.FreeHGlobal(p);
|
|
}
|
|
}
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_GL_GetSwapInterval", ExactSpelling = true)]
|
|
public static extern int GetSwapInterval();
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_GL_MakeCurrent", ExactSpelling = true)]
|
|
public static extern int MakeCurrent(IntPtr window, IntPtr context);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_GL_SetAttribute", ExactSpelling = true)]
|
|
public static extern int SetAttribute(ContextAttribute attr, int value);
|
|
public static int SetAttribute(ContextAttribute attr, ContextFlags value)
|
|
{
|
|
return SetAttribute(attr, (int)value);
|
|
}
|
|
public static int SetAttribute(ContextAttribute attr, ContextProfileFlags value)
|
|
{
|
|
return SetAttribute(attr, (int)value);
|
|
}
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_GL_SetSwapInterval", ExactSpelling = true)]
|
|
public static extern int SetSwapInterval(int interval);
|
|
|
|
[SuppressUnmanagedCodeSecurity]
|
|
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_GL_SwapWindow", ExactSpelling = true)]
|
|
public static extern void SwapWindow(IntPtr window);
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
|
|
#region Delegates
|
|
|
|
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
|
internal delegate int EventFilter(IntPtr userdata, IntPtr @event);
|
|
|
|
#endregion
|
|
|
|
#region Enums
|
|
|
|
enum Button : byte
|
|
{
|
|
Left = 1,
|
|
Middle,
|
|
Right,
|
|
X1,
|
|
X2
|
|
}
|
|
|
|
[Flags]
|
|
enum ButtonFlags
|
|
{
|
|
Left = 1 << (Button.Left - 1),
|
|
Middle = 1 << (Button.Middle - 1),
|
|
Right = 1 << (Button.Right - 1),
|
|
X1 = 1 << (Button.X1 - 1),
|
|
X2 = 1 << (Button.X2 - 1),
|
|
}
|
|
|
|
enum ContextAttribute
|
|
{
|
|
RED_SIZE,
|
|
GREEN_SIZE,
|
|
BLUE_SIZE,
|
|
ALPHA_SIZE,
|
|
BUFFER_SIZE,
|
|
DOUBLEBUFFER,
|
|
DEPTH_SIZE,
|
|
STENCIL_SIZE,
|
|
ACCUM_RED_SIZE,
|
|
ACCUM_GREEN_SIZE,
|
|
ACCUM_BLUE_SIZE,
|
|
ACCUM_ALPHA_SIZE,
|
|
STEREO,
|
|
MULTISAMPLEBUFFERS,
|
|
MULTISAMPLESAMPLES,
|
|
ACCELERATED_VISUAL,
|
|
RETAINED_BACKING,
|
|
CONTEXT_MAJOR_VERSION,
|
|
CONTEXT_MINOR_VERSION,
|
|
CONTEXT_EGL,
|
|
CONTEXT_FLAGS,
|
|
CONTEXT_PROFILE_MASK,
|
|
SHARE_WITH_CURRENT_CONTEXT
|
|
}
|
|
|
|
[Flags]
|
|
enum ContextFlags
|
|
{
|
|
DEBUG = 0x0001,
|
|
FORWARD_COMPATIBLE = 0x0002,
|
|
ROBUST_ACCESS = 0x0004,
|
|
RESET_ISOLATION = 0x0008
|
|
}
|
|
|
|
[Flags]
|
|
enum ContextProfileFlags
|
|
{
|
|
CORE = 0x0001,
|
|
COMPATIBILITY = 0x0002,
|
|
ES = 0x0004
|
|
}
|
|
|
|
enum EventAction
|
|
{
|
|
Add,
|
|
Peek,
|
|
Get
|
|
}
|
|
|
|
enum EventState
|
|
{
|
|
Query = -1,
|
|
Ignore = 0,
|
|
Enable = 1
|
|
}
|
|
|
|
enum EventType
|
|
{
|
|
FIRSTEVENT = 0,
|
|
QUIT = 0x100,
|
|
WINDOWEVENT = 0x200,
|
|
SYSWMEVENT,
|
|
KEYDOWN = 0x300,
|
|
KEYUP,
|
|
TEXTEDITING,
|
|
TEXTINPUT,
|
|
MOUSEMOTION = 0x400,
|
|
MOUSEBUTTONDOWN,
|
|
MOUSEBUTTONUP,
|
|
MOUSEWHEEL,
|
|
JOYAXISMOTION = 0x600,
|
|
JOYBALLMOTION,
|
|
JOYHATMOTION,
|
|
JOYBUTTONDOWN,
|
|
JOYBUTTONUP,
|
|
JOYDEVICEADDED,
|
|
JOYDEVICEREMOVED,
|
|
CONTROLLERAXISMOTION = 0x650,
|
|
CONTROLLERBUTTONDOWN,
|
|
CONTROLLERBUTTONUP,
|
|
CONTROLLERDEVICEADDED,
|
|
CONTROLLERDEVICEREMOVED,
|
|
CONTROLLERDEVICEREMAPPED,
|
|
FINGERDOWN = 0x700,
|
|
FINGERUP,
|
|
FINGERMOTION,
|
|
DOLLARGESTURE = 0x800,
|
|
DOLLARRECORD,
|
|
MULTIGESTURE,
|
|
CLIPBOARDUPDATE = 0x900,
|
|
DROPFILE = 0x1000,
|
|
USEREVENT = 0x8000,
|
|
LASTEVENT = 0xFFFF
|
|
}
|
|
|
|
enum GameControllerAxis : byte
|
|
{
|
|
Invalid = 0xff,
|
|
LeftX = 0,
|
|
LeftY,
|
|
RightX,
|
|
RightY,
|
|
TriggerLeft,
|
|
TriggerRight,
|
|
Max
|
|
}
|
|
|
|
enum GameControllerButton : byte
|
|
{
|
|
INVALID = 0xff,
|
|
A = 0,
|
|
B,
|
|
X,
|
|
Y,
|
|
BACK,
|
|
GUIDE,
|
|
START,
|
|
LEFTSTICK,
|
|
RIGHTSTICK,
|
|
LEFTSHOULDER,
|
|
RIGHTSHOULDER,
|
|
DPAD_UP,
|
|
DPAD_DOWN,
|
|
DPAD_LEFT,
|
|
DPAD_RIGHT,
|
|
Max
|
|
}
|
|
|
|
enum GameControllerBindType : byte
|
|
{
|
|
None = 0,
|
|
Button,
|
|
Axis,
|
|
Hat
|
|
}
|
|
|
|
[Flags]
|
|
enum HatPosition : byte
|
|
{
|
|
Centered = 0x00,
|
|
Up = 0x01,
|
|
Right = 0x02,
|
|
Down = 0x03,
|
|
Left = 0x04,
|
|
RightUp = Right | Up,
|
|
RightDown = Right | Down,
|
|
LeftUp = Left | Up,
|
|
LeftDown = Left | Down
|
|
}
|
|
|
|
enum Keycode
|
|
{
|
|
UNKNOWN = 0,
|
|
RETURN = '\r',
|
|
ESCAPE = 27, // '\033' octal
|
|
BACKSPACE = '\b',
|
|
TAB = '\t',
|
|
SPACE = ' ',
|
|
EXCLAIM = '!',
|
|
QUOTEDBL = '"',
|
|
HASH = '#',
|
|
PERCENT = '%',
|
|
DOLLAR = '$',
|
|
AMPERSAND = '&',
|
|
QUOTE = '\'',
|
|
LEFTPAREN = '(',
|
|
RIGHTPAREN = ')',
|
|
ASTERISK = '*',
|
|
PLUS = '+',
|
|
COMMA = ',',
|
|
MINUS = '-',
|
|
PERIOD = '.',
|
|
SLASH = '/',
|
|
Num0 = '0',
|
|
Num1 = '1',
|
|
Num2 = '2',
|
|
Num3 = '3',
|
|
Num4 = '4',
|
|
Num5 = '5',
|
|
Num6 = '6',
|
|
Num7 = '7',
|
|
Num8 = '8',
|
|
Num9 = '9',
|
|
COLON = ':',
|
|
SEMICOLON = ';',
|
|
LESS = '<',
|
|
EQUALS = '=',
|
|
GREATER = '>',
|
|
QUESTION = '?',
|
|
AT = '@',
|
|
LEFTBRACKET = '[',
|
|
BACKSLASH = '\\',
|
|
RIGHTBRACKET = ']',
|
|
CARET = '^',
|
|
UNDERSCORE = '_',
|
|
BACKQUOTE = '`',
|
|
a = 'a',
|
|
b = 'b',
|
|
c = 'c',
|
|
d = 'd',
|
|
e = 'e',
|
|
f = 'f',
|
|
g = 'g',
|
|
h = 'h',
|
|
i = 'i',
|
|
j = 'j',
|
|
k = 'k',
|
|
l = 'l',
|
|
m = 'm',
|
|
n = 'n',
|
|
o = 'o',
|
|
p = 'p',
|
|
q = 'q',
|
|
r = 'r',
|
|
s = 's',
|
|
t = 't',
|
|
u = 'u',
|
|
v = 'v',
|
|
w = 'w',
|
|
x = 'x',
|
|
y = 'y',
|
|
z = 'z',
|
|
CAPSLOCK = (1 << 30) | (int)Scancode.CAPSLOCK,
|
|
F1 = (1 << 30) | (int)Scancode.F1,
|
|
F2 = (1 << 30) | (int)Scancode.F2,
|
|
F3 = (1 << 30) | (int)Scancode.F3,
|
|
F4 = (1 << 30) | (int)Scancode.F4,
|
|
F5 = (1 << 30) | (int)Scancode.F5,
|
|
F6 = (1 << 30) | (int)Scancode.F6,
|
|
F7 = (1 << 30) | (int)Scancode.F7,
|
|
F8 = (1 << 30) | (int)Scancode.F8,
|
|
F9 = (1 << 30) | (int)Scancode.F9,
|
|
F10 = (1 << 30) | (int)Scancode.F10,
|
|
F11 = (1 << 30) | (int)Scancode.F11,
|
|
F12 = (1 << 30) | (int)Scancode.F12,
|
|
PRINTSCREEN = (1 << 30) | (int)Scancode.PRINTSCREEN,
|
|
SCROLLLOCK = (1 << 30) | (int)Scancode.SCROLLLOCK,
|
|
PAUSE = (1 << 30) | (int)Scancode.PAUSE,
|
|
INSERT = (1 << 30) | (int)Scancode.INSERT,
|
|
HOME = (1 << 30) | (int)Scancode.HOME,
|
|
PAGEUP = (1 << 30) | (int)Scancode.PAGEUP,
|
|
DELETE = 127, // '\177' octal
|
|
END = (1 << 30) | (int)Scancode.END,
|
|
PAGEDOWN = (1 << 30) | (int)Scancode.PAGEDOWN,
|
|
RIGHT = (1 << 30) | (int)Scancode.RIGHT,
|
|
LEFT = (1 << 30) | (int)Scancode.LEFT,
|
|
DOWN = (1 << 30) | (int)Scancode.DOWN,
|
|
UP = (1 << 30) | (int)Scancode.UP,
|
|
NUMLOCKCLEAR = (1 << 30) | (int)Scancode.NUMLOCKCLEAR,
|
|
KP_DIVIDE = (1 << 30) | (int)Scancode.KP_DIVIDE,
|
|
KP_MULTIPLY = (1 << 30) | (int)Scancode.KP_MULTIPLY,
|
|
KP_MINUS = (1 << 30) | (int)Scancode.KP_MINUS,
|
|
KP_PLUS = (1 << 30) | (int)Scancode.KP_PLUS,
|
|
KP_ENTER = (1 << 30) | (int)Scancode.KP_ENTER,
|
|
KP_1 = (1 << 30) | (int)Scancode.KP_1,
|
|
KP_2 = (1 << 30) | (int)Scancode.KP_2,
|
|
KP_3 = (1 << 30) | (int)Scancode.KP_3,
|
|
KP_4 = (1 << 30) | (int)Scancode.KP_4,
|
|
KP_5 = (1 << 30) | (int)Scancode.KP_5,
|
|
KP_6 = (1 << 30) | (int)Scancode.KP_6,
|
|
KP_7 = (1 << 30) | (int)Scancode.KP_7,
|
|
KP_8 = (1 << 30) | (int)Scancode.KP_8,
|
|
KP_9 = (1 << 30) | (int)Scancode.KP_9,
|
|
KP_0 = (1 << 30) | (int)Scancode.KP_0,
|
|
KP_PERIOD = (1 << 30) | (int)Scancode.KP_PERIOD,
|
|
APPLICATION = (1 << 30) | (int)Scancode.APPLICATION,
|
|
POWER = (1 << 30) | (int)Scancode.POWER,
|
|
KP_EQUALS = (1 << 30) | (int)Scancode.KP_EQUALS,
|
|
F13 = (1 << 30) | (int)Scancode.F13,
|
|
F14 = (1 << 30) | (int)Scancode.F14,
|
|
F15 = (1 << 30) | (int)Scancode.F15,
|
|
F16 = (1 << 30) | (int)Scancode.F16,
|
|
F17 = (1 << 30) | (int)Scancode.F17,
|
|
F18 = (1 << 30) | (int)Scancode.F18,
|
|
F19 = (1 << 30) | (int)Scancode.F19,
|
|
F20 = (1 << 30) | (int)Scancode.F20,
|
|
F21 = (1 << 30) | (int)Scancode.F21,
|
|
F22 = (1 << 30) | (int)Scancode.F22,
|
|
F23 = (1 << 30) | (int)Scancode.F23,
|
|
F24 = (1 << 30) | (int)Scancode.F24,
|
|
EXECUTE = (1 << 30) | (int)Scancode.EXECUTE,
|
|
HELP = (1 << 30) | (int)Scancode.HELP,
|
|
MENU = (1 << 30) | (int)Scancode.MENU,
|
|
SELECT = (1 << 30) | (int)Scancode.SELECT,
|
|
STOP = (1 << 30) | (int)Scancode.STOP,
|
|
AGAIN = (1 << 30) | (int)Scancode.AGAIN,
|
|
UNDO = (1 << 30) | (int)Scancode.UNDO,
|
|
CUT = (1 << 30) | (int)Scancode.CUT,
|
|
COPY = (1 << 30) | (int)Scancode.COPY,
|
|
PASTE = (1 << 30) | (int)Scancode.PASTE,
|
|
FIND = (1 << 30) | (int)Scancode.FIND,
|
|
MUTE = (1 << 30) | (int)Scancode.MUTE,
|
|
VOLUMEUP = (1 << 30) | (int)Scancode.VOLUMEUP,
|
|
VOLUMEDOWN = (1 << 30) | (int)Scancode.VOLUMEDOWN,
|
|
KP_COMMA = (1 << 30) | (int)Scancode.KP_COMMA,
|
|
KP_EQUALSAS400 = (1 << 30) | (int)Scancode.KP_EQUALSAS400,
|
|
ALTERASE = (1 << 30) | (int)Scancode.ALTERASE,
|
|
SYSREQ = (1 << 30) | (int)Scancode.SYSREQ,
|
|
CANCEL = (1 << 30) | (int)Scancode.CANCEL,
|
|
CLEAR = (1 << 30) | (int)Scancode.CLEAR,
|
|
PRIOR = (1 << 30) | (int)Scancode.PRIOR,
|
|
RETURN2 = (1 << 30) | (int)Scancode.RETURN2,
|
|
SEPARATOR = (1 << 30) | (int)Scancode.SEPARATOR,
|
|
OUT = (1 << 30) | (int)Scancode.OUT,
|
|
OPER = (1 << 30) | (int)Scancode.OPER,
|
|
CLEARAGAIN = (1 << 30) | (int)Scancode.CLEARAGAIN,
|
|
CRSEL = (1 << 30) | (int)Scancode.CRSEL,
|
|
EXSEL = (1 << 30) | (int)Scancode.EXSEL,
|
|
KP_00 = (1 << 30) | (int)Scancode.KP_00,
|
|
KP_000 = (1 << 30) | (int)Scancode.KP_000,
|
|
THOUSANDSSEPARATOR = (1 << 30) | (int)Scancode.THOUSANDSSEPARATOR,
|
|
DECIMALSEPARATOR = (1 << 30) | (int)Scancode.DECIMALSEPARATOR,
|
|
CURRENCYUNIT = (1 << 30) | (int)Scancode.CURRENCYUNIT,
|
|
CURRENCYSUBUNIT = (1 << 30) | (int)Scancode.CURRENCYSUBUNIT,
|
|
KP_LEFTPAREN = (1 << 30) | (int)Scancode.KP_LEFTPAREN,
|
|
KP_RIGHTPAREN = (1 << 30) | (int)Scancode.KP_RIGHTPAREN,
|
|
KP_LEFTBRACE = (1 << 30) | (int)Scancode.KP_LEFTBRACE,
|
|
KP_RIGHTBRACE = (1 << 30) | (int)Scancode.KP_RIGHTBRACE,
|
|
KP_TAB = (1 << 30) | (int)Scancode.KP_TAB,
|
|
KP_BACKSPACE = (1 << 30) | (int)Scancode.KP_BACKSPACE,
|
|
KP_A = (1 << 30) | (int)Scancode.KP_A,
|
|
KP_B = (1 << 30) | (int)Scancode.KP_B,
|
|
KP_C = (1 << 30) | (int)Scancode.KP_C,
|
|
KP_D = (1 << 30) | (int)Scancode.KP_D,
|
|
KP_E = (1 << 30) | (int)Scancode.KP_E,
|
|
KP_F = (1 << 30) | (int)Scancode.KP_F,
|
|
KP_XOR = (1 << 30) | (int)Scancode.KP_XOR,
|
|
KP_POWER = (1 << 30) | (int)Scancode.KP_POWER,
|
|
KP_PERCENT = (1 << 30) | (int)Scancode.KP_PERCENT,
|
|
KP_LESS = (1 << 30) | (int)Scancode.KP_LESS,
|
|
KP_GREATER = (1 << 30) | (int)Scancode.KP_GREATER,
|
|
KP_AMPERSAND = (1 << 30) | (int)Scancode.KP_AMPERSAND,
|
|
KP_DBLAMPERSAND = (1 << 30) | (int)Scancode.KP_DBLAMPERSAND,
|
|
KP_VERTICALBAR = (1 << 30) | (int)Scancode.KP_VERTICALBAR,
|
|
KP_DBLVERTICALBAR = (1 << 30) | (int)Scancode.KP_DBLVERTICALBAR,
|
|
KP_COLON = (1 << 30) | (int)Scancode.KP_COLON,
|
|
KP_HASH = (1 << 30) | (int)Scancode.KP_HASH,
|
|
KP_SPACE = (1 << 30) | (int)Scancode.KP_SPACE,
|
|
KP_AT = (1 << 30) | (int)Scancode.KP_AT,
|
|
KP_EXCLAM = (1 << 30) | (int)Scancode.KP_EXCLAM,
|
|
KP_MEMSTORE = (1 << 30) | (int)Scancode.KP_MEMSTORE,
|
|
KP_MEMRECALL = (1 << 30) | (int)Scancode.KP_MEMRECALL,
|
|
KP_MEMCLEAR = (1 << 30) | (int)Scancode.KP_MEMCLEAR,
|
|
KP_MEMADD = (1 << 30) | (int)Scancode.KP_MEMADD,
|
|
KP_MEMSUBTRACT = (1 << 30) | (int)Scancode.KP_MEMSUBTRACT,
|
|
KP_MEMMULTIPLY = (1 << 30) | (int)Scancode.KP_MEMMULTIPLY,
|
|
KP_MEMDIVIDE = (1 << 30) | (int)Scancode.KP_MEMDIVIDE,
|
|
KP_PLUSMINUS = (1 << 30) | (int)Scancode.KP_PLUSMINUS,
|
|
KP_CLEAR = (1 << 30) | (int)Scancode.KP_CLEAR,
|
|
KP_CLEARENTRY = (1 << 30) | (int)Scancode.KP_CLEARENTRY,
|
|
KP_BINARY = (1 << 30) | (int)Scancode.KP_BINARY,
|
|
KP_OCTAL = (1 << 30) | (int)Scancode.KP_OCTAL,
|
|
KP_DECIMAL = (1 << 30) | (int)Scancode.KP_DECIMAL,
|
|
KP_HEXADECIMAL = (1 << 30) | (int)Scancode.KP_HEXADECIMAL,
|
|
LCTRL = (1 << 30) | (int)Scancode.LCTRL,
|
|
LSHIFT = (1 << 30) | (int)Scancode.LSHIFT,
|
|
LALT = (1 << 30) | (int)Scancode.LALT,
|
|
LGUI = (1 << 30) | (int)Scancode.LGUI,
|
|
RCTRL = (1 << 30) | (int)Scancode.RCTRL,
|
|
RSHIFT = (1 << 30) | (int)Scancode.RSHIFT,
|
|
RALT = (1 << 30) | (int)Scancode.RALT,
|
|
RGUI = (1 << 30) | (int)Scancode.RGUI,
|
|
MODE = (1 << 30) | (int)Scancode.MODE,
|
|
AUDIONEXT = (1 << 30) | (int)Scancode.AUDIONEXT,
|
|
AUDIOPREV = (1 << 30) | (int)Scancode.AUDIOPREV,
|
|
AUDIOSTOP = (1 << 30) | (int)Scancode.AUDIOSTOP,
|
|
AUDIOPLAY = (1 << 30) | (int)Scancode.AUDIOPLAY,
|
|
AUDIOMUTE = (1 << 30) | (int)Scancode.AUDIOMUTE,
|
|
MEDIASELECT = (1 << 30) | (int)Scancode.MEDIASELECT,
|
|
WWW = (1 << 30) | (int)Scancode.WWW,
|
|
MAIL = (1 << 30) | (int)Scancode.MAIL,
|
|
CALCULATOR = (1 << 30) | (int)Scancode.CALCULATOR,
|
|
COMPUTER = (1 << 30) | (int)Scancode.COMPUTER,
|
|
AC_SEARCH = (1 << 30) | (int)Scancode.AC_SEARCH,
|
|
AC_HOME = (1 << 30) | (int)Scancode.AC_HOME,
|
|
AC_BACK = (1 << 30) | (int)Scancode.AC_BACK,
|
|
AC_FORWARD = (1 << 30) | (int)Scancode.AC_FORWARD,
|
|
AC_STOP = (1 << 30) | (int)Scancode.AC_STOP,
|
|
AC_REFRESH = (1 << 30) | (int)Scancode.AC_REFRESH,
|
|
AC_BOOKMARKS = (1 << 30) | (int)Scancode.AC_BOOKMARKS,
|
|
BRIGHTNESSDOWN = (1 << 30) | (int)Scancode.BRIGHTNESSDOWN,
|
|
BRIGHTNESSUP = (1 << 30) | (int)Scancode.BRIGHTNESSUP,
|
|
DISPLAYSWITCH = (1 << 30) | (int)Scancode.DISPLAYSWITCH,
|
|
KBDILLUMTOGGLE = (1 << 30) | (int)Scancode.KBDILLUMTOGGLE,
|
|
KBDILLUMDOWN = (1 << 30) | (int)Scancode.KBDILLUMDOWN,
|
|
KBDILLUMUP = (1 << 30) | (int)Scancode.KBDILLUMUP,
|
|
EJECT = (1 << 30) | (int)Scancode.EJECT,
|
|
SLEEP = (1 << 30) | (int)Scancode.SLEEP
|
|
}
|
|
|
|
[Flags]
|
|
enum Keymod : ushort
|
|
{
|
|
NONE = 0x0000,
|
|
LSHIFT = 0x0001,
|
|
RSHIFT = 0x0002,
|
|
LCTRL = 0x0040,
|
|
RCTRL = 0x0080,
|
|
LALT = 0x0100,
|
|
RALT = 0x0200,
|
|
LGUI = 0x0400,
|
|
RGUI = 0x0800,
|
|
NUM = 0x1000,
|
|
CAPS = 0x2000,
|
|
MODE = 0x4000,
|
|
RESERVED = 0x8000,
|
|
CTRL = (LCTRL | RCTRL),
|
|
SHIFT = (LSHIFT | RSHIFT),
|
|
ALT = (LALT | RALT),
|
|
GUI = (LGUI | RGUI)
|
|
}
|
|
|
|
enum Scancode
|
|
{
|
|
UNKNOWN = 0,
|
|
A = 4,
|
|
B = 5,
|
|
C = 6,
|
|
D = 7,
|
|
E = 8,
|
|
F = 9,
|
|
G = 10,
|
|
H = 11,
|
|
I = 12,
|
|
J = 13,
|
|
K = 14,
|
|
L = 15,
|
|
M = 16,
|
|
N = 17,
|
|
O = 18,
|
|
P = 19,
|
|
Q = 20,
|
|
R = 21,
|
|
S = 22,
|
|
T = 23,
|
|
U = 24,
|
|
V = 25,
|
|
W = 26,
|
|
X = 27,
|
|
Y = 28,
|
|
Z = 29,
|
|
Num1 = 30,
|
|
Num2 = 31,
|
|
Num3 = 32,
|
|
Num4 = 33,
|
|
Num5 = 34,
|
|
Num6 = 35,
|
|
Num7 = 36,
|
|
Num8 = 37,
|
|
Num9 = 38,
|
|
Num0 = 39,
|
|
RETURN = 40,
|
|
ESCAPE = 41,
|
|
BACKSPACE = 42,
|
|
TAB = 43,
|
|
SPACE = 44,
|
|
MINUS = 45,
|
|
EQUALS = 46,
|
|
LEFTBRACKET = 47,
|
|
RIGHTBRACKET = 48,
|
|
BACKSLASH = 49,
|
|
NONUSHASH = 50,
|
|
SEMICOLON = 51,
|
|
APOSTROPHE = 52,
|
|
GRAVE = 53,
|
|
COMMA = 54,
|
|
PERIOD = 55,
|
|
SLASH = 56,
|
|
CAPSLOCK = 57,
|
|
F1 = 58,
|
|
F2 = 59,
|
|
F3 = 60,
|
|
F4 = 61,
|
|
F5 = 62,
|
|
F6 = 63,
|
|
F7 = 64,
|
|
F8 = 65,
|
|
F9 = 66,
|
|
F10 = 67,
|
|
F11 = 68,
|
|
F12 = 69,
|
|
PRINTSCREEN = 70,
|
|
SCROLLLOCK = 71,
|
|
PAUSE = 72,
|
|
INSERT = 73,
|
|
HOME = 74,
|
|
PAGEUP = 75,
|
|
DELETE = 76,
|
|
END = 77,
|
|
PAGEDOWN = 78,
|
|
RIGHT = 79,
|
|
LEFT = 80,
|
|
DOWN = 81,
|
|
UP = 82,
|
|
NUMLOCKCLEAR = 83,
|
|
KP_DIVIDE = 84,
|
|
KP_MULTIPLY = 85,
|
|
KP_MINUS = 86,
|
|
KP_PLUS = 87,
|
|
KP_ENTER = 88,
|
|
KP_1 = 89,
|
|
KP_2 = 90,
|
|
KP_3 = 91,
|
|
KP_4 = 92,
|
|
KP_5 = 93,
|
|
KP_6 = 94,
|
|
KP_7 = 95,
|
|
KP_8 = 96,
|
|
KP_9 = 97,
|
|
KP_0 = 98,
|
|
KP_PERIOD = 99,
|
|
NONUSBACKSLASH = 100,
|
|
APPLICATION = 101,
|
|
POWER = 102,
|
|
KP_EQUALS = 103,
|
|
F13 = 104,
|
|
F14 = 105,
|
|
F15 = 106,
|
|
F16 = 107,
|
|
F17 = 108,
|
|
F18 = 109,
|
|
F19 = 110,
|
|
F20 = 111,
|
|
F21 = 112,
|
|
F22 = 113,
|
|
F23 = 114,
|
|
F24 = 115,
|
|
EXECUTE = 116,
|
|
HELP = 117,
|
|
MENU = 118,
|
|
SELECT = 119,
|
|
STOP = 120,
|
|
AGAIN = 121,
|
|
UNDO = 122,
|
|
CUT = 123,
|
|
COPY = 124,
|
|
PASTE = 125,
|
|
FIND = 126,
|
|
MUTE = 127,
|
|
VOLUMEUP = 128,
|
|
VOLUMEDOWN = 129,
|
|
// not sure whether there's a reason to enable these
|
|
// LOCKINGCAPSLOCK = 130,
|
|
// LOCKINGNUMLOCK = 131,
|
|
// LOCKINGSCROLLLOCK = 132,
|
|
KP_COMMA = 133,
|
|
KP_EQUALSAS400 = 134,
|
|
INTERNATIONAL1 = 135,
|
|
INTERNATIONAL2 = 136,
|
|
INTERNATIONAL3 = 137,
|
|
INTERNATIONAL4 = 138,
|
|
INTERNATIONAL5 = 139,
|
|
INTERNATIONAL6 = 140,
|
|
INTERNATIONAL7 = 141,
|
|
INTERNATIONAL8 = 142,
|
|
INTERNATIONAL9 = 143,
|
|
LANG1 = 144,
|
|
LANG2 = 145,
|
|
LANG3 = 146,
|
|
LANG4 = 147,
|
|
LANG5 = 148,
|
|
LANG6 = 149,
|
|
LANG7 = 150,
|
|
LANG8 = 151,
|
|
LANG9 = 152,
|
|
ALTERASE = 153,
|
|
SYSREQ = 154,
|
|
CANCEL = 155,
|
|
CLEAR = 156,
|
|
PRIOR = 157,
|
|
RETURN2 = 158,
|
|
SEPARATOR = 159,
|
|
OUT = 160,
|
|
OPER = 161,
|
|
CLEARAGAIN = 162,
|
|
CRSEL = 163,
|
|
EXSEL = 164,
|
|
KP_00 = 176,
|
|
KP_000 = 177,
|
|
THOUSANDSSEPARATOR = 178,
|
|
DECIMALSEPARATOR = 179,
|
|
CURRENCYUNIT = 180,
|
|
CURRENCYSUBUNIT = 181,
|
|
KP_LEFTPAREN = 182,
|
|
KP_RIGHTPAREN = 183,
|
|
KP_LEFTBRACE = 184,
|
|
KP_RIGHTBRACE = 185,
|
|
KP_TAB = 186,
|
|
KP_BACKSPACE = 187,
|
|
KP_A = 188,
|
|
KP_B = 189,
|
|
KP_C = 190,
|
|
KP_D = 191,
|
|
KP_E = 192,
|
|
KP_F = 193,
|
|
KP_XOR = 194,
|
|
KP_POWER = 195,
|
|
KP_PERCENT = 196,
|
|
KP_LESS = 197,
|
|
KP_GREATER = 198,
|
|
KP_AMPERSAND = 199,
|
|
KP_DBLAMPERSAND = 200,
|
|
KP_VERTICALBAR = 201,
|
|
KP_DBLVERTICALBAR = 202,
|
|
KP_COLON = 203,
|
|
KP_HASH = 204,
|
|
KP_SPACE = 205,
|
|
KP_AT = 206,
|
|
KP_EXCLAM = 207,
|
|
KP_MEMSTORE = 208,
|
|
KP_MEMRECALL = 209,
|
|
KP_MEMCLEAR = 210,
|
|
KP_MEMADD = 211,
|
|
KP_MEMSUBTRACT = 212,
|
|
KP_MEMMULTIPLY = 213,
|
|
KP_MEMDIVIDE = 214,
|
|
KP_PLUSMINUS = 215,
|
|
KP_CLEAR = 216,
|
|
KP_CLEARENTRY = 217,
|
|
KP_BINARY = 218,
|
|
KP_OCTAL = 219,
|
|
KP_DECIMAL = 220,
|
|
KP_HEXADECIMAL = 221,
|
|
LCTRL = 224,
|
|
LSHIFT = 225,
|
|
LALT = 226,
|
|
LGUI = 227,
|
|
RCTRL = 228,
|
|
RSHIFT = 229,
|
|
RALT = 230,
|
|
RGUI = 231,
|
|
MODE = 257,
|
|
// These come from the USB consumer page (0x0C)
|
|
AUDIONEXT = 258,
|
|
AUDIOPREV = 259,
|
|
AUDIOSTOP = 260,
|
|
AUDIOPLAY = 261,
|
|
AUDIOMUTE = 262,
|
|
MEDIASELECT = 263,
|
|
WWW = 264,
|
|
MAIL = 265,
|
|
CALCULATOR = 266,
|
|
COMPUTER = 267,
|
|
AC_SEARCH = 268,
|
|
AC_HOME = 269,
|
|
AC_BACK = 270,
|
|
AC_FORWARD = 271,
|
|
AC_STOP = 272,
|
|
AC_REFRESH = 273,
|
|
AC_BOOKMARKS = 274,
|
|
// These come from other sources, and are mostly mac related
|
|
BRIGHTNESSDOWN = 275,
|
|
BRIGHTNESSUP = 276,
|
|
DISPLAYSWITCH = 277,
|
|
KBDILLUMTOGGLE = 278,
|
|
KBDILLUMDOWN = 279,
|
|
KBDILLUMUP = 280,
|
|
EJECT = 281,
|
|
SLEEP = 282,
|
|
APP1 = 283,
|
|
APP2 = 284,
|
|
// This is not a key, simply marks the number of scancodes
|
|
// so that you know how big to make your arrays.
|
|
SDL_NUM_SCANCODES = 512
|
|
}
|
|
|
|
enum State : byte
|
|
{
|
|
Released = 0,
|
|
Pressed = 1
|
|
}
|
|
|
|
[Flags]
|
|
enum SystemFlags : uint
|
|
{
|
|
Default = 0,
|
|
TIMER = 0x00000001,
|
|
AUDIO = 0x00000010,
|
|
VIDEO = 0x00000020,
|
|
JOYSTICK = 0x00000200,
|
|
HAPTIC = 0x00001000,
|
|
GAMECONTROLLER = 0x00002000,
|
|
NOPARACHUTE = 0x00100000,
|
|
EVERYTHING = TIMER | AUDIO | VIDEO |
|
|
JOYSTICK | HAPTIC | GAMECONTROLLER
|
|
}
|
|
|
|
enum SysWMType
|
|
{
|
|
Unknown = 0,
|
|
Windows,
|
|
X11,
|
|
Wayland,
|
|
DirectFB,
|
|
Cocoa,
|
|
UIKit,
|
|
}
|
|
|
|
enum WindowEventID : byte
|
|
{
|
|
NONE,
|
|
SHOWN,
|
|
HIDDEN,
|
|
EXPOSED,
|
|
MOVED,
|
|
RESIZED,
|
|
SIZE_CHANGED,
|
|
MINIMIZED,
|
|
MAXIMIZED,
|
|
RESTORED,
|
|
ENTER,
|
|
LEAVE,
|
|
FOCUS_GAINED,
|
|
FOCUS_LOST,
|
|
CLOSE,
|
|
}
|
|
|
|
enum WindowFlags
|
|
{
|
|
Default = 0,
|
|
FULLSCREEN = 0x00000001,
|
|
OPENGL = 0x00000002,
|
|
SHOWN = 0x00000004,
|
|
HIDDEN = 0x00000008,
|
|
BORDERLESS = 0x00000010,
|
|
RESIZABLE = 0x00000020,
|
|
MINIMIZED = 0x00000040,
|
|
MAXIMIZED = 0x00000080,
|
|
INPUT_GRABBED = 0x00000100,
|
|
INPUT_FOCUS = 0x00000200,
|
|
MOUSE_FOCUS = 0x00000400,
|
|
FULLSCREEN_DESKTOP = (FULLSCREEN | 0x00001000),
|
|
FOREIGN = 0x00000800,
|
|
ALLOW_HIGHDPI = 0x00002000,
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Structs
|
|
|
|
struct ControllerAxisEvent
|
|
{
|
|
public EventType Type;
|
|
public uint Timestamp;
|
|
public int Which;
|
|
public GameControllerAxis Axis;
|
|
byte padding1;
|
|
byte padding2;
|
|
byte padding3;
|
|
public short Value;
|
|
ushort padding4;
|
|
}
|
|
|
|
struct ControllerButtonEvent
|
|
{
|
|
public EventType Type;
|
|
public uint Timestamp;
|
|
public int Which;
|
|
public GameControllerButton Button;
|
|
public State State;
|
|
byte padding1;
|
|
byte padding2;
|
|
}
|
|
|
|
struct ControllerDeviceEvent
|
|
{
|
|
public EventType Type;
|
|
public uint Timestamp;
|
|
|
|
/// <summary>
|
|
/// The joystick device index for the ADDED event, instance id for the REMOVED or REMAPPED event
|
|
/// </summary>
|
|
public int Which;
|
|
}
|
|
|
|
struct DisplayMode
|
|
{
|
|
public uint Format;
|
|
public int Width;
|
|
public int Height;
|
|
public int RefreshRate;
|
|
public IntPtr DriverData;
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Explicit)]
|
|
struct Event
|
|
{
|
|
[FieldOffset(0)]
|
|
public EventType Type;
|
|
[FieldOffset(0)]
|
|
public WindowEvent Window;
|
|
[FieldOffset(0)]
|
|
public KeyboardEvent Key;
|
|
[FieldOffset(0)]
|
|
public TextEditingEvent Edit;
|
|
[FieldOffset(0)]
|
|
public TextInputEvent Text;
|
|
[FieldOffset(0)]
|
|
public MouseMotionEvent Motion;
|
|
[FieldOffset(0)]
|
|
public MouseButtonEvent Button;
|
|
[FieldOffset(0)]
|
|
public MouseWheelEvent Wheel;
|
|
[FieldOffset(0)]
|
|
public JoyAxisEvent JoyAxis;
|
|
[FieldOffset(0)]
|
|
public JoyBallEvent JoyBall;
|
|
[FieldOffset(0)]
|
|
public JoyHatEvent JoyHat;
|
|
[FieldOffset(0)]
|
|
public JoyButtonEvent JoyButton;
|
|
[FieldOffset(0)]
|
|
public JoyDeviceEvent JoyDevice;
|
|
[FieldOffset(0)]
|
|
public ControllerAxisEvent ControllerAxis;
|
|
[FieldOffset(0)]
|
|
public ControllerButtonEvent ControllerButton;
|
|
[FieldOffset(0)]
|
|
public ControllerDeviceEvent ControllerDevice;
|
|
#if false
|
|
[FieldOffset(0)]
|
|
public QuitEvent quit;
|
|
[FieldOffset(0)]
|
|
public UserEvent user;
|
|
[FieldOffset(0)]
|
|
public SysWMEvent syswm;
|
|
[FieldOffset(0)]
|
|
public TouchFingerEvent tfinger;
|
|
[FieldOffset(0)]
|
|
public MultiGestureEvent mgesture;
|
|
[FieldOffset(0)]
|
|
public DollarGestureEvent dgesture;
|
|
[FieldOffset(0)]
|
|
public DropEvent drop;
|
|
#endif
|
|
|
|
// Ensure the structure is big enough
|
|
// This hack is necessary to ensure compatibility
|
|
// with different SDL versions, which might have
|
|
// different sizeof(SDL_Event).
|
|
[FieldOffset(0)]
|
|
private unsafe fixed byte reserved[128];
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Explicit)]
|
|
struct GameControllerButtonBind
|
|
{
|
|
[FieldOffset(0)]
|
|
public GameControllerBindType BindType;
|
|
[FieldOffset(4)]
|
|
public Button Button;
|
|
[FieldOffset(4)]
|
|
public GameControllerAxis Axis;
|
|
[FieldOffset(4)]
|
|
public int Hat;
|
|
[FieldOffset(8)]
|
|
public int HatMask;
|
|
}
|
|
|
|
struct JoyAxisEvent
|
|
{
|
|
public EventType Type;
|
|
public UInt32 Timestamp;
|
|
public Int32 Which; // SDL_JoystickID
|
|
public byte Axis;
|
|
byte padding1;
|
|
byte padding2;
|
|
byte padding3;
|
|
public Int16 Value;
|
|
UInt16 padding4;
|
|
}
|
|
|
|
struct JoyBallEvent
|
|
{
|
|
public EventType Type;
|
|
public uint Timestamp;
|
|
public int Which;
|
|
public byte Ball;
|
|
byte padding1;
|
|
byte padding2;
|
|
byte padding3;
|
|
public short Xrel;
|
|
public short Yrel;
|
|
}
|
|
|
|
struct JoyButtonEvent
|
|
{
|
|
public EventType Type;
|
|
public uint Timestamp;
|
|
public int Which;
|
|
public byte Button;
|
|
public State State;
|
|
byte padding1;
|
|
byte padding2;
|
|
}
|
|
|
|
struct JoyDeviceEvent
|
|
{
|
|
public EventType Type;
|
|
public uint Timestamp;
|
|
public int Which;
|
|
}
|
|
|
|
struct JoyHatEvent
|
|
{
|
|
public EventType Type;
|
|
public uint Timestamp;
|
|
public int Which;
|
|
public byte Hat;
|
|
public HatPosition Value;
|
|
byte padding1;
|
|
byte padding2;
|
|
}
|
|
|
|
struct JoystickGuid
|
|
{
|
|
unsafe fixed byte data[16];
|
|
|
|
public Guid ToGuid()
|
|
{
|
|
byte[] bytes = new byte[16];
|
|
|
|
unsafe
|
|
{
|
|
fixed (byte* pdata = data)
|
|
{
|
|
Marshal.Copy(new IntPtr(pdata), bytes, 0, bytes.Length);
|
|
}
|
|
}
|
|
|
|
return new Guid(bytes);
|
|
}
|
|
}
|
|
|
|
struct KeyboardEvent
|
|
{
|
|
public EventType Type;
|
|
public uint Timestamp;
|
|
public uint WindowID;
|
|
public State State;
|
|
public byte Repeat;
|
|
byte padding2;
|
|
byte padding3;
|
|
public Keysym Keysym;
|
|
}
|
|
|
|
struct Keysym
|
|
{
|
|
public Scancode Scancode;
|
|
public Keycode Sym;
|
|
public Keymod Mod;
|
|
[Obsolete]
|
|
public uint Unicode;
|
|
}
|
|
|
|
struct MouseButtonEvent
|
|
{
|
|
public EventType Type;
|
|
public UInt32 Timestamp;
|
|
public UInt32 WindowID;
|
|
public UInt32 Which;
|
|
public Button Button;
|
|
public State State;
|
|
public byte Clicks;
|
|
byte padding1;
|
|
public Int32 X;
|
|
public Int32 Y;
|
|
}
|
|
|
|
struct MouseMotionEvent
|
|
{
|
|
public EventType Type;
|
|
public uint Timestamp;
|
|
public uint WindowID;
|
|
public uint Which;
|
|
public ButtonFlags State;
|
|
public Int32 X;
|
|
public Int32 Y;
|
|
public Int32 Xrel;
|
|
public Int32 Yrel;
|
|
}
|
|
|
|
struct MouseWheelEvent
|
|
{
|
|
public EventType Type;
|
|
public uint Timestamp;
|
|
public uint WindowID;
|
|
public uint Which;
|
|
public int X;
|
|
public int Y;
|
|
|
|
public enum EventType : uint
|
|
{
|
|
/* Touch events */
|
|
FingerDown = 0x700,
|
|
FingerUp,
|
|
FingerMotion,
|
|
|
|
/* Gesture events */
|
|
DollarGesture = 0x800,
|
|
DollarRecord,
|
|
MultiGesture,
|
|
}
|
|
|
|
public const uint TouchMouseID = 0xffffffff;
|
|
}
|
|
|
|
struct Rect
|
|
{
|
|
public int X;
|
|
public int Y;
|
|
public int Width;
|
|
public int Height;
|
|
}
|
|
|
|
struct SysWMInfo
|
|
{
|
|
public Version Version;
|
|
public SysWMType Subsystem;
|
|
public SysInfo Info;
|
|
|
|
[StructLayout(LayoutKind.Explicit)]
|
|
public struct SysInfo
|
|
{
|
|
[FieldOffset(0)]
|
|
public WindowsInfo Windows;
|
|
[FieldOffset(0)]
|
|
public X11Info X11;
|
|
[FieldOffset(0)]
|
|
public WaylandInfo Wayland;
|
|
[FieldOffset(0)]
|
|
public DirectFBInfo DirectFB;
|
|
[FieldOffset(0)]
|
|
public CocoaInfo Cocoa;
|
|
[FieldOffset(0)]
|
|
public UIKitInfo UIKit;
|
|
|
|
public struct WindowsInfo
|
|
{
|
|
public IntPtr Window;
|
|
}
|
|
|
|
public struct X11Info
|
|
{
|
|
public IntPtr Display;
|
|
public IntPtr Window;
|
|
}
|
|
|
|
public struct WaylandInfo
|
|
{
|
|
public IntPtr Display;
|
|
public IntPtr Surface;
|
|
public IntPtr ShellSurface;
|
|
}
|
|
|
|
public struct DirectFBInfo
|
|
{
|
|
public IntPtr Dfb;
|
|
public IntPtr Window;
|
|
public IntPtr Surface;
|
|
}
|
|
|
|
public struct CocoaInfo
|
|
{
|
|
public IntPtr Window;
|
|
}
|
|
|
|
public struct UIKitInfo
|
|
{
|
|
public IntPtr Window;
|
|
}
|
|
}
|
|
}
|
|
|
|
struct TextEditingEvent
|
|
{
|
|
public const int TextSize = 32;
|
|
|
|
public EventType Type;
|
|
public UInt32 Timestamp;
|
|
public UInt32 WindowID;
|
|
public unsafe fixed byte Text[TextSize];
|
|
public Int32 Start;
|
|
public Int32 Length;
|
|
}
|
|
|
|
struct TextInputEvent
|
|
{
|
|
public const int TextSize = 32;
|
|
|
|
public EventType Type;
|
|
public UInt32 Timestamp;
|
|
public UInt32 WindowID;
|
|
public unsafe fixed byte Text[TextSize];
|
|
}
|
|
|
|
struct Version
|
|
{
|
|
public byte Major;
|
|
public byte Minor;
|
|
public byte Patch;
|
|
|
|
public int Number
|
|
{
|
|
get { return 1000 * Major + 100 * Minor + Patch; }
|
|
}
|
|
}
|
|
|
|
struct WindowEvent
|
|
{
|
|
public EventType Type;
|
|
public UInt32 Timestamp;
|
|
public UInt32 WindowID;
|
|
public WindowEventID Event;
|
|
byte padding1;
|
|
byte padding2;
|
|
byte padding3;
|
|
public Int32 Data1;
|
|
public Int32 Data2;
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
|