]> O.S.I.I.S - jp/crow.git/commitdiff
clean up master
authorjpbruyere <jp.bruyere@hotmail.com>
Thu, 21 Jul 2016 04:11:45 +0000 (06:11 +0200)
committerjpbruyere <jp.bruyere@hotmail.com>
Thu, 21 Jul 2016 04:11:45 +0000 (06:11 +0200)
35 files changed:
CrowGdk/CrowGdk.csproj [deleted file]
GLCrow/GLCrow.csproj [deleted file]
GLCrow/Pencil.Gaming.dll.config [deleted file]
GLCrow/Shader.cs [deleted file]
GLCrow/Window.cs [deleted file]
GLCrow/packages.config [deleted file]
GLCrow/vaoMesh.cs [deleted file]
GOMLViewer/GOMLViewer.csproj [deleted file]
GOMLViewer/Properties/AddinInfo.cs [deleted file]
GOMLViewer/Properties/AssemblyInfo.cs [deleted file]
GOMLViewer/Properties/Manifest.addin.xml [deleted file]
GOMLViewer/packages.config [deleted file]
GOMLViewer/src/DisplayBinding.cs [deleted file]
GOMLViewer/src/GOLibGtkHost.cs [deleted file]
GOMLViewer/src/GOLibNodeExtension.cs [deleted file]
GOMLViewer/src/GOLibView.cs [deleted file]
GtkCrow/CrowContainer.cs [deleted file]
GtkCrow/GtkCrow.csproj [deleted file]
MonoDevelop.GOLib/MonoDevelop.GOLib.addin.xml [deleted file]
MonoDevelop.GOLib/MonoDevelop.GOLib.csproj [deleted file]
MonoDevelop.GOLib/MyClass.cs [deleted file]
MonoDevelop.GOLib/Properties/AddinInfo.cs [deleted file]
MonoDevelop.GOLib/Properties/AssemblyInfo.cs [deleted file]
MonoDevelop.GOLib/src/DisplayBinding.cs [deleted file]
MonoDevelop.GOLib/src/GOLibGtkHost.cs [deleted file]
MonoDevelop.GOLib/src/GOLibNodeExtension.cs [deleted file]
MonoDevelop.GOLib/src/GOLibView.cs [deleted file]
SDL2Crow/LPUtf8StrMarshaler.cs [deleted file]
SDL2Crow/SDL2.cs [deleted file]
SDL2Crow/SDL2Crow.csproj [deleted file]
SDL2Crow/main.cs [deleted file]
SDL2Crow/packages.config [deleted file]
magic3d.png [deleted file]
screenshot1.png [deleted file]
screenshot2.png [deleted file]

diff --git a/CrowGdk/CrowGdk.csproj b/CrowGdk/CrowGdk.csproj
deleted file mode 100644 (file)
index 57a3f0c..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">Linux_x86</Platform>
-    <ProductVersion>8.0.30703</ProductVersion>
-    <SchemaVersion>2.0</SchemaVersion>
-    <ProjectGuid>{90D93DD6-ADBD-4BB6-AE62-20DBF83F7185}</ProjectGuid>
-    <OutputType>Exe</OutputType>
-    <RootNamespace>CrowGdk</RootNamespace>
-    <AssemblyName>CrowGdk</AssemblyName>
-    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|Linux_x86' ">
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>false</Optimize>
-    <OutputPath>bin\Debug</OutputPath>
-    <DefineConstants>DEBUG;</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <ConsolePause>false</ConsolePause>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|Linux_x86' ">
-    <DebugType>full</DebugType>
-    <Optimize>true</Optimize>
-    <OutputPath>bin\Release</OutputPath>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <ConsolePause>false</ConsolePause>
-  </PropertyGroup>
-  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
-  <ItemGroup>
-    <ProjectReference Include="..\Crow.csproj">
-      <Project>{C2980F9B-4798-4C05-99E2-E174810F7C7B}</Project>
-      <Name>Crow</Name>
-    </ProjectReference>
-  </ItemGroup>
-  <ItemGroup>
-    <Reference Include="System" />
-    <Reference Include="System.Data" />
-    <Reference Include="System.Drawing" />
-    <Reference Include="System.Xml" />
-  </ItemGroup>
-</Project>
\ No newline at end of file
diff --git a/GLCrow/GLCrow.csproj b/GLCrow/GLCrow.csproj
deleted file mode 100644 (file)
index 8c1cd3c..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">Linux_x86</Platform>
-    <ProductVersion>8.0.30703</ProductVersion>
-    <SchemaVersion>2.0</SchemaVersion>
-    <ProjectGuid>{66376B95-9351-4A63-B920-F4BB53FEF0E2}</ProjectGuid>
-    <OutputType>Library</OutputType>
-    <RootNamespace>GLC</RootNamespace>
-    <AssemblyName>GLCrow</AssemblyName>
-    <OutputPath>$(SolutionDir)/build/$(Configuration)</OutputPath>
-    <IntermediateOutputPath>$(SolutionDir)/build/obj/$(Configuration)</IntermediateOutputPath>
-    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
-    <ReleaseVersion>0.4</ReleaseVersion>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|Linux_x86' ">
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>false</Optimize>
-    <DefineConstants>DEBUG;</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <ConsolePause>false</ConsolePause>
-    <EnvironmentVariables>
-      <EnvironmentVariables>
-        <Variable name="vblank_mode" value="1" />
-      </EnvironmentVariables>
-    </EnvironmentVariables>
-    <IntermediateOutputPath>$(SolutionDir)\build\obj\$(Configuration)</IntermediateOutputPath>
-    <OutputPath>$(SolutionDir)\build\$(Configuration)</OutputPath>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|Linux_x86' ">
-    <Optimize>true</Optimize>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <ConsolePause>false</ConsolePause>
-    <IntermediateOutputPath>$(SolutionDir)\build\obj\$(Configuration)</IntermediateOutputPath>
-    <OutputPath>$(SolutionDir)\build\$(Configuration)</OutputPath>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="cairo-sharp">
-      <HintPath>..\packages\gtk-sharp.Linux.3.14.3.14.7\lib\net40\cairo-sharp.dll</HintPath>
-    </Reference>
-    <Reference Include="gdk-sharp">
-      <HintPath>..\packages\gtk-sharp.Linux.3.14.3.14.7\lib\net40\gdk-sharp.dll</HintPath>
-    </Reference>
-    <Reference Include="gio-sharp">
-      <HintPath>..\packages\gtk-sharp.Linux.3.14.3.14.7\lib\net40\gio-sharp.dll</HintPath>
-    </Reference>
-    <Reference Include="glib-sharp">
-      <HintPath>..\packages\gtk-sharp.Linux.3.14.3.14.7\lib\net40\glib-sharp.dll</HintPath>
-    </Reference>
-    <Reference Include="System.Xml" />
-    <Reference Include="System" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="packages.config" />
-    <None Include="Pencil.Gaming.dll.config">
-      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
-    </None>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="..\Crow.csproj">
-      <Project>{C2980F9B-4798-4C05-99E2-E174810F7C7B}</Project>
-      <Name>Crow</Name>
-    </ProjectReference>
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="Window.cs" />
-    <Compile Include="Shader.cs" />
-    <Compile Include="vaoMesh.cs" />
-  </ItemGroup>
-  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
-  <Import Project="..\packages\gtk-sharp.Linux.3.14.3.14.7\build\net40\gtk-sharp.Linux.3.14.targets" Condition="Exists('..\packages\gtk-sharp.Linux.3.14.3.14.7\build\net40\gtk-sharp.Linux.3.14.targets')" />
-</Project>
\ No newline at end of file
diff --git a/GLCrow/Pencil.Gaming.dll.config b/GLCrow/Pencil.Gaming.dll.config
deleted file mode 100644 (file)
index 4361512..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<configuration>
-  <dllmap os="linux" dll="natives64/glfw.dll" target="/usr/lib/libglfw.so"/>
-  <dllmap os="linux" dll="natives32/glfw.dll" target="natives32/libglfw.so"/>
-  <dllmap os="linux" dll="natives64/openal32.dll" target="natives64/libopenal.so"/>
-  <dllmap os="linux" dll="natives32/openal32.dll" target="natives32/libopenal.so"/>
-  <dllmap os="linux" dll="opengl32.dll" target="libGL.so.1"/>
-  <dllmap os="linux" dll="natives64/lua.dll" target="natives64/liblua.so" />
-  <dllmap os="linux" dll="natives32/lua.dll" target="natives32/liblua.so" />
-  <dllmap os="osx" dll="natives32/glfw.dll" target="natives32/libglfw.dylib"/>
-  <dllmap os="osx" dll="natives32/openal32.dll" target="/System/Library/Frameworks/OpenAL.framework/OpenAL"/>
-  <dllmap os="osx" dll="natives32/lua.dll" target="natives32/liblua.dylib"/>
-</configuration>
\ No newline at end of file
diff --git a/GLCrow/Shader.cs b/GLCrow/Shader.cs
deleted file mode 100644 (file)
index 8639577..0000000
+++ /dev/null
@@ -1,330 +0,0 @@
-using System;
-using System.Diagnostics;
-using System.IO;
-using System.Reflection;
-using System.Collections.Generic;
-using Crow;
-using Pencil.Gaming.Graphics;
-using Pencil.Gaming.MathUtils;
-
-namespace Tetra
-{
-       public class Shader : IDisposable
-       {
-               static List<Shader> registeredShaders = new List<Shader>();
-
-               public static List<Shader> RegisteredShaders {
-                       get { return registeredShaders; }
-               }
-
-               #region CTOR
-               public Shader ()
-               {
-                       Init ();
-               }
-               public Shader (string vertResPath, string fragResPath = null, string geomResPath = null)
-               {
-                       VertSourcePath = vertResPath;
-                       FragSourcePath = fragResPath;
-                       GeomSourcePath = geomResPath;
-
-                       loadSourcesFiles ();
-
-                       Init ();
-               }
-               ~Shader(){
-                       RegisteredShaders.Remove (this);
-               }
-               #endregion
-
-               public string   VertSourcePath,
-                                               FragSourcePath,
-                                               GeomSourcePath;
-               #region Sources
-               protected string _vertSource = @"
-                       #version 330
-                       precision lowp float;
-
-                       uniform mat4 mvp;
-
-                       layout(location = 0) in vec3 in_position;
-                       layout(location = 1) in vec2 in_tex;
-
-                       out vec2 texCoord;
-
-                       void main(void)
-                       {
-                               texCoord = in_tex;
-                               gl_Position = mvp * vec4(in_position, 1.0);
-                       }";
-
-               protected string _fragSource = @"
-                       #version 330
-                       precision lowp float;
-
-                       uniform sampler2D tex;
-
-                       in vec2 texCoord;
-                       out vec4 out_frag_color;
-
-                       void main(void)
-                       {
-                               out_frag_color = texture( tex, texCoord);
-                       }";
-               string _geomSource = @"";
-//                     #version 330
-//                     layout(triangles) in;
-//                     layout(triangle_strip, max_vertices=3) out;
-//                     void main()
-//                     {
-//                             for(int i=0; i<3; i++)
-//                             {
-//                                     gl_Position = gl_in[i].gl_Position;
-//                                     EmitVertex();
-//                             }
-//                             EndPrimitive();
-//                     }";
-               #endregion
-
-               #region Private and protected fields
-               public uint vsId, fsId, gsId, pgmId;
-               public int mvpLocation;
-
-               Matrix mvp = Matrix.Identity;
-               #endregion
-
-
-               #region Public properties
-               public virtual string vertSource
-               {
-                       get { return _vertSource;}
-                       set { _vertSource = value; }
-               }
-               public virtual string fragSource
-               {
-                       get { return _fragSource;}
-                       set { _fragSource = value; }
-               }
-               public virtual string geomSource
-               {
-                       get { return _geomSource; }
-                       set { _geomSource = value; }
-               }
-
-               public virtual Matrix MVP{
-                       set { mvp = value; }
-                       get { return mvp; }
-               }
-               #endregion
-
-               #region Public functions
-               /// <summary>
-               /// configure sources and compile
-               /// </summary>
-               public virtual void Init()
-               {
-                       RegisteredShaders.Add (this);                   
-                       Compile ();
-               }
-               public void Reload(){
-                       loadSourcesFiles ();
-                       Compile ();
-               }
-               public void SetSource(ShaderType shaderType, string _source){
-                       switch (shaderType) {
-                       case ShaderType.FragmentShader:
-                               fragSource = _source;
-                               return;
-                       case ShaderType.VertexShader:
-                               vertSource = _source;
-                               return;
-                       case ShaderType.GeometryShader:
-                               geomSource = _source;
-                               return;
-                       }
-               }
-               public string GetSource(ShaderType shaderType){
-                       switch (shaderType) {
-                       case ShaderType.FragmentShader:
-                               return fragSource;
-                       case ShaderType.VertexShader:
-                               return vertSource;
-                       case ShaderType.GeometryShader:
-                               return geomSource;
-                       }
-                       return "";
-               }
-               public string GetSourcePath(ShaderType shaderType){
-                       switch (shaderType) {
-                       case ShaderType.FragmentShader:
-                               return FragSourcePath;
-                       case ShaderType.VertexShader:
-                               return VertSourcePath;
-                       case ShaderType.GeometryShader:
-                               return GeomSourcePath;
-                       }
-                       return "";
-               }
-               public virtual void Compile()
-               {
-                       Dispose ();
-
-                       pgmId = GL.CreateProgram();
-
-                       if (!string.IsNullOrEmpty(vertSource))
-                       {
-                               vsId = GL.CreateShader(ShaderType.VertexShader);
-                               compileShader(vsId, vertSource);
-                       }
-                       if (!string.IsNullOrEmpty(fragSource))
-                       {
-                               fsId = GL.CreateShader(ShaderType.FragmentShader);
-                               compileShader(fsId, fragSource);
-
-                       }
-                       if (!string.IsNullOrEmpty(geomSource))
-                       {
-                               gsId = GL.CreateShader(ShaderType.GeometryShader);
-                               compileShader(gsId,geomSource);
-                       }
-
-                       if (vsId != 0)
-                               GL.AttachShader(pgmId, vsId);
-                       if (fsId != 0)
-                               GL.AttachShader(pgmId, fsId);
-                       if (gsId != 0)
-                               GL.AttachShader(pgmId, gsId);
-
-                       BindVertexAttributes ();
-
-                       string info;
-                       GL.LinkProgram(pgmId);
-                       GL.GetProgramInfoLog((int)pgmId, out info);
-
-                       if (!string.IsNullOrEmpty (info)) {
-                               Debug.WriteLine ("Linkage:");
-                               Debug.WriteLine (info);
-                       }
-
-                       info = null;
-
-                       GL.ValidateProgram(pgmId);
-                       GL.GetProgramInfoLog((int)pgmId, out info);
-                       if (!string.IsNullOrEmpty (info)) {
-                               Debug.WriteLine ("Validation:");
-                               Debug.WriteLine (info);
-                       }
-
-                       GL.UseProgram (pgmId);
-
-                       GetUniformLocations ();
-                       BindSamplesSlots ();
-
-                       Disable ();
-               }
-
-               protected virtual void BindVertexAttributes()
-               {
-                       GL.BindAttribLocation(pgmId, 0, "in_position");
-                       GL.BindAttribLocation(pgmId, 1, "in_tex");
-                       GL.BindAttribLocation(pgmId, 4, "in_model");
-
-               }
-               protected virtual void GetUniformLocations()
-               {
-                       mvpLocation = GL.GetUniformLocation(pgmId, "mvp");
-               }
-               protected virtual void BindSamplesSlots(){
-                       GL.Uniform1(GL.GetUniformLocation (pgmId, "tex"), 0);
-               }
-               public void SetMVP(Matrix _mvp){
-                       GL.UniformMatrix4(mvpLocation, false, ref _mvp);
-               }
-               public virtual void Enable(){
-                       GL.UseProgram (pgmId);
-               }
-               public virtual void Disable(){
-                       GL.UseProgram (0);
-               }
-               public static void Enable(Shader s)
-               {
-                       if (s == null)
-                               return;
-                       s.Enable ();
-               }
-               public static void Disable(Shader s)
-               {
-                       if (s == null)
-                               return;
-                       s.Disable ();
-               }
-               #endregion
-
-               void loadSourcesFiles(){
-                       Stream s;
-
-                       if (!string.IsNullOrEmpty (VertSourcePath)) {
-                               s = Interface.GetStreamFromPath (VertSourcePath);
-                               if (s != null) {
-                                       using (StreamReader sr = new StreamReader (s)) {
-                                               vertSource = sr.ReadToEnd ();
-                                       }
-                               }
-                       }
-
-                       if (!string.IsNullOrEmpty (FragSourcePath)) {
-                               s = Interface.GetStreamFromPath (FragSourcePath);
-                               if (s != null) {
-                                       using (StreamReader sr = new StreamReader (s)) {
-                                               fragSource = sr.ReadToEnd ();
-                                       }
-                               }
-                       }
-
-                       if (!string.IsNullOrEmpty (GeomSourcePath)) {
-                               s = Interface.GetStreamFromPath (GeomSourcePath);
-                               if (s != null) {
-                                       using (StreamReader sr = new StreamReader (s)) {
-                                               geomSource = sr.ReadToEnd ();
-                                       }
-                               }
-                       }                       
-               }
-               void compileShader(uint shader, string source)
-               {
-                       GL.ShaderSource(shader, source);
-                       GL.CompileShader(shader);
-
-                       string info;
-                       GL.GetShaderInfoLog((int)shader, out info);
-                       Debug.WriteLine(info);
-
-                       int compileResult;
-                       GL.GetShader(shader, ShaderParameter.CompileStatus, out compileResult);
-                       if (compileResult != 1)
-                       {
-                               Debug.WriteLine("Compile Error!");
-                               Debug.WriteLine(source);
-                       }
-               }
-               public override string ToString ()
-               {
-                       return string.Format ("{0} {1} {2}", VertSourcePath, FragSourcePath, GeomSourcePath);
-               }
-               #region IDisposable implementation
-               public virtual void Dispose ()
-               {                       
-                       if (GL.IsProgram (pgmId))
-                               GL.DeleteProgram (pgmId);
-
-                       if (GL.IsShader (vsId))
-                               GL.DeleteShader (vsId);
-                       if (GL.IsShader (fsId))
-                               GL.DeleteShader (fsId);
-                       if (GL.IsShader (gsId))
-                               GL.DeleteShader (gsId);
-               }
-               #endregion
-       }
-}
-
diff --git a/GLCrow/Window.cs b/GLCrow/Window.cs
deleted file mode 100644 (file)
index 19bf0db..0000000
+++ /dev/null
@@ -1,519 +0,0 @@
-//
-//  OpenTKGameWindow.cs
-//
-//  Author:
-//       Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
-//
-//  Copyright (c) 2016 jp
-//
-//  This program is free software: you can redistribute it and/or modify
-//  it under the terms of the GNU General Public License as published by
-//  the Free Software Foundation, either version 3 of the License, or
-//  (at your option) any later version.
-//
-//  This program is distributed in the hope that it will be useful,
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//  GNU General Public License for more details.
-//
-//  You should have received a copy of the GNU General Public License
-//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
-using System;
-using System.Runtime.InteropServices;
-using System.Threading;
-using Crow;
-using Pencil.Gaming;
-using Pencil.Gaming.Graphics;
-using System.Diagnostics;
-      
-namespace GLC
-{
-       public class Window: IValueChange, IDisposable
-    {
-               #region IValueChange implementation
-               public event EventHandler<ValueChangeEventArgs> ValueChanged;
-               public virtual void NotifyValueChanged(string MemberName, object _value)
-               {
-                       if (ValueChanged != null)                               
-                               ValueChanged.Invoke(this, new ValueChangeEventArgs(MemberName, _value));
-               }
-               #endregion
-
-               GlfwWindowPtr winPtr;
-
-               public Interface CrowInterface;
-               public Rectangle ClientRectangle;
-
-               public string Title {
-                       set {
-                               Glfw.SetWindowTitle(winPtr, value);
-                       }
-               }
-
-               #region FPS & GPU info
-               int frameCpt = 0;
-               float elapsed = 0f, frameElapsed = 0f;
-
-               int _fps = 0;
-
-               public int fps {
-                       get { return _fps; }
-                       set {
-                               if (_fps == value)
-                                       return;
-
-                               _fps = value;
-
-                               if (_fps > fpsMax) {
-                                       fpsMax = _fps;
-                                       ValueChanged.Raise(this, new ValueChangeEventArgs ("fpsMax", fpsMax));
-                               } 
-                               if (_fps < fpsMin) {
-                                       fpsMin = _fps;
-                                       ValueChanged.Raise(this, new ValueChangeEventArgs ("fpsMin", fpsMin));
-                               }
-
-                               ValueChanged.Raise(this, new ValueChangeEventArgs ("fps", _fps));
-                               #if MEASURE_TIME
-                               ValueChanged.Raise (this, new ValueChangeEventArgs ("update",
-                                       this.CrowInterface.clippingTime.ElapsedTicks.ToString () + " ticks"));
-                               ValueChanged.Raise (this, new ValueChangeEventArgs ("layouting",
-                                       this.CrowInterface.layoutTime.ElapsedTicks.ToString () + " ticks"));
-                               ValueChanged.Raise (this, new ValueChangeEventArgs ("drawing",
-                                       this.CrowInterface.drawingTime.ElapsedTicks.ToString () + " ticks"));
-                               #endif
-                       }
-               }
-
-               public int fpsMin = int.MaxValue;
-               public int fpsMax = 0;
-               float _frameTime;
-               float frameUpdateTime;
-
-               public float frameTime 
-               {
-                       get { return _frameTime; }
-                       set {                           
-                               if (_frameTime == value)
-                                       return;
-
-                               _frameTime = value;
-
-                               if (_frameTime > frameMax) {
-                                       frameMax = _frameTime;
-                                       ValueChanged.Raise(this, new ValueChangeEventArgs ("frameMax", frameMax));
-                               } else if (_frameTime < frameMin) {
-                                       frameMin = _frameTime;
-                                       ValueChanged.Raise(this, new ValueChangeEventArgs ("frameMin", frameMin));
-                               }
-
-                               ValueChanged.Raise(this, new ValueChangeEventArgs ("frameTime", frameTime));                    
-                       }
-               }
-                       
-               public float frameMax = 0f, frameMin = float.MaxValue;
-
-               void resetFpsAndFrameTime ()
-               {
-                       frameMax = 0f;
-                       frameMin = float.MaxValue;
-                       fpsMin = int.MaxValue;
-                       fpsMax = 0;
-                       _fps = 0;
-               }
-               public string update = "";
-               public string drawing = "";
-               public string layouting = "";
-               public int gpuFreeMem, gpuTotalMem, gpuDedicatedMem;
-
-               public void onUpdateGPUMemInfo (object sender, MouseButtonEventArgs e)
-               {
-                       
-                       //GL.GetInteger ((GetPName NvxGpuMemoryInfo.GpuMemoryInfoCurrentAvailableVidmemNvx, out gpuFreeMem);
-                       //GL.GetInteger ((GetPName)NvxGpuMemoryInfo.GpuMemoryInfoTotalAvailableMemoryNvx, out gpuTotalMem);
-                       //GL.GetInteger ((GetPName)NvxGpuMemoryInfo.GpuMemoryInfoDedicatedVidmemNvx, out gpuDedicatedMem);
-                       //NotifyValueChanged ("gpuFreeMem", gpuFreeMem / 1024);
-                       //NotifyValueChanged ("gpuTotalMem", gpuTotalMem / 1024);
-                       //NotifyValueChanged ("gpuDedicatedMem", gpuDedicatedMem / 1024);
-               }
-               public void onResetTimes (object sender, MouseButtonEventArgs e)
-               {
-                       resetFpsAndFrameTime ();
-               }
-               #endregion
-
-               #region ctor
-               public Window(int _width, int _height, int colors, int depth, int stencil, int samples, string _title="Crow")                   
-               {
-                       ClientRectangle.Width = _width;
-                       ClientRectangle.Height = _height;
-
-
-                       CrowInterface = new Interface ();
-                       Thread t = new Thread (interfaceThread);
-                       t.IsBackground = true;
-                       t.Start ();
-
-                       initGlfw ();
-
-                       Title = _title;
-
-                       OnResize (winPtr, _width, _height);
-
-                       initCrow ();
-
-                       OnLoad ();
-               }
-
-               void onGlfwError (GlfwError code, string desc)
-               {
-                       Debug.WriteLine (desc);
-               }
-
-               #endregion
-
-               void initGlfw(){
-                       if (!Glfw.Init ()) {
-                               Console.Error.WriteLine ("ERROR: Could not initialize GLFW, shutting down.");
-                               Environment.Exit (1);
-                       }
-                       Debug.WriteLine("GLFW: " + Glfw.GetVersionString ());
-                       // Create GLFW window.
-
-                       Glfw.WindowHint(WindowHint.Samples, 1);
-                       Glfw.WindowHint(WindowHint.ContextVersionMajor, 3 );
-                       Glfw.WindowHint(WindowHint.ContextVersionMinor, 3);
-                       Glfw.WindowHint (WindowHint.OpenGLProfile, (int)OpenGLProfile.Core);
-
-                       Glfw.SetErrorCallback(onGlfwError);
-
-                       winPtr = Glfw.CreateWindow (ClientRectangle.Width, ClientRectangle.Height,
-                               "", GlfwMonitorPtr.Null, GlfwWindowPtr.Null);
-
-                       Glfw.SetKeyCallback (winPtr, OnKeyEvent);
-                       Glfw.SetCursorPosCallback (winPtr, OnMouseMove);
-                       Glfw.SetMouseButtonCallback (winPtr, OnMouseButton);
-                       Glfw.SetFramebufferSizeCallback (winPtr, OnResize);
-                       Glfw.SetScrollCallback (winPtr, OnScroll);
-
-                       // Enable the OpenGL context for the current window
-                       Glfw.MakeContextCurrent (winPtr);
-
-                       Glfw.SwapInterval (0);
-
-                       GL.Enable (EnableCap.Blend);
-                       GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha);
-               }
-
-
-               void updateFrameTimes(){
-                       frameTime = (float)Glfw.GetTime ();
-
-                       Glfw.SetTime (0.0);
-
-                       elapsed += _frameTime;
-                       frameElapsed += _frameTime;
-
-                       if (frameElapsed >= frameUpdateTime) {                          
-                               frameElapsed -= frameUpdateTime;
-                               OnUpdateFrame ();
-                       }
-                       frameCpt++;
-               }
-
-               #region Crow
-               #region graphic context
-               protected int texID;
-               Tetra.Shader shader;
-               public static GGL.vaoMesh quad;
-
-               int[] pbos = new int[2];
-               bool evenCycle = false;
-               Rectangle dirtyR;
-
-               void createContext()
-               {
-                       if (GL.IsTexture(texID))
-                               GL.DeleteTexture (texID);
-                       GL.GenTextures(1, out texID);
-                       GL.BindTexture(TextureTarget.Texture2D, texID);
-
-                       GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba,
-                               ClientRectangle.Width, ClientRectangle.Height, 0,
-                               PixelFormat.Bgra, PixelType.UnsignedByte, CrowInterface.bmp);
-
-                       GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Nearest);
-                       GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Nearest);
-
-                       initPBOs ();
-               }
-               void initPBOs(){
-                       if (GL.IsBuffer (pbos [0]))
-                               GL.DeleteBuffers (2, pbos);
-                       GL.GenBuffers (2, pbos);
-                       GL.BindBuffer (BufferTarget.PixelUnpackBuffer, pbos [0]);
-                       GL.BufferData (BufferTarget.PixelUnpackBuffer, (IntPtr)(ClientRectangle.Width * ClientRectangle.Height*4),
-                               IntPtr.Zero, BufferUsageHint.StreamDraw);
-                       GL.BindBuffer (BufferTarget.PixelUnpackBuffer, pbos [1]);
-                       GL.BufferData (BufferTarget.PixelUnpackBuffer, (IntPtr)(ClientRectangle.Width * ClientRectangle.Height*4),
-                               IntPtr.Zero, BufferUsageHint.StreamDraw);
-                       GL.BindBuffer (BufferTarget.PixelUnpackBuffer, 0);
-               }
-
-               void updatePBOs()
-               {
-                       int pboMapped, pboDraw;
-                       if (evenCycle) {
-                               pboMapped = pbos [0];
-                               pboDraw = pbos [1];
-                       } else {
-                               pboMapped = pbos [1];
-                               pboDraw = pbos [0];
-                       }
-
-                       GL.ActiveTexture (TextureUnit.Texture0);
-                       GL.BindBuffer (BufferTarget.PixelUnpackBuffer, pboDraw);
-
-                       GL.TexSubImage2D (TextureTarget.Texture2D, 0,
-                               dirtyR.Left, dirtyR.Top,
-                               dirtyR.Width, dirtyR.Height,
-                               PixelFormat.Bgra, PixelType.UnsignedByte, IntPtr.Zero);
-
-                       GL.BindBuffer (BufferTarget.PixelUnpackBuffer, pboMapped);
-                       IntPtr ptrTexData = GL.MapBuffer (BufferTarget.PixelUnpackBuffer, BufferAccess.WriteOnly);
-                       if (ptrTexData != IntPtr.Zero) {
-                               dirtyR = CrowInterface.DirtyRect;
-                               Marshal.Copy (CrowInterface.dirtyBmp, 0, ptrTexData, CrowInterface.dirtyBmp.Length);
-                               GL.UnmapBuffer (BufferTarget.PixelUnpackBuffer);
-                       }
-
-                       GL.BindBuffer (BufferTarget.PixelUnpackBuffer, 0);
-                       evenCycle = !evenCycle;
-               }
-               #endregion
-               void interfaceThread()
-               {
-                       CrowInterface.Quit += Quit;
-                       CrowInterface.MouseCursorChanged += CrowInterface_MouseCursorChanged;
-
-                       while (true) {
-                               CrowInterface.Update ();
-                               Thread.Sleep (1);
-                       }
-               }
-               void initCrow(){
-                       shader = new Tetra.Shader ();
-                       shader.Enable();
-                       shader.SetMVP(Pencil.Gaming.MathUtils.Matrix.CreateOrthographicOffCenter (-0.5f, 0.5f, -0.5f, 0.5f, 1, -1));
-                       GL.UseProgram(0);
-                       quad = new GGL.vaoMesh (0, 0, 0, 1, 1, 1, -1);
-               }
-               void updateCrow(){
-                       if (!Monitor.TryEnter (CrowInterface.RenderMutex))
-                               return;                 
-                       GL.ActiveTexture (TextureUnit.Texture0);
-                       GL.BindTexture (TextureTarget.Texture2D, texID);
-                       if (CrowInterface.IsDirty) {
-                               GL.TexSubImage2D (TextureTarget.Texture2D, 0,
-                                       CrowInterface.DirtyRect.Left, CrowInterface.DirtyRect.Top,
-                                       CrowInterface.DirtyRect.Width, CrowInterface.DirtyRect.Height,
-                                       PixelFormat.Bgra, PixelType.UnsignedByte, CrowInterface.dirtyBmp);
-                               //TODO:use pbo
-                               //updatePBOs ();                
-                               CrowInterface.IsDirty = false;
-                       }
-                       Monitor.Exit (CrowInterface.RenderMutex);
-               }
-               void drawCrow(){
-                       //bool blend = GL.GetBoolean (GetPName.Blend);
-                       //                      bool depthTest = GL.GetBoolean (GetPName.DepthTest);
-                       GL.ActiveTexture (TextureUnit.Texture0);
-                       GL.BindTexture (TextureTarget.Texture2D, texID);
-                       GL.Enable (EnableCap.Blend);
-                       GL.Disable (EnableCap.DepthTest);
-                       shader.Enable ();
-                       quad.Render (BeginMode.TriangleStrip);
-                       GL.BindTexture(TextureTarget.Texture2D, 0);
-                       shader.Disable ();
-
-                       //                      if (!blend)
-                       //                              GL.Disable (EnableCap.Blend);
-                       //                      if (depthTest)
-                       //                              GL.Enable (EnableCap.DepthTest);
-
-               }
-               #endregion
-
-               public void Quit (object sender, EventArgs e)
-               {
-                       //this.Exit ();
-               }
-               void CrowInterface_MouseCursorChanged (object sender, MouseCursorChangedEventArgs e)
-               {
-                       
-                       //this.Cursor = new MouseCursor(
-                       //      (int)e.NewCursor.Xhot,
-                       //      (int)e.NewCursor.Yhot,
-                       //      (int)e.NewCursor.Width,
-                       //      (int)e.NewCursor.Height,
-                       //      e.NewCursor.data);
-               }
-
-
-
-               public virtual void Run (int targetFrameRate) {
-                       frameUpdateTime = 1f / (float)targetFrameRate;
-
-                       Glfw.SetTime (0.0);
-                       while (!Glfw.WindowShouldClose (winPtr)) {                              
-                               Glfw.PollEvents ();
-
-                               updateFrameTimes ();
-
-                               if (Glfw.GetKey (winPtr, Pencil.Gaming.Key.Escape)) {
-                                       Glfw.SetWindowShouldClose (winPtr, true);
-                               }                                       
-
-                               GLClear ();
-
-                               OnRender ();
-
-                               drawCrow ();
-
-                               // Swap the front and back buffer, displaying the scene
-                               Glfw.SwapBuffers (winPtr);
-                       }
-               }
-
-               public virtual void GLClear()
-               {
-                       GL.ClearColor (0.1f,0.1f,0.1f,0.1f);
-                       GL.Clear (ClearBufferMask.ColorBufferBit|ClearBufferMask.DepthBufferBit);
-               }
-               public virtual void OnLoad()
-               {                       
-               }
-               public virtual void OnRender ()
-               {
-               }
-
-
-               protected virtual void OnUpdateFrame()
-               {
-                       if (elapsed >= 1f) {
-                               fps = frameCpt;
-                               elapsed -= 1f;
-                               frameCpt = 0;
-                       }
-                       //resetFpsAndFrameTime ();
-
-                       updateCrow ();
-               }
-               protected virtual void OnResize (GlfwWindowPtr wnd, int width, int height)
-               {
-                       ClientRectangle.Width = width;
-                       ClientRectangle.Height = height;
-
-                       CrowInterface.ProcessResize (
-                               new Rectangle (
-                               this.ClientRectangle.X,
-                               this.ClientRectangle.Y,
-                               this.ClientRectangle.Width,
-                               this.ClientRectangle.Height));
-                       createContext ();
-                       GL.Viewport (0, 0, ClientRectangle.Width, ClientRectangle.Height);
-               }
-
-               public virtual void Dispose ()
-               {
-                       if (GL.IsTexture (texID))
-                               GL.DeleteTexture (texID);
-                       if (GL.IsBuffer (pbos [0]))
-                               GL.DeleteBuffers (2, pbos);
-                       
-                       // Finally, clean up Glfw, and close the window
-                       Glfw.Terminate ();
-               }
-
-               #region Mouse Handling
-               protected virtual void OnMouseMove (GlfwWindowPtr wnd, double x, double y)
-               {
-                       CrowInterface.ProcessMouseMove ((int)x, (int)y);
-               }
-
-               protected virtual void OnMouseButton (GlfwWindowPtr wnd, Pencil.Gaming.MouseButton btn, KeyAction action)
-               {
-                       switch (action) {
-                       case KeyAction.Release:
-                               CrowInterface.ProcessMouseButtonUp ((int)btn);
-                               break;
-                       case KeyAction.Press:
-                               CrowInterface.ProcessMouseButtonDown ((int)btn);
-                               break;
-                       case KeyAction.Repeat:
-                               break;
-                       }
-               }
-               protected virtual void OnScroll (GlfwWindowPtr wnd, double xoffset, double yoffset)
-               {
-                       CrowInterface.ProcessMouseWheelChanged ((float)yoffset);
-               }
-
-               //void update_mouseButtonStates(ref MouseState e, OpenTK.Input.MouseState otk_e){
-               //      for (int i = 0; i < MouseState.MaxButtons; i++) {
-               //              if (otk_e.IsButtonDown ((OpenTK.Input.MouseButton)i))
-               //                      e.EnableBit (i);
-               //      }
-               //}
-               //void Mouse_Move(object sender, OpenTK.Input.MouseMoveEventArgs otk_e)
-               //      {
-               //      if (!CrowInterface.ProcessMouseMove (otk_e.X, otk_e.Y))
-               //              MouseMove.Raise (sender, otk_e);
-               //      }
-               //void Mouse_ButtonUp(object sender, OpenTK.Input.MouseButtonEventArgs otk_e)
-               //      {
-               //      if (!CrowInterface.ProcessMouseButtonUp ((int)otk_e.Button))
-               //              MouseButtonUp.Raise (sender, otk_e);
-               //      }
-               //void Mouse_ButtonDown(object sender, OpenTK.Input.MouseButtonEventArgs otk_e)
-               //{
-               //      if (!CrowInterface.ProcessMouseButtonDown ((int)otk_e.Button))
-               //              MouseButtonDown.Raise (sender, otk_e);
-               //      }
-               //void Mouse_WheelChanged(object sender, OpenTK.Input.MouseWheelEventArgs otk_e)
-               //      {
-               //      if (!CrowInterface.ProcessMouseWheelChanged (otk_e.DeltaPrecise))
-               //              MouseWheelChanged.Raise (sender, otk_e);
-               //      }
-               #endregion
-
-               #region keyboard Handling
-
-               protected virtual void OnKeyEvent (GlfwWindowPtr wnd,Pencil.Gaming.Key key,int scanCode,KeyAction action,Pencil.Gaming.KeyModifiers mods)
-               {
-                       switch (action) {
-                       case KeyAction.Release:
-                               CrowInterface.ProcessKeyUp ((int)key);
-                               break;
-                       case KeyAction.Press:
-                               CrowInterface.ProcessKeyDown ((int)key);
-                               break;
-                       }
-               }
-               //void Keyboard_KeyDown(object sender, OpenTK.Input.KeyboardKeyEventArgs otk_e)
-               //{
-               //      if (!CrowInterface.ProcessKeyDown((int)otk_e.Key))
-               //              KeyboardKeyDown.Raise (this, otk_e);
-               //      }
-               //void Keyboard_KeyUp(object sender, OpenTK.Input.KeyboardKeyEventArgs otk_e)
-               //{
-               //      if (!CrowInterface.ProcessKeyUp((int)otk_e.Key))
-               //              KeyboardKeyUp.Raise (this, otk_e);
-               //}
-               //void OpenTKGameWindow_KeyPress (object sender, OpenTK.KeyPressEventArgs e)
-               //{
-               //      CrowInterface.ProcessKeyPress (e.KeyChar);
-               //}
-               #endregion
-       }
-}
diff --git a/GLCrow/packages.config b/GLCrow/packages.config
deleted file mode 100644 (file)
index d77cff2..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
-  <package id="gtk-sharp.Linux.3.14" version="3.14.7" targetFramework="net45" />
-</packages>
\ No newline at end of file
diff --git a/GLCrow/vaoMesh.cs b/GLCrow/vaoMesh.cs
deleted file mode 100644 (file)
index 05288d8..0000000
+++ /dev/null
@@ -1,599 +0,0 @@
-using System;
-using System.Runtime.InteropServices;
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System.Diagnostics;
-using System.Linq;
-using Pencil.Gaming.MathUtils;
-using Pencil.Gaming.Graphics;
-
-namespace GGL
-{
-       public class vaoMesh : IDisposable
-       {
-               public int vaoHandle,
-               positionVboHandle,
-               normalsVboHandle,
-               texVboHandle,
-               matVboHandle,
-               eboHandle;
-
-               public Vector3[] positions;
-               public Vector3[] normals;
-               public Vector2[] texCoords;
-               public Matrix[] modelMats;
-               public int[] indices;
-
-               public string Name = "Unamed";
-
-               public vaoMesh()
-               {
-               }
-
-               public vaoMesh (Vector3[] _positions, Vector2[] _texCoord, int[] _indices)
-               {
-                       positions = _positions;
-                       texCoords = _texCoord;
-                       indices = _indices;
-
-                       CreateVBOs ();
-                       CreateVAOs ();
-               }
-
-               public vaoMesh (Vector3[] _positions, Vector2[] _texCoord, Vector3[] _normales, int[] _indices, Matrix[] _modelMats = null)
-               {
-                       positions = _positions;
-                       texCoords = _texCoord;
-                       normals = _normales;
-                       indices = _indices;
-                       modelMats = _modelMats;
-
-
-                       CreateVBOs ();
-                       CreateVAOs ();
-               }
-
-               public vaoMesh (float x, float y, float z, float width, float height, float TileX = 1f, float TileY = 1f)
-               {
-                       positions =
-                               new Vector3[] {
-                               new Vector3 (x - width / 2, y + height / 2, z),
-                               new Vector3 (x - width / 2, y - height / 2, z),
-                               new Vector3 (x + width / 2, y + height / 2, z),
-                               new Vector3 (x + width / 2, y - height / 2, z)
-                       };
-                       texCoords =     new Vector2[] {
-                               new Vector2 (0, TileY),
-                               new Vector2 (0, 0),
-                               new Vector2 (TileX, TileY),
-                               new Vector2 (TileX, 0)
-                       };
-                       normals = new Vector3[] {
-                               Vector3.UnitZ,
-                               Vector3.UnitZ,
-                               Vector3.UnitZ,
-                               Vector3.UnitZ
-                       };
-                       indices = new int[] { 0, 1, 2, 3 };
-
-                       CreateVBOs ();
-                       CreateVAOs ();
-               }
-               public void CreateBuffers(){
-                       CreateVBOs ();
-                       CreateVAOs ();
-               }
-               protected void CreateVBOs()
-               {
-                       positionVboHandle = GL.GenBuffer();
-                       GL.BindBuffer(BufferTarget.ArrayBuffer, positionVboHandle);
-                       GL.BufferData<Vector3>(BufferTarget.ArrayBuffer,
-                               new IntPtr(positions.Length * Vector3.SizeInBytes),
-                               positions, BufferUsageHint.StaticDraw);
-
-                       if (normals != null) {
-                               normalsVboHandle = GL.GenBuffer ();
-                               GL.BindBuffer (BufferTarget.ArrayBuffer, normalsVboHandle);
-                               GL.BufferData<Vector3> (BufferTarget.ArrayBuffer,
-                                       new IntPtr (normals.Length * Vector3.SizeInBytes),
-                                       normals, BufferUsageHint.StaticDraw);
-                       }
-
-                       if (texCoords != null) {
-                               texVboHandle = GL.GenBuffer ();
-                               GL.BindBuffer (BufferTarget.ArrayBuffer, texVboHandle);
-                               GL.BufferData<Vector2> (BufferTarget.ArrayBuffer,
-                                       new IntPtr (texCoords.Length * Vector2.SizeInBytes),
-                                       texCoords, BufferUsageHint.StaticDraw);
-                       }
-
-                       if (modelMats != null) {
-                               matVboHandle = GL.GenBuffer ();
-                               GL.BindBuffer (BufferTarget.ArrayBuffer, matVboHandle);
-                               GL.BufferData<Matrix> (BufferTarget.ArrayBuffer,
-                                       new IntPtr (modelMats.Length * Vector4.SizeInBytes * 4),
-                                       modelMats, BufferUsageHint.DynamicDraw);
-                       }
-
-                       GL.BindBuffer(BufferTarget.ArrayBuffer, 0);
-
-                       if (indices != null) {
-                               eboHandle = GL.GenBuffer ();
-                               GL.BindBuffer (BufferTarget.ElementArrayBuffer, eboHandle);
-                               GL.BufferData (BufferTarget.ElementArrayBuffer,
-                                       new IntPtr (sizeof(uint) * indices.Length),
-                                       indices, BufferUsageHint.StaticDraw);
-                               GL.BindBuffer(BufferTarget.ElementArrayBuffer, 0);
-                       }
-               }
-               protected void CreateVAOs()
-               {
-                       vaoHandle = GL.GenVertexArray();
-                       GL.BindVertexArray(vaoHandle);
-
-                       GL.EnableVertexAttribArray(0);
-                       GL.BindBuffer(BufferTarget.ArrayBuffer, positionVboHandle);
-                       GL.VertexAttribPointer(0, 3, VertexAttribPointerType.Float, true, Vector3.SizeInBytes, 0);
-
-                       if (texCoords != null) {
-                               GL.EnableVertexAttribArray (1);
-                               GL.BindBuffer (BufferTarget.ArrayBuffer, texVboHandle);
-                               GL.VertexAttribPointer (1, 2, VertexAttribPointerType.Float, true, Vector2.SizeInBytes, 0);
-                       }
-                       if (normals != null) {
-                               GL.EnableVertexAttribArray (2);
-                               GL.BindBuffer (BufferTarget.ArrayBuffer, normalsVboHandle);
-                               GL.VertexAttribPointer (2, 3, VertexAttribPointerType.Float, true, Vector3.SizeInBytes, 0);
-                       }
-//                     if (modelMats != null) {
-//                             GL.VertexAttribDivisor (4, 1);
-//                             for (int i = 0; i < 4; i++) {
-//                                     GL.EnableVertexAttribArray (4 + i);
-//                                     GL.VertexAttribBinding (4+i, 4);
-//                                     GL.VertexAttribFormat(4+i, 4, VertexAttribType.Float, false, Vector4.SizeInBytes * i);
-//                             }
-//                             GL.BindVertexBuffer (4, matVboHandle, IntPtr.Zero, Vector4.SizeInBytes*4);
-//                     }
-
-                       if (indices != null)
-                               GL.BindBuffer(BufferTarget.ElementArrayBuffer, eboHandle);
-                       
-                       GL.BindVertexArray(0);
-               }
-
-               public void Render( BeginMode _primitiveType){
-                       GL.BindVertexArray(vaoHandle);
-                       if (indices == null)
-                               GL.DrawArrays (_primitiveType, 0, positions.Length);
-                       else
-                               GL.DrawElements(_primitiveType, indices.Length,
-                                       DrawElementsType.UnsignedInt, IntPtr.Zero);
-                       GL.BindVertexArray (0);
-               }
-               public void Render(BeginMode _primitiveType, int[] _customIndices){
-                       GL.BindVertexArray(vaoHandle);
-                       GL.DrawElements(_primitiveType, _customIndices.Length,
-                               DrawElementsType.UnsignedInt, _customIndices);
-                       GL.BindVertexArray (0);
-               }
-               public void Render(BeginMode _primitiveType, int instances){
-
-                       GL.BindVertexArray(vaoHandle);
-                       GL.DrawElementsInstanced(_primitiveType, indices.Length,
-                               DrawElementsType.UnsignedInt, IntPtr.Zero, instances);
-                       GL.BindVertexArray (0);
-               }
-
-               public static vaoMesh operator +(vaoMesh m1, vaoMesh m2){
-                       if (m1 == null)
-                               return m2;
-                       if (m2 == null)
-                               return m1;
-
-                       vaoMesh res = new vaoMesh ();
-
-                       m1.Dispose ();
-                       m2.Dispose ();
-
-                       if (m1.positions == null) {
-                               res.positions = m2.positions;
-                               res.texCoords = m2.texCoords;
-                               res.normals = m2.normals;
-                               res.indices = m2.indices;
-                       } else {
-                               int offset = m1.positions.Length;
-
-                               res.positions = new Vector3[m1.positions.Length + m2.positions.Length];
-                               m1.positions.CopyTo (res.positions, 0);
-                               m2.positions.CopyTo (res.positions, m1.positions.Length);
-
-                               if (m1.texCoords != null) {
-                                       res.texCoords = new Vector2[m1.texCoords.Length + m2.texCoords.Length];
-                                       m1.texCoords.CopyTo (res.texCoords, 0);
-                                       m2.texCoords.CopyTo (res.texCoords, m1.texCoords.Length);
-                               }
-
-                               if (m1.normals != null) {
-                                       res.normals = new Vector3[m1.normals.Length + m2.normals.Length];
-                                       m1.normals.CopyTo (res.normals, 0);
-                                       m2.normals.CopyTo (res.normals, m1.normals.Length);
-                               }
-
-                               res.indices = new int[m1.indices.Length + m2.indices.Length];
-                               m1.indices.CopyTo (res.indices, 0);
-                               for (int i = 0; i < m2.indices.Length; i++) {
-                                       if (m2.indices [i] == int.MaxValue)
-                                               res.indices [i + m1.indices.Length] = int.MaxValue;
-                                       else
-                                               res.indices [i + m1.indices.Length] = m2.indices [i] + offset;
-                               }
-                       }
-                       return res;
-               }
-
-               #region IDisposable implementation
-               public void Dispose ()
-               {
-                       GL.DeleteBuffer (positionVboHandle);
-                       GL.DeleteBuffer (normalsVboHandle);
-                       GL.DeleteBuffer (texVboHandle);
-                       GL.DeleteBuffer (matVboHandle);
-                       GL.DeleteBuffer (eboHandle);
-                       GL.DeleteVertexArray (vaoHandle);
-               }
-               #endregion
-
-               public static vaoMesh CreateGrid(int gridSize)
-               {
-                       const float z = 0.0f;
-                       const int IdxPrimitiveRestart = int.MaxValue;
-
-                       Vector3[] positionVboData;
-                       int[] indicesVboData;
-                       Vector2[] texVboData;
-
-                       positionVboData = new Vector3[gridSize * gridSize];
-                       texVboData = new Vector2[gridSize * gridSize];
-                       indicesVboData = new int[(gridSize * 2 + 1) * gridSize];
-
-                       for (int y = 0; y < gridSize; y++) {
-                               for (int x = 0; x < gridSize; x++) {
-                                       positionVboData [gridSize * y + x] = new Vector3 (x, y, z);
-                                       texVboData [gridSize * y + x] = new Vector2 ((float)x*0.5f, (float)y*0.5f);
-
-                                       if (y < gridSize-1) {
-                                               indicesVboData [(gridSize * 2 + 1) * y + x*2] = gridSize * y + x;
-                                               indicesVboData [(gridSize * 2 + 1) * y + x*2 + 1] = gridSize * (y+1) + x;
-                                       }
-
-                                       if (x == gridSize-1) {
-                                               indicesVboData [(gridSize * 2 + 1) * y + x*2 + 2] = IdxPrimitiveRestart;
-                                       }
-                               }
-                       }
-                       return new vaoMesh (positionVboData, texVboData, null,indicesVboData);
-//                     vaoMesh tmp = new vaoMesh (positionVboData, texVboData, null);
-//                     tmp.indices = indicesVboData;
-//                     return tmp;
-               }
-
-               static List<Vector3> objPositions;
-               static List<Vector3> objNormals;
-               static List<Vector2> objTexCoords;
-               static List<Vector3> lPositions;
-               static List<Vector3> lNormals;
-               static List<Vector2> lTexCoords;
-               static List<int> lIndices;
-
-               public static vaoMesh Load(string fileName)
-               {
-                       objPositions = new List<Vector3>();
-                       objNormals = new List<Vector3>();
-                       objTexCoords = new List<Vector2>();
-                       lPositions = new List<Vector3>();
-                       lNormals = new List<Vector3>();
-                       lTexCoords = new List<Vector2>();
-                       lIndices = new List<int> ();
-
-                       string name = "unamed";
-                       using (StreamReader Reader = new StreamReader(fileName))
-                       {
-                               System.Globalization.CultureInfo savedCulture = Thread.CurrentThread.CurrentCulture;
-                               Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.InvariantCulture;
-
-                               string line;
-                               while ((line = Reader.ReadLine()) != null)
-                               {
-                                       line = line.Trim(splitCharacters);
-                                       line = line.Replace("  ", " ");
-
-                                       string[] parameters = line.Split(splitCharacters);
-
-                                       switch (parameters[0])
-                                       {
-                                       case "o":
-                                               name = parameters[1];
-                                               break;
-                                       case "p": // Point
-                                               break;
-                                       case "v": // Vertex
-                                               float x = float.Parse(parameters[1]);
-                                               float y = float.Parse(parameters[2]);
-                                               float z = float.Parse(parameters[3]);
-
-                                               objPositions.Add(new Vector3(x, y, z));
-                                               break;
-                                       case "vt": // TexCoord
-                                               float u = float.Parse(parameters[1]);
-                                               float v = float.Parse(parameters[2]);
-                                               objTexCoords.Add(new Vector2(u, v));
-                                               break;
-
-                                       case "vn": // Normal
-                                               float nx = float.Parse(parameters[1]);
-                                               float ny = float.Parse(parameters[2]);
-                                               float nz = float.Parse(parameters[3]);
-                                               objNormals.Add(new Vector3(nx, ny, nz));
-                                               break;
-
-                                       case "f":
-                                               switch (parameters.Length)
-                                               {
-                                               case 4:
-
-                                                       lIndices.Add(ParseFaceParameter(parameters[1]));
-                                                       lIndices.Add(ParseFaceParameter(parameters[2]));
-                                                       lIndices.Add(ParseFaceParameter(parameters[3]));
-                                                       break;
-
-                                               case 5:
-                                                       lIndices.Add(ParseFaceParameter(parameters[1]));
-                                                       lIndices.Add(ParseFaceParameter(parameters[2]));
-                                                       lIndices.Add(ParseFaceParameter(parameters[3]));
-                                                       lIndices.Add(ParseFaceParameter(parameters[4]));
-                                                       break;
-                                               }
-                                               break;
-
-                                       case "usemtl":
-                                               Debug.WriteLine ("usemtl: {0}", parameters [1]);
-//                                             if (parameters.Length > 1)
-//                                                     name = parameters[1];
-//
-//                                             currentFaceGroup.material = model.materials.Find(
-//                                                     delegate(Material m)
-//                                                     {
-//                                                             return m.Name == name;
-//                                                     });
-
-                                               break;
-                                       case "mtllib":
-                                               Debug.WriteLine ("usemtl: {0}", parameters [1]);
-//                                                     model.mtllib = parameters[1];
-//                                                     string mtlPath = System.IO.Path.GetDirectoryName(fileName)
-//                                                             + System.IO.Path.DirectorySeparatorChar
-//                                                             + model.mtllib;
-//
-//                                                     if (System.IO.File.Exists(mtlPath))
-//                                                     {
-//                                                             model.materials = ObjMeshLoader.LoadMtl(mtlPath);
-//
-//                                                             //mesh.materials[0].InitMaterial();
-//                                                     }
-                                               break;
-                                       case "#":
-//                                             if (parameters.Length > 1)
-//                                             {
-//                                                     if (parameters[1] == "object")
-//                                                     {
-//                                                             if (currentMesh != null)
-//                                                             {
-//                                                                     if (currentFaceGroup != null)
-//                                                                     {
-//                                                                             currentFaceGroup.Triangles = triangles.ToArray();
-//                                                                             currentFaceGroup.Quads = quads.ToArray();
-//
-//                                                                             currentMesh.Faces.Add(currentFaceGroup);
-//                                                                     }
-//
-//                                                                     currentMesh.Vertices = objVertices.ToArray();
-//                                                                     objVertices.Clear();
-//
-//                                                                     faces.Add(currentMesh);
-//                                                             }
-//                                                             currentMesh = new Mesh();
-//                                                             currentMesh.name = parameters[2];
-//                                                     }
-//                                             }
-                                               break;
-                                       }
-                               }
-
-//                             if (currentFaceGroup != null)
-//                             {
-//                                     currentFaceGroup.Triangles = triangles.ToArray();
-//                                     currentFaceGroup.Quads = quads.ToArray();
-//                                     currentMesh.Faces.Add(currentFaceGroup);
-//                             }
-//                             if (currentMesh != null)
-//                             {
-//                                     currentMesh.Vertices = objVertices.ToArray();
-//                                     faces.Add(currentMesh);
-//                             }
-//                             model.meshes.Add(faces.ToArray());
-                               Thread.CurrentThread.CurrentCulture = savedCulture;
-                       }
-
-                       vaoMesh tmp = new vaoMesh(lPositions.ToArray (),lTexCoords.ToArray (),
-                               lNormals.ToArray (),lIndices.ToArray ());
-
-                       tmp.Name = name;
-
-                       objPositions.Clear();
-                       objNormals.Clear();
-                       objTexCoords.Clear();
-                       lPositions.Clear();
-                       lNormals.Clear();
-                       lTexCoords.Clear();
-                       lIndices.Clear();
-
-                       return tmp;
-               }
-
-//             public static List<Material> LoadMtl(string fileName)
-//             {
-//                     using (StreamReader streamReader = new StreamReader(fileName))
-//                     {
-//                             return LoadMtl(streamReader);
-//                     }
-//             }
-
-               static char[] splitCharacters = new char[] { ' ' };
-
-
-
-               static int ParseFaceParameter(string faceParameter)
-               {
-                       Vector3 vertex = new Vector3();
-                       Vector2 texCoord = new Vector2();
-                       Vector3 normal = new Vector3();
-
-                       string[] parameters = faceParameter.Split(faceParamaterSplitter);
-
-                       int vertexIndex = int.Parse(parameters[0]);
-                       if (vertexIndex < 0) vertexIndex = objPositions.Count + vertexIndex;
-                       else vertexIndex = vertexIndex - 1;
-                       vertex = objPositions[vertexIndex];
-
-                       if (parameters.Length > 1)
-                       {
-                               int texCoordIndex;
-                               if (int.TryParse(parameters[1], out texCoordIndex))
-                               {
-                                       if (texCoordIndex < 0) texCoordIndex = objTexCoords.Count + texCoordIndex;
-                                       else texCoordIndex = texCoordIndex - 1;
-                                       texCoord = objTexCoords[texCoordIndex];
-                               }
-                       }
-
-                       if (parameters.Length > 2)
-                       {
-                               int normalIndex;
-                               if (int.TryParse(parameters[2], out normalIndex))
-                               {
-                                       if (normalIndex < 0) normalIndex = objNormals.Count + normalIndex;
-                                       else normalIndex = normalIndex - 1;
-                                       normal = objNormals[normalIndex];
-                               }
-                       }
-
-
-                       lPositions.Add(vertex);
-                       lTexCoords.Add(texCoord);
-                       lNormals.Add(normal);
-
-
-                       int index = lPositions.Count-1;
-                       return index;
-
-                       //if (objVerticesIndexDictionary.TryGetValue(newObjVertex, out index))
-                       //{
-                       //    return index;
-                       //}
-                       //else
-                       //{
-                       //    objVertices.Add(newObjVertex);
-                       //    objVerticesIndexDictionary[newObjVertex] = objVertices.Count - 1;
-                       //    return objVertices.Count - 1;
-                       //}
-               }
-//             static List<Material> LoadMtl(TextReader textReader)
-//             {
-//                     Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.InvariantCulture;
-//                     List<Material> Materials = new List<Material>();
-//                     Material currentMat = null;
-//
-//                     string line;
-//                     while ((line = textReader.ReadLine()) != null)
-//                     {
-//                             line = line.Trim(splitCharacters);
-//                             line = line.Replace("  ", " ");
-//
-//                             string[] parameters = line.Split(splitCharacters);
-//
-//                             switch (parameters[0])
-//                             {
-//                             case "newmtl":
-//                                     if (currentMat != null)
-//                                             Materials.Add(currentMat);
-//                                     currentMat = new Material();
-//                                     if (parameters.Length > 1)
-//                                             currentMat.Name = parameters[1];
-//                                     break;
-//                             case "Ka":
-//                                     currentMat.Ambient = new Color (
-//                                             float.Parse(parameters[1]),
-//                                             float.Parse(parameters[2]),
-//                                             float.Parse(parameters[3]),1.0f
-//                                     );
-//                                     break;
-//                             case "Kd":
-//                                     currentMat.Diffuse = new Color (
-//                                             float.Parse(parameters[1]),
-//                                             float.Parse(parameters[2]),
-//                                             float.Parse(parameters[3]),1.0f
-//                                     );
-//                                     break;
-//                             case "Ks":
-//                                     currentMat.Specular = new Color (
-//                                             float.Parse(parameters[1]),
-//                                             float.Parse(parameters[2]),
-//                                             float.Parse(parameters[3]),1.0f
-//                                     );
-//                                     break;
-//                             case "d":
-//                             case "Tr":
-//                                     currentMat.Transparency = float.Parse(parameters[1]);
-//                                     break;
-//                             case "map_Ka":
-//                                     currentMat.AmbientMap = new Texture(parameters[parameters.Length - 1]);
-//                                     break;
-//                             case "map_Kd":
-//                                     currentMat.DiffuseMap = new Texture(parameters[parameters.Length - 1]);
-//                                     break;
-//                             case "map_Ks":
-//                                     currentMat.SpecularMap = new Texture(parameters[parameters.Length - 1]);
-//                                     break;
-//                             case "map_Ns":
-//                                     currentMat.SpecularHighlightMap = new Texture(parameters[parameters.Length - 1]);
-//                                     break;
-//                             case "map_d":
-//                                     currentMat.AlphaMap = new Texture(parameters[parameters.Length - 1]);
-//                                     break;
-//                             case "map_bump":
-//                             case "bump":
-//                                     currentMat.BumpMap = new Texture(parameters[parameters.Length - 1]);
-//                                     break;
-//                             case "disp":
-//                                     currentMat.DisplacementMap = new Texture(parameters[parameters.Length - 1]);
-//                                     break;
-//                             case "decal":
-//                                     currentMat.StencilDecalMap = new Texture(parameters[parameters.Length - 1]);
-//                                     break;
-//                             }
-//
-//                     }
-//
-//                     if (currentMat != null)
-//                             Materials.Add(currentMat);
-//
-//                     return Materials;
-//             }
-//
-
-               static char[] faceParamaterSplitter = new char[] { '/' };
-
-       }
-
-}
diff --git a/GOMLViewer/GOMLViewer.csproj b/GOMLViewer/GOMLViewer.csproj
deleted file mode 100644 (file)
index 51e9f7a..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProjectTypeGuids>{86F6BF2A-E449-4B3E-813B-9ACC37E5545F};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
-    <ProductVersion>8.0.30703</ProductVersion>
-    <SchemaVersion>2.0</SchemaVersion>
-    <ProjectGuid>{2FB6DD19-817A-476D-A99D-7750798944A6}</ProjectGuid>
-    <OutputType>Library</OutputType>
-    <RootNamespace>GOMLViewer</RootNamespace>
-    <AssemblyName>GOMLViewer</AssemblyName>
-    <MDBinDir>/usr/local/lib/monodevelop/bin</MDBinDir>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>false</Optimize>
-    <OutputPath>bin\Debug</OutputPath>
-    <DefineConstants>DEBUG;</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <ConsolePause>false</ConsolePause>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <DebugType>full</DebugType>
-    <Optimize>true</Optimize>
-    <OutputPath>bin\Release</OutputPath>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <ConsolePause>false</ConsolePause>
-  </PropertyGroup>
-  <ItemGroup>
-    <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="Properties\AddinInfo.cs" />
-    <Compile Include="src\DisplayBinding.cs" />
-    <Compile Include="src\GOLibGtkHost.cs" />
-    <Compile Include="src\GOLibNodeExtension.cs" />
-    <Compile Include="src\GOLibView.cs" />
-  </ItemGroup>
-  <ItemGroup>
-    <EmbeddedResource Include="Properties\Manifest.addin.xml" />
-  </ItemGroup>
-  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
-  <Import Project="..\packages\MonoDevelop.Addins.0.2.3\build\net40\MonoDevelop.Addins.targets" Condition="Exists('..\packages\MonoDevelop.Addins.0.2.3\build\net40\MonoDevelop.Addins.targets')" />
-  <ItemGroup>
-    <None Include="packages.config" />
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="..\GOLib.csproj">
-      <Project>{C2980F9B-4798-4C05-99E2-E174810F7C7B}</Project>
-      <Name>GOLib</Name>
-    </ProjectReference>
-  </ItemGroup>
-  <ItemGroup>
-    <Reference Include="OpenTK">
-      <HintPath>..\..\opentk\Binaries\OpenTK\Release\OpenTK.dll</HintPath>
-    </Reference>
-  </ItemGroup>
-</Project>
\ No newline at end of file
diff --git a/GOMLViewer/Properties/AddinInfo.cs b/GOMLViewer/Properties/AddinInfo.cs
deleted file mode 100644 (file)
index b95864e..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-using System;
-using Mono.Addins;
-using Mono.Addins.Description;
-
-[assembly:Addin (
-       "GOMLViewer", 
-       Namespace = "GOMLViewer",
-       Version = "1.0"
-)]
-
-[assembly:AddinName ("GOMLViewer")]
-[assembly:AddinCategory ("IDE extensions")]
-[assembly:AddinDescription ("GOMLViewer")]
-[assembly:AddinAuthor ("Jean-Philippe Bruyère")]
-
diff --git a/GOMLViewer/Properties/AssemblyInfo.cs b/GOMLViewer/Properties/AssemblyInfo.cs
deleted file mode 100644 (file)
index 6f7ee5b..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-//
-//  AssemblyInfo.cs
-//
-//  Author:
-//       Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
-//
-//  Copyright (c) 2015 jp
-//
-//  This program is free software: you can redistribute it and/or modify
-//  it under the terms of the GNU General Public License as published by
-//  the Free Software Foundation, either version 3 of the License, or
-//  (at your option) any later version.
-//
-//  This program is distributed in the hope that it will be useful,
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//  GNU General Public License for more details.
-//
-//  You should have received a copy of the GNU General Public License
-//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
-using System.Reflection;
-using System.Runtime.CompilerServices;
-
-// Information about this assembly is defined by the following attributes.
-// Change them to the values specific to your project.
-
-[assembly: AssemblyTitle ("GOMLViewer")]
-[assembly: AssemblyDescription ("")]
-[assembly: AssemblyConfiguration ("")]
-[assembly: AssemblyCompany ("")]
-[assembly: AssemblyProduct ("")]
-[assembly: AssemblyCopyright ("jp")]
-[assembly: AssemblyTrademark ("")]
-[assembly: AssemblyCulture ("")]
-
-// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
-// The form "{Major}.{Minor}.*" will automatically update the build and revision,
-// and "{Major}.{Minor}.{Build}.*" will update just the revision.
-
-[assembly: AssemblyVersion ("1.0.*")]
-
-// The following attributes are used to specify the signing key for the assembly,
-// if desired. See the Mono documentation for more information about signing.
-
-//[assembly: AssemblyDelaySign(false)]
-//[assembly: AssemblyKeyFile("")]
-
diff --git a/GOMLViewer/Properties/Manifest.addin.xml b/GOMLViewer/Properties/Manifest.addin.xml
deleted file mode 100644 (file)
index 3644a14..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ExtensionModel>       
-       <Extension path = "/MonoDevelop/Ide/DisplayBindings">                   
-               <DisplayBinding
-                       id = "GOLib designer"
-                       insertafter ="AssemblyBrowser" 
-                       class = "MonoDevelop.GOLib.GOLibDisplayBinding" />
-       </Extension>
-       <Extension path = "/MonoDevelop/Ide/Pads/ProjectPad">
-               <NodeBuilder id = "GOLibNodeExtension" class = "MonoDevelop.GOLib.GOLibNodeExtension"/>
-       </Extension>
-       <Extension path = "/MonoDevelop/Core/MimeTypes">
-               <MimeType id="text/x-goml" _description="GOlib interface definition" icon="md-csharp-file" isText="false">
-                       <File pattern="*.goml" />
-               </MimeType>
-       </Extension>
-</ExtensionModel>
diff --git a/GOMLViewer/packages.config b/GOMLViewer/packages.config
deleted file mode 100644 (file)
index f853e23..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
-  <package id="MonoDevelop.Addins" version="0.2.3" targetFramework="net45" />
-</packages>
\ No newline at end of file
diff --git a/GOMLViewer/src/DisplayBinding.cs b/GOMLViewer/src/DisplayBinding.cs
deleted file mode 100644 (file)
index 7749fb6..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-//
-//  DisplayBinding.cs
-//
-//  Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-//  Copyright (c) 2015 jp
-//
-//  This program is free software: you can redistribute it and/or modify
-//  it under the terms of the GNU Lesser General Public License as published by
-//  the Free Software Foundation, either version 3 of the License, or
-//  (at your option) any later version.
-//
-//  This program is distributed in the hope that it will be useful,
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//  GNU Lesser General Public License for more details.
-//
-//  You should have received a copy of the GNU Lesser General Public License
-//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-// 
-// DisplayBinding.cs
-//  
-// Author:
-//       Mike Krüger <mkrueger@novell.com>
-// 
-// Copyright (c) 2009 Novell, Inc (http://www.novell.com)
-// 
-// 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.
-
-using System.IO;
-using MonoDevelop.Core;
-using MonoDevelop.Ide.Gui;
-using MonoDevelop.Projects;
-using System.Globalization;
-using System.Diagnostics;
-
-namespace MonoDevelop.GOLib
-{
-       class GOLibDisplayBinding : IViewDisplayBinding
-       {
-               bool canHandle = false;
-
-               public string Name {
-                       get {
-                               return GettextCatalog.GetString ("GOLib designer");
-                       }
-               }
-               public bool CanUseAsDefault 
-               { get { return canHandle; } }
-
-               public IViewContent CreateContent (FilePath fileName, string mimeType, Project ownerProject)
-               {                       
-                       return new GOLibView ();
-               }
-               public bool CanHandle (FilePath fileName, string mimeType, Project ownerProject)
-               {                       
-                       canHandle = mimeType.StartsWith("text/x-goml");
-                       return true;
-               }               
-       }
-}
diff --git a/GOMLViewer/src/GOLibGtkHost.cs b/GOMLViewer/src/GOLibGtkHost.cs
deleted file mode 100644 (file)
index d820327..0000000
+++ /dev/null
@@ -1,550 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.Linq;
-using go;
-using MonoDevelop.Core;
-using MonoDevelop.Ide;
-using MonoDevelop.Projects;
-using System.Diagnostics;
-using OpenTK.Input;
-using MonoDevelop.DesignerSupport;
-
-namespace MonoDevelop.GOLib
-{
-       public class GOLibGtkHost : Gtk.DrawingArea, ILayoutable, IGOLibHost, IPropertyPadProvider
-       {
-               #region IPropertyPadProvider implementation
-
-               public object GetActiveComponent ()
-               {
-                       return activeWidget;
-               }
-               public object GetProvider ()
-               {
-                       return activeWidget;
-               }
-               public void OnEndEditing (object obj)
-               {
-
-               }
-               public void OnChanged (object obj)
-               {
-
-               }
-               #endregion
-       
-               #region Events
-               //those events are raised only if mouse isn't in a graphic object
-               public event EventHandler<MouseWheelEventArgs> MouseWheelChanged;
-               public event EventHandler<MouseButtonEventArgs> MouseButtonUp;
-               public event EventHandler<MouseButtonEventArgs> MouseButtonDown;
-               public event EventHandler<MouseButtonEventArgs> MouseClick;
-               public event EventHandler<MouseMoveEventArgs> MouseMove;
-               #endregion
-
-               string _path;
-               GraphicObject goWidget;
-
-               public GOLibGtkHost ()
-               {
-                       this.Drawn += onExpose;
-                       this.ButtonPressEvent += GOLibGtkHost_ButtonPressEvent;
-                       this.ButtonReleaseEvent += GOLibGtkHost_ButtonReleaseEvent;
-                       this.MotionNotifyEvent += GOLibGtkHost_MotionNotifyEvent;
-
-                       this.Events |= Gdk.EventMask.ButtonPressMask | Gdk.EventMask.ButtonReleaseMask |
-                               Gdk.EventMask.PointerMotionMask | Gdk.EventMask.PointerMotionHintMask;
-               }
-               static double[] dashed = {2.0};
-
-               void onExpose(object o, Gtk.DrawnArgs args)
-               {
-                       Gtk.DrawingArea area = (Gtk.DrawingArea) o;
-
-                       Cairo.Context cr = args.Cr;
-                       _redrawClip.AddRectangle (this.ClientRectangle);
-                       update (cr);
-
-                       if (_hoverWidget != null) {
-                               cr.Rectangle (_hoverWidget.ScreenCoordinates(_hoverWidget.getSlot ()));
-                               cr.LineWidth = 1;
-                               cr.SetDash (dashed, 0);
-                               cr.Color = go.Color.Yellow;
-                               cr.Stroke ();
-                       }
-                       ((IDisposable) cr.Target).Dispose();                                      
-                       ((IDisposable) cr).Dispose();
-               }
-               // TODO: should find a more safer way to link gtk button to otk.
-               void GOLibGtkHost_ButtonPressEvent (object o, Gtk.ButtonPressEventArgs args)
-               {
-                       MouseButtonEventArgs e = new MouseButtonEventArgs 
-                               ((int)args.Event.X, (int)args.Event.Y, 
-                                       gtkButtonIdToOpenTkButton(args.Event.Button), true);
-                       activeWidget = hoverWidget;
-                       DesignerSupport.DesignerSupport.Service.SetPadContent (this);
-               }
-               void GOLibGtkHost_ButtonReleaseEvent (object o, Gtk.ButtonReleaseEventArgs args)
-               {
-                       MouseButtonEventArgs e = new MouseButtonEventArgs 
-                               ((int)args.Event.X, (int)args.Event.Y, 
-                                       gtkButtonIdToOpenTkButton(args.Event.Button), false);                   
-               }
-               int lastX,LastY;
-               void GOLibGtkHost_MotionNotifyEvent (object o, Gtk.MotionNotifyEventArgs args)
-               {
-                       
-                       Mouse_Move(this, new MouseMoveEventArgs (
-                               (int)args.Event.X,(int)args.Event.Y,
-                               (int)args.Event.X-lastX, (int)args.Event.Y-LastY
-                       ));
-                       lastX = (int)args.Event.X;
-                       LastY = (int)args.Event.Y;
-
-                       QueueDraw ();
-               }
-
-               MouseButton gtkButtonIdToOpenTkButton(uint gtkMouseButton)
-               {
-                       switch (gtkMouseButton) {
-                       case 1:
-                               return MouseButton.Left;
-                       case 2:
-                               return MouseButton.Middle;
-                       case 3:
-                               return MouseButton.Right;
-                       case 4:
-                               return MouseButton.Button4;
-                       case 5:
-                               return MouseButton.Button5;
-                       }
-                       return MouseButton.LastButton;
-               }
-
-
-
-               public void Load(string path)
-               {
-                       goWidget = Interface.Load (path);
-                       this.AddWidget (goWidget);
-               }
-
-
-
-               public List<GraphicObject> GraphicObjects = new List<GraphicObject>();
-               public Color Background = Color.Transparent;
-
-               Rectangles _redrawClip = new Rectangles();//should find another way to access it from child
-               List<GraphicObject> _gobjsToRedraw = new List<GraphicObject>();
-
-               public Rectangles redrawClip {
-                       get {
-                               return _redrawClip;
-                       }
-                       set {
-                               _redrawClip = value;
-                       }
-               }
-               public List<GraphicObject> gobjsToRedraw {
-                       get {
-                               return _gobjsToRedraw;
-                       }
-                       set {
-                               _gobjsToRedraw = value;
-                       }
-               }                       
-
-               #region focus
-
-               GraphicObject _activeWidget;    //button is pressed on widget 
-               GraphicObject _hoverWidget;             //mouse is over
-               GraphicObject _focusedWidget;   //has keyboard (or other perif) focus 
-
-               public GraphicObject activeWidget
-               {
-                       get { return _activeWidget; }
-                       set 
-                       {
-                               if (_activeWidget == value)
-                                       return;
-
-                               _activeWidget = value;
-                       }
-               }
-               public GraphicObject hoverWidget
-               {
-                       get { return _hoverWidget; }
-                       set { _hoverWidget = value; }
-               }
-               public GraphicObject FocusedWidget {
-                       get { return _focusedWidget; }
-                       set {
-                               if (_focusedWidget == value)
-                                       return;
-                               if (_focusedWidget != null)
-                                       _focusedWidget.onUnfocused (this, null);
-                               _focusedWidget = value;
-                               _focusedWidget.onFocused (this, null);
-                       }
-               }
-
-               #endregion
-
-               Rectangle dirtyZone = Rectangle.Empty;
-
-               #region Chrono's
-               public Stopwatch updateTime = new Stopwatch ();
-               public Stopwatch layoutTime = new Stopwatch ();
-               public Stopwatch guTime = new Stopwatch ();
-               public Stopwatch drawingTime = new Stopwatch ();
-               #endregion
-
-               #region update
-               void update (Cairo.Context ctx)
-               {
-                       updateTime.Restart ();
-                       layoutTime.Reset ();
-                       guTime.Reset ();
-                       drawingTime.Reset ();
-
-                       GraphicObject[] invGOList = new GraphicObject[GraphicObjects.Count];
-                       GraphicObjects.CopyTo (invGOList,0);
-                       invGOList = invGOList.Reverse ().ToArray ();
-
-                       //Debug.WriteLine ("======= Layouting queue start =======");
-                       while (Interface.LayoutingQueue.Count > 0) {
-                               LayoutingQueueItem lqi = Interface.LayoutingQueue.Dequeue ();
-                               lqi.ProcessLayouting ();
-                       }
-
-                       //Debug.WriteLine ("otd:" + gobjsToRedraw.Count.ToString () + "-");
-                       //final redraw clips should be added only when layout is completed among parents,
-                       //that's why it take place in a second pass
-                       GraphicObject[] gotr = new GraphicObject[gobjsToRedraw.Count];
-                       gobjsToRedraw.CopyTo (gotr);
-                       gobjsToRedraw.Clear ();
-                       foreach (GraphicObject p in gotr) {
-                               p.registerClipRect ();
-                       }
-
-
-                       lock (redrawClip) {
-                               if (redrawClip.count > 0) {                                     
-                                       //                                      #if DEBUG_CLIP_RECTANGLE
-                                       //                                      redrawClip.stroke (ctx, new Color(1.0,0,0,0.3));
-                                       //                                      #endif
-                                       redrawClip.clearAndClip (ctx);//rajouté après, tester si utile        
-
-                                       //Link.draw (ctx);
-                                       foreach (GraphicObject p in invGOList) {
-                                               if (p.Visible) {
-                                                       drawingTime.Start ();
-
-                                                       ctx.Save ();
-                                                       if (redrawClip.count > 0) {
-                                                               Rectangles clip = redrawClip.intersectingRects (p.Slot);
-
-                                                               if (clip.count > 0)
-                                                                       p.Paint (ref ctx, clip);
-                                                       }
-                                                       ctx.Restore ();
-
-                                                       drawingTime.Stop ();
-                                               }
-                                       }
-                                       ctx.ResetClip ();
-                                       dirtyZone = redrawClip.Bounds;
-                                       //                                      #if DEBUG_CLIP_RECTANGLE
-                                       //                                      redrawClip.stroke (ctx, Color.Red.AdjustAlpha(0.1));
-                                       //                                      #endif
-                                       redrawClip.Reset ();
-                               }
-                       }
-                       //surf.WriteToPng (@"/mnt/data/test.png");
-
-                       //                      if (ToolTip.isVisible) {
-                       //                              ToolTip.panel.processkLayouting();
-                       //                              if (ToolTip.panel.layoutIsValid)
-                       //                                      ToolTip.panel.Paint(ref ctx);
-                       //                      }
-                       //                      Debug.WriteLine("INTERFACE: layouting: {0} ticks \t graphical update {1} ticks \t drawing {2} ticks",
-                       //                          layoutTime.ElapsedTicks,
-                       //                          guTime.ElapsedTicks,
-                       //                          drawingTime.ElapsedTicks);
-                       //                      Debug.WriteLine("INTERFACE: layouting: {0} ms \t graphical update {1} ms \t drawing {2} ms",
-                       //                          layoutTime.ElapsedMilliseconds,
-                       //                          guTime.ElapsedMilliseconds,
-                       //                          drawingTime.ElapsedMilliseconds);
-                       updateTime.Stop ();
-                       //                      Debug.WriteLine("UPDATE: {0} ticks \t, {1} ms",
-                       //                              updateTime.ElapsedTicks,
-                       //                              updateTime.ElapsedMilliseconds);
-               }                                               
-               #endregion
-                                       
-
-               public void AddWidget(GraphicObject g)
-               {
-                       g.Parent = this;
-                       GraphicObjects.Add (g);
-               }
-               public void DeleteWidget(GraphicObject g)
-               {
-                       g.Visible = false;//trick to ensure clip is added to refresh zone
-                       GraphicObjects.Remove (g);
-               }
-
-//             public void LoadInterface<T>(string path, out T result)
-//             {
-//                     GraphicObject.Load<T> (path, out result, this);
-//                     AddWidget (result as GraphicObject);
-//             }
-//             public T LoadInterface<T> (string Path)
-//             {
-//                     T result;
-//                     GraphicObject.Load<T> (Path, out result, this);
-//                     AddWidget (result as GraphicObject);
-//                     return result;
-//             }
-
-
-
-               public void PutOnTop(GraphicObject g)
-               {
-                       if (GraphicObjects.IndexOf(g) > 0)
-                       {
-                               GraphicObjects.Remove(g);
-                               GraphicObjects.Insert(0, g);
-                       }
-               }
-
-               #region Mouse Handling
-               void Mouse_Move(object sender, MouseMoveEventArgs e)
-               {
-                       if (_activeWidget != null) {
-                               //send move evt even if mouse move outside bounds
-                               _activeWidget.onMouseMove (_activeWidget, e);
-                               return;
-                       }
-
-                       if (_hoverWidget != null) {
-                               //check topmost graphicobject first
-                               GraphicObject tmp = _hoverWidget;
-                               GraphicObject topc = null;
-                               while (tmp is GraphicObject) {
-                                       topc = tmp;
-                                       tmp = tmp.Parent as GraphicObject;
-                               }
-                               int idxhw = GraphicObjects.IndexOf (topc);
-                               if (idxhw != 0) {
-                                       int i = 0;
-                                       while (i < idxhw) {
-                                               if (GraphicObjects [i].MouseIsIn (e.Position)) {
-                                                       _hoverWidget.onMouseLeave (this, e);
-                                                       GraphicObjects [i].checkHoverWidget (e);
-                                                       return;
-                                               }
-                                               i++;
-                                       }
-                               }
-
-
-                               if (_hoverWidget.MouseIsIn (e.Position)) {
-                                       _hoverWidget.checkHoverWidget (e);
-                                       return;
-                               } else {
-                                       _hoverWidget.onMouseLeave (this, e);
-                                       //seek upward from last focused graph obj's
-                                       while (_hoverWidget.Parent as GraphicObject!=null) {
-                                               _hoverWidget = _hoverWidget.Parent as GraphicObject;
-                                               if (_hoverWidget.MouseIsIn (e.Position)) {
-                                                       _hoverWidget.checkHoverWidget (e);
-                                                       return;
-                                               } else
-                                                       _hoverWidget.onMouseLeave (this, e);
-                                       }
-                               }
-                       }
-
-                       //top level graphic obj's parsing
-                       for (int i = 0; i < GraphicObjects.Count; i++) {
-                               GraphicObject g = GraphicObjects[i];
-                               if (g.MouseIsIn (e.Position)) {
-                                       g.checkHoverWidget (e);
-                                       PutOnTop (g);
-                                       return;
-                               }
-                       }
-                       _hoverWidget = null;
-                       MouseMove.Raise (this, e);
-               }
-               void Mouse_ButtonUp(object sender, MouseButtonEventArgs e)
-               {
-                       if (_activeWidget == null)
-                               return;
-
-                       _activeWidget.onMouseButtonUp (this, e);
-                       _activeWidget = null;
-                       MouseButtonUp.Raise (this, e);
-               }
-               void Mouse_ButtonDown(object sender, MouseButtonEventArgs e)
-               {
-                       if (_hoverWidget == null) {
-                               MouseButtonDown.Raise (this, e);
-                               return;
-                       }
-
-                       GraphicObject g = _hoverWidget;
-                       while (!g.Focusable) {                          
-                               g = g.Parent as GraphicObject;
-                               if (g == null) {                                        
-                                       return;
-                               }
-                       }
-
-                       _activeWidget = g;
-                       _activeWidget.onMouseButtonDown (this, e);
-               }
-
-               void Mouse_WheelChanged(object sender, MouseWheelEventArgs e)
-               {
-                       if (_hoverWidget == null) {
-                               MouseWheelChanged.Raise (this, e);
-                               return;
-                       }
-                       _hoverWidget.onMouseWheel (this, e);
-               }        
-               #endregion
-
-               #region keyboard Handling
-               void Keyboard_KeyDown(object sender, KeyboardKeyEventArgs e)
-               {
-                       if (_focusedWidget == null)
-                               return;
-                       _focusedWidget.onKeyDown (sender, e);
-               }
-               #endregion
-
-               public void Quit ()
-               {
-                       throw new NotImplementedException ();
-               }
-               
-
-               #region ILayoutable implementation
-
-               public Rectangle ContextCoordinates (Rectangle r)
-               {
-                       return r;
-               }
-               public Rectangle ScreenCoordinates (Rectangle r)
-               {
-                       return r;
-               }
-
-               public ILayoutable Parent {
-                       get {
-                               return null;
-                       }
-                       set {
-                               throw new NotImplementedException ();
-                       }
-               }
-
-               public bool SizeIsValid {
-                       get { return true; }
-                       set { throw new NotImplementedException ();     }
-               }
-
-               public void RegisterForLayouting (int layoutType)
-               {
-                       throw new NotImplementedException ();
-               }
-
-
-               public void UpdateLayout (LayoutingType layoutType)
-               {
-                       throw new NotImplementedException ();
-               }
-
-               public bool PositionIsValid {
-                       get {
-                               return true;
-                       }
-                       set {
-                               throw new NotImplementedException ();
-                       }
-               }
-               public bool LayoutIsValid {
-                       get {
-                               return true;//tester tout les enfants a mon avis
-                       }
-                       set {
-                               throw new NotImplementedException ();
-                       }
-               }
-
-               public Rectangle ClientRectangle {
-                       get {                   
-                               return new go.Size(Allocation.Width,Allocation.Height);
-                       }
-               }
-
-               public IGOLibHost TopContainer {
-                       get { return this as IGOLibHost; }
-               }
-
-               public Rectangle getSlot ()
-               {
-                       return ClientRectangle;
-               }
-               public Rectangle getBounds ()//redundant but fill ILayoutable implementation
-               {
-                       return ClientRectangle;
-               }
-
-               public bool WIsValid {
-                       get {
-                               return true;
-                       }
-                       set {
-                               throw new NotImplementedException ();
-                       }
-               }
-               public bool HIsValid {
-                       get {
-                               return true;
-                       }
-                       set {
-                               throw new NotImplementedException ();
-                       }
-               }
-               public bool XIsValid {
-                       get {
-                               return true;
-                       }
-                       set {
-                               throw new NotImplementedException ();
-                       }
-               }
-               public bool YIsValid {
-                       get {
-                               return true;
-                       }
-                       set {
-                               throw new NotImplementedException ();
-                       }
-               }
-
-               public virtual void InvalidateLayout ()
-               {
-                       //                      foreach (GraphicObject g in GraphicObjects) {
-                       //                              g.InvalidateLayout ();
-                       //                      }
-               }
-
-               #endregion
-       }
-}
-
diff --git a/GOMLViewer/src/GOLibNodeExtension.cs b/GOMLViewer/src/GOLibNodeExtension.cs
deleted file mode 100644 (file)
index 0d0a42b..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-// 
-// ImageViewerNodeExtension.cs
-//  
-// Author:
-//       Mike Krüger <mkrueger@novell.com>
-// 
-// Copyright (c) 2010 Novell, Inc (http://www.novell.com)
-// 
-// 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.
-
-using System;
-using MonoDevelop.Projects;
-using MonoDevelop.Ide.Gui.Components;
-using MonoDevelop.Components;
-using MonoDevelop.Components.Commands;
-using MonoDevelop.Ide;
-
-namespace MonoDevelop.GOLib
-{
-       enum Commands {
-               ShowGOLibViewer
-       }
-       
-       class GOLibNodeExtension : NodeBuilderExtension
-       {               
-               public override Type CommandHandlerType {
-                       get { return typeof(GOLibCommandHandler); }
-               }
-               public override bool CanBuildNode (Type dataType)
-               {                       
-                       return typeof(ProjectFile).IsAssignableFrom (dataType);
-               }
-               public override void BuildNode (ITreeBuilder treeBuilder, object dataObject, NodeInfo nodeInfo)
-               {
-                       ProjectFile pf  = dataObject as ProjectFile;
-
-//                     string mimeType = DesktopService.GetMimeTypeForUri (pf.FilePath);
-//                     if (mimeType.StartsWith ("image/", StringComparison.CurrentCultureIgnoreCase)) {
-//                             Image i;
-//                             if (pf != null) {                               
-//                                     i = Image.FromFile (pf.FilePath);
-//                                     nodeInfo.Icon = i.Scale (16.0 / i.Width, 16.0 / i.Height);
-//                             }
-//                     }
-
-                       base.BuildNode (treeBuilder, dataObject, nodeInfo);
-               } 
-       }
-       
-       class GOLibCommandHandler: NodeCommandHandler 
-       {
-               [CommandHandler (Commands.ShowGOLibViewer)]
-               protected void OnShowGOLibViewer () 
-               {
-
-                       GOLibView view = new GOLibView ();
-
-                       ProjectFile file   = CurrentNode.DataItem as ProjectFile;
-                       if (file != null)
-                               view.Load (file.FilePath);
-                       
-                       IdeApp.Workbench.OpenDocument (view, true);
-               }
-       }
-
-}
-
diff --git a/GOMLViewer/src/GOLibView.cs b/GOMLViewer/src/GOLibView.cs
deleted file mode 100644 (file)
index 5c3d8f2..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-//
-//  ImageViewer.cs
-//
-//  Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-//  Copyright (c) 2015 jp
-//
-//  This program is free software: you can redistribute it and/or modify
-//  it under the terms of the GNU Lesser General Public License as published by
-//  the Free Software Foundation, either version 3 of the License, or
-//  (at your option) any later version.
-//
-//  This program is distributed in the hope that it will be useful,
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//  GNU Lesser General Public License for more details.
-//
-//  You should have received a copy of the GNU Lesser General Public License
-//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-// 
-// HexEditorView.cs
-//  
-// Author:
-//       Mike Krüger <mkrueger@novell.com>
-// 
-// Copyright (c) 2009 Novell, Inc (http://www.novell.com)
-// 
-// 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.
-
-using System;
-using System.IO;
-using MonoDevelop.Ide.Gui;
-using MonoDevelop.Ide.Gui.Content;
-using MonoDevelop.Ide.Fonts;
-using Mono.Addins;
-using MonoDevelop.Core;
-using MonoDevelop.Ide;
-using go;
-using MonoDevelop.DesignerSupport;
-
-namespace MonoDevelop.GOLib
-{
-       class GOLibView : AbstractViewContent
-       {
-               GOLibGtkHost gtkGoWidgetHost;
-
-
-               double zoom = 1.0;
-               
-               public override Gtk.Widget Control {
-                       get {
-                               return gtkGoWidgetHost;
-                       }
-               }
-
-               public GOLibView ()
-               {                       
-                       gtkGoWidgetHost = new GOLibGtkHost ();
-               }
-
-               public override void Load (string fileName)
-               {                                                       
-                       gtkGoWidgetHost.Load (fileName);
-                       ContentName = fileName;
-                       this.IsDirty = false;
-                       gtkGoWidgetHost.Show ();
-               }
-               public override bool CanReuseView (string fileName)
-               {
-                       return base.CanReuseView (fileName);
-               }
-               public override void RedrawContent ()
-               {
-                       base.RedrawContent ();
-               }
-       }
-}
diff --git a/GtkCrow/CrowContainer.cs b/GtkCrow/CrowContainer.cs
deleted file mode 100644 (file)
index d404d62..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-//
-//  OpenTKGameWindow.cs
-//
-//  Author:
-//       Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
-//
-//  Copyright (c) 2016 jp
-//
-//  This program is free software: you can redistribute it and/or modify
-//  it under the terms of the GNU General Public License as published by
-//  the Free Software Foundation, either version 3 of the License, or
-//  (at your option) any later version.
-//
-//  This program is distributed in the hope that it will be useful,
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//  GNU General Public License for more details.
-//
-//  You should have received a copy of the GNU General Public License
-//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.IO;
-using System.Linq;
-using System.Threading;
-using System.Xml;
-using Cairo;
-
-
-namespace Crow
-{
-       public class OpenTKGameWindow : Gtk.Window
-    {
-               public Interface CrowInterface;
-
-
-               #region ctor
-               public OpenTKGameWindow(int _width, int _height, string _title="Crow")
-                       : base(Gtk.WindowType.Toplevel)
-               {
-                       CrowInterface = new Interface ();
-                       CrowInterface.Quit += Quit;
-
-
-                       Decorated = false;
-                       this.AddEvents ((int)Gdk.EventMask.PointerMotionMask);
-                       this.DeleteEvent += Win_DeleteEvent;
-                       this.Drawn += Win_Drawn;
-                       this.OverrideBackgroundColor (Gtk.StateFlags.Normal, Gdk.RGBA.Zero);
-                       this.Visual = Gdk.Global.DefaultRootWindow.Screen.RgbaVisual;
-
-                       this.ButtonPressEvent += OpenTKGameWindow_ButtonPressEvent;
-                       this.ButtonReleaseEvent += OpenTKGameWindow_ButtonReleaseEvent;
-                       this.MotionNotifyEvent += OpenTKGameWindow_MotionNotifyEvent;
-                       this.KeyPressEvent += OpenTKGameWindow_KeyPressEvent;
-                       this.SizeAllocated += OpenTKGameWindow_SizeAllocated;
-
-                       this.Show ();
-                       this.Maximize ();
-
-                       GLib.Idle.Add (new GLib.IdleHandler (idleHandler));
-                       GLib.Timeout.Add (10, new GLib.TimeoutHandler (updateHandler));
-               }
-               #endregion
-
-
-
-               #region Timers
-               bool updateHandler(){
-                       CrowInterface.Update();
-                       return true;
-               }
-               bool idleHandler(){
-                       if (CrowInterface.IsDirty) {
-                               QueueDrawArea (CrowInterface.DirtyRect.X, CrowInterface.DirtyRect.Y, CrowInterface.DirtyRect.Width, CrowInterface.DirtyRect.Height);
-                               return false;
-                       }
-                       return true;
-               }
-               #endregion
-
-               protected void Quit (object sender, EventArgs e)
-               {
-                       Gtk.Application.Quit ();
-               }
-
-               void Win_Drawn (object o, Gtk.DrawnArgs args)
-               {
-                       if (CrowInterface.IsDirty) {
-                               using (ImageSurface img = new ImageSurface (CrowInterface.dirtyBmp, Format.Argb32, CrowInterface.DirtyRect.Width, CrowInterface.DirtyRect.Height, 4 * CrowInterface.DirtyRect.Width)) {
-                                       args.Cr.SetSourceSurface (img, CrowInterface.DirtyRect.X, CrowInterface.DirtyRect.Y);
-                                       args.Cr.Paint();
-                               }
-
-                               CrowInterface.IsDirty = false;
-                               GLib.Idle.Add (new GLib.IdleHandler (idleHandler));
-                               return;
-                       }
-                       if (CrowInterface.bmp != null) {
-                               using (ImageSurface img = new ImageSurface (CrowInterface.bmp, Format.Argb32, CrowInterface.ClientRectangle.Width, CrowInterface.ClientRectangle.Height, 4 * CrowInterface.ClientRectangle.Width)) {
-                                       args.Cr.SetSourceSurface (img, CrowInterface.ClientRectangle.X, CrowInterface.ClientRectangle.Y);
-                                       args.Cr.Paint ();
-                               }
-                       }
-               }
-               void Win_DeleteEvent (object o, Gtk.DeleteEventArgs args)
-               {
-                       Gtk.Application.Quit ();
-               }
-               void OpenTKGameWindow_SizeAllocated (object o, Gtk.SizeAllocatedArgs args)
-               {
-                       CrowInterface.ProcessResize (new Rectangle (args.Allocation.X, args.Allocation.Y, args.Allocation.Width, args.Allocation.Height));
-               }        
-               void OpenTKGameWindow_MotionNotifyEvent (object o, Gtk.MotionNotifyEventArgs args)
-               {
-                       CrowInterface.ProcessMouseMove ((int)args.Event.X, (int)args.Event.Y);
-        }
-
-               void OpenTKGameWindow_ButtonReleaseEvent (object o, Gtk.ButtonReleaseEventArgs args)
-               {
-                       CrowInterface.ProcessMouseButtonUp ((int)args.Event.Button - 1);
-               }
-               void OpenTKGameWindow_ButtonPressEvent (object o, Gtk.ButtonPressEventArgs args)
-               {
-                       CrowInterface.ProcessMouseButtonDown ((int)args.Event.Button - 1);
-               }
-
-//             void Mouse_WheelChanged(object sender, OpenTK.Input.MouseWheelEventArgs otk_e)
-//        {
-//                     MouseWheelEventArgs e = new MouseWheelEventArgs (otk_e.X, otk_e.Y, otk_e.Value, otk_e.Delta);
-//                     MouseState ms = e.Mouse;
-//                     update_mouseButtonStates (ref ms, otk_e.Mouse);
-//                     e.Mouse = ms;
-//
-//                     if (hoverWidget == null) {
-//                             MouseWheelChanged.Raise (this, otk_e);
-//                             return;
-//                     }
-//                     hoverWidget.onMouseWheel (this, e);
-//        }
-
-
-
-       #region keyboard Handling
-//             KeyboardState Keyboad = new KeyboardState ();
-//             void Keyboard_KeyDown(object sender, OpenTK.Input.KeyboardKeyEventArgs otk_e)
-//     {
-////                   if (_focusedWidget == null) {
-//                             KeyboardKeyDown.Raise (this, otk_e);
-////                           return;
-////                   }
-//                     Keyboad.SetKeyState ((Crow.Key)otk_e.Key, true);
-//                     KeyboardKeyEventArgs e = new KeyboardKeyEventArgs((Crow.Key)otk_e.Key, otk_e.IsRepeat,Keyboad);
-//                     _focusedWidget.onKeyDown (sender, e);
-//        }
-               void OpenTKGameWindow_KeyPressEvent (object o, Gtk.KeyPressEventArgs args)
-               {
-
-               }
-
-       #endregion
-    }
-}
diff --git a/GtkCrow/GtkCrow.csproj b/GtkCrow/GtkCrow.csproj
deleted file mode 100644 (file)
index e9305eb..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">Linux_x86</Platform>
-    <ProductVersion>8.0.30703</ProductVersion>
-    <SchemaVersion>2.0</SchemaVersion>
-    <ProjectGuid>{D6F98B08-56B8-405C-9212-F9D26097E35F}</ProjectGuid>
-    <OutputType>Library</OutputType>
-    <RootNamespace>GtkCrow</RootNamespace>
-    <AssemblyName>GtkCrow</AssemblyName>
-    <ReleaseVersion>0.4</ReleaseVersion>
-    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|Linux_x86' ">
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>false</Optimize>
-    <OutputPath>bin\Debug</OutputPath>
-    <DefineConstants>DEBUG;MEASURE_TIME</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <ConsolePause>false</ConsolePause>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|Linux_x86' ">
-    <DebugType>full</DebugType>
-    <Optimize>true</Optimize>
-    <OutputPath>bin\Release</OutputPath>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <ConsolePause>false</ConsolePause>
-  </PropertyGroup>
-  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
-  <ItemGroup>
-    <ProjectReference Include="..\Crow.csproj">
-      <Project>{C2980F9B-4798-4C05-99E2-E174810F7C7B}</Project>
-      <Name>Crow</Name>
-    </ProjectReference>
-  </ItemGroup>
-  <ItemGroup>
-    <Reference Include="System" />
-    <Reference Include="System.Data" />
-    <Reference Include="System.Drawing" />
-    <Reference Include="System.Xml" />
-    <Reference Include="atk-sharp, Version=3.0.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f">
-      <Package>gtk-sharp-3.0</Package>
-    </Reference>
-    <Reference Include="cairo-sharp, Version=1.10.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756">
-      <Package>gtk-sharp-3.0</Package>
-    </Reference>
-    <Reference Include="gdk-sharp, Version=3.0.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f">
-      <Package>gdk-sharp-3.0</Package>
-    </Reference>
-    <Reference Include="gio-sharp, Version=3.0.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f">
-      <Package>gio-sharp-3.0</Package>
-    </Reference>
-    <Reference Include="glib-sharp, Version=3.0.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f">
-      <Package>glib-sharp-3.0</Package>
-    </Reference>
-    <Reference Include="gtk-sharp, Version=3.0.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f">
-      <Package>gtk-sharp-3.0</Package>
-    </Reference>
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="CrowContainer.cs" />
-  </ItemGroup>
-</Project>
\ No newline at end of file
diff --git a/MonoDevelop.GOLib/MonoDevelop.GOLib.addin.xml b/MonoDevelop.GOLib/MonoDevelop.GOLib.addin.xml
deleted file mode 100644 (file)
index fe15b3e..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-<ExtensionModel>       
-       <Extension path = "/MonoDevelop/Ide/DisplayBindings">                   
-               <DisplayBinding
-                       id = "GOLib designer"
-                       insertafter ="AssemblyBrowser" 
-                       class = "MonoDevelop.GOLib.GOLibDisplayBinding" />
-       </Extension>
-       <Extension path = "/MonoDevelop/Ide/Pads/ProjectPad">
-               <NodeBuilder id = "GOLibNodeExtension" class = "MonoDevelop.GOLib.GOLibNodeExtension"/>
-       </Extension>
-       <Extension path = "/MonoDevelop/Core/MimeTypes">
-               <MimeType id="text/x-goml" _description="GOlib interface definition" icon="md-csharp-file" isText="false">
-                       <File pattern="*.goml" />
-               </MimeType>
-       </Extension>
-<!--   <Extension path = "/MonoDevelop/DesignerSupport/PropertyProviders" extension-nodes="Class">
-               <Class class = "MonoDevelop.GOLib.GOLibItemPropertyProvider"/>
-       </Extension>-->
-</ExtensionModel>
\ No newline at end of file
diff --git a/MonoDevelop.GOLib/MonoDevelop.GOLib.csproj b/MonoDevelop.GOLib/MonoDevelop.GOLib.csproj
deleted file mode 100644 (file)
index b09de99..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProductVersion>8.0.30703</ProductVersion>
-    <SchemaVersion>2.0</SchemaVersion>
-    <ProjectGuid>{E9E14DB5-3C67-4E01-B5C3-4D90D7E31A2E}</ProjectGuid>
-    <OutputType>Library</OutputType>
-    <RootNamespace>MonoDevelop.GOLib</RootNamespace>
-    <AssemblyName>MonoDevelop.GOLib</AssemblyName>
-    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
-    <OutputPath>build</OutputPath>
-    <CustomCommands>
-      <CustomCommands>
-        <Command type="Execute" command="/usr/local/lib/monodevelop/bin/MonoDevelop.exe --no-redirect" workingdir="/usr/local/lib/monodevelop/bin">
-          <EnvironmentVariables>
-            <Variable name="MONODEVELOP_DEV_ADDINS" value="${TargetDir}" />
-            <Variable name="MONODEVELOP_CONSOLE_LOG_LEVEL" value="UpToDebug" />
-            <Variable name="MONODEVELOP_LOGGING_PAD_LEVEL" value="UpToDebug" />
-            <Variable name="MONODEVELOP_CONSOLE_LOG_USE_COLOUR" value="True" />
-          </EnvironmentVariables>
-        </Command>
-      </CustomCommands>
-    </CustomCommands>
-    <ReleaseVersion>0.4</ReleaseVersion>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>false</Optimize>
-    <DefineConstants>DEBUG;</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <ConsolePause>false</ConsolePause>
-    <CustomCommands>
-      <CustomCommands>
-        <Command type="Execute" command="/usr/local/lib/monodevelop/bin/MonoDevelop.exe --no-redirect" workingdir="/usr/local/lib/monodevelop/bin" />
-      </CustomCommands>
-    </CustomCommands>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <DebugType>none</DebugType>
-    <Optimize>true</Optimize>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <ConsolePause>false</ConsolePause>
-    <CustomCommands>
-      <CustomCommands>
-        <Command type="Execute" command="/usr/local/lib/monodevelop/bin/MonoDevelop.exe --no-redirect" workingdir="/usr/local/lib/monodevelop/bin" />
-      </CustomCommands>
-    </CustomCommands>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="System" />
-    <Reference Include="ICSharpCode.NRefactory">
-      <HintPath>\usr\local\lib\monodevelop\bin\ICSharpCode.NRefactory.dll</HintPath>
-    </Reference>
-    <Reference Include="Mono.Addins">
-      <Package>mono-addins</Package>
-    </Reference>
-    <Reference Include="MonoDevelop.Ide">
-      <HintPath>\usr\local\lib\monodevelop\bin\MonoDevelop.Ide.dll</HintPath>
-    </Reference>
-    <Reference Include="MonoDevelop.Core">
-      <HintPath>\usr\local\lib\monodevelop\bin\MonoDevelop.Core.dll</HintPath>
-    </Reference>
-    <Reference Include="MonoDevelop.DesignerSupport">
-      <HintPath>\usr\local\lib\monodevelop\AddIns\MonoDevelop.DesignerSupport\MonoDevelop.DesignerSupport.dll</HintPath>
-    </Reference>
-    <Reference Include="Mono.Cairo" />
-    <Reference Include="gtk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f">
-      <Package>gtk-sharp-2.0</Package>
-    </Reference>
-    <Reference Include="gdk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f">
-      <Package>gtk-sharp-2.0</Package>
-    </Reference>
-    <Reference Include="atk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f">
-      <Package>gtk-sharp-2.0</Package>
-    </Reference>
-    <Reference Include="glib-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f">
-      <Package>glib-sharp-2.0</Package>
-    </Reference>
-    <Reference Include="System.Xml" />
-    <Reference Include="System.Xml.Linq" />
-    <Reference Include="System.Drawing" />
-    <Reference Include="OpenTK">
-      <HintPath>..\..\opentk\Binaries\OpenTK\Release\OpenTK.dll</HintPath>
-    </Reference>
-    <Reference Include="MonoDevelop.SourceEditor2">
-      <HintPath>..\..\..\..\..\usr\local\lib\monodevelop\AddIns\DisplayBindings\SourceEditor\MonoDevelop.SourceEditor2.dll</HintPath>
-    </Reference>
-    <Reference Include="Mono.TextEditor">
-      <HintPath>..\..\..\..\..\usr\local\lib\monodevelop\bin\Mono.TextEditor.dll</HintPath>
-    </Reference>
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="Properties\AddinInfo.cs" />
-    <Compile Include="src\DisplayBinding.cs" />
-    <Compile Include="src\GOLibView.cs" />
-    <Compile Include="src\GOLibNodeExtension.cs" />
-    <Compile Include="src\GOLibGtkHost.cs" />
-  </ItemGroup>
-  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
-  <ItemGroup>
-    <Folder Include="src\" />
-  </ItemGroup>
-  <ItemGroup>
-    <EmbeddedResource Include="MonoDevelop.GOLib.addin.xml" />
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="..\Crow.csproj">
-      <Project>{C2980F9B-4798-4C05-99E2-E174810F7C7B}</Project>
-      <Name>Crow</Name>
-    </ProjectReference>
-  </ItemGroup>
-</Project>
\ No newline at end of file
diff --git a/MonoDevelop.GOLib/MyClass.cs b/MonoDevelop.GOLib/MyClass.cs
deleted file mode 100644 (file)
index 4ffb796..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-using System;
-
-namespace MonoDevelop.GOLib
-{
-       public class MyClass
-       {
-               public MyClass ()
-               {
-               }
-       }
-}
-
diff --git a/MonoDevelop.GOLib/Properties/AddinInfo.cs b/MonoDevelop.GOLib/Properties/AddinInfo.cs
deleted file mode 100644 (file)
index f5af5b8..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-
-using System;
-using Mono.Addins;
-using Mono.Addins.Description;
-
-[assembly:Addin ("GOLib", 
-        Namespace = "MonoDevelop",
-        Version = MonoDevelop.BuildInfo.Version,
-        Category = "IDE extensions")]
-
-[assembly:AddinName ("MonoDevelop GOLib interface designer")]
-[assembly:AddinDescription ("")]
-
-[assembly:AddinDependency ("Core", MonoDevelop.BuildInfo.Version)]
-[assembly:AddinDependency ("Ide", MonoDevelop.BuildInfo.Version)]
-[assembly:AddinDependency ("Debugger", MonoDevelop.BuildInfo.Version)]
diff --git a/MonoDevelop.GOLib/Properties/AssemblyInfo.cs b/MonoDevelop.GOLib/Properties/AssemblyInfo.cs
deleted file mode 100644 (file)
index 117b153..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-
-// Information about this assembly is defined by the following attributes.
-// Change them to the values specific to your project.
-
-[assembly: AssemblyTitle ("MonoDevelop.GOLib")]
-[assembly: AssemblyDescription ("GOLib interface designer for MonoDevelop")]
-[assembly: AssemblyConfiguration ("")]
-[assembly: AssemblyCompany ("")]
-[assembly: AssemblyProduct ("")]
-[assembly: AssemblyCopyright ("jp")]
-[assembly: AssemblyTrademark ("")]
-[assembly: AssemblyCulture ("")]
-
-// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
-// The form "{Major}.{Minor}.*" will automatically update the build and revision,
-// and "{Major}.{Minor}.{Build}.*" will update just the revision.
-
-[assembly: AssemblyVersion ("1.0.*")]
-
-// The following attributes are used to specify the signing key for the assembly,
-// if desired. See the Mono documentation for more information about signing.
-
-//[assembly: AssemblyDelaySign(false)]
-//[assembly: AssemblyKeyFile("")]
-
diff --git a/MonoDevelop.GOLib/src/DisplayBinding.cs b/MonoDevelop.GOLib/src/DisplayBinding.cs
deleted file mode 100644 (file)
index 1898f16..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-//
-//  DisplayBinding.cs
-//
-//  Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-//  Copyright (c) 2015 jp
-//
-//  This program is free software: you can redistribute it and/or modify
-//  it under the terms of the GNU Lesser General Public License as published by
-//  the Free Software Foundation, either version 3 of the License, or
-//  (at your option) any later version.
-//
-//  This program is distributed in the hope that it will be useful,
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//  GNU Lesser General Public License for more details.
-//
-//  You should have received a copy of the GNU Lesser General Public License
-//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-// 
-// DisplayBinding.cs
-//  
-// Author:
-//       Mike Krüger <mkrueger@novell.com>
-// 
-// Copyright (c) 2009 Novell, Inc (http://www.novell.com)
-// 
-// 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.
-
-using System.IO;
-using MonoDevelop.Core;
-using MonoDevelop.Ide.Gui;
-using MonoDevelop.Projects;
-using System.Globalization;
-using System.Diagnostics;
-
-namespace MonoDevelop.GOLib
-{
-       class GOLibDisplayBinding : IViewDisplayBinding
-       {
-               bool canHandle = false;
-
-               public string Name {
-                       get {
-                               return GettextCatalog.GetString ("GOLib designer");
-                       }
-               }
-               public bool CanUseAsDefault 
-               { get { return true; }}
-
-               public IViewContent CreateContent (FilePath fileName, string mimeType, Project ownerProject)
-               {                       
-                       return new GOLibView ();
-
-
-               }
-               public bool CanHandle (FilePath fileName, string mimeType, Project ownerProject)
-               {                       
-                       canHandle = mimeType.StartsWith("text/x-goml");
-                       return canHandle;
-               }               
-       }
-}
diff --git a/MonoDevelop.GOLib/src/GOLibGtkHost.cs b/MonoDevelop.GOLib/src/GOLibGtkHost.cs
deleted file mode 100644 (file)
index 0069e3e..0000000
+++ /dev/null
@@ -1,586 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.Linq;
-using Crow;
-using MonoDevelop.Core;
-using MonoDevelop.Ide;
-using MonoDevelop.Projects;
-using System.Diagnostics;
-using OpenTK.Input;
-using MonoDevelop.DesignerSupport;
-using System.IO;
-using MonoDevelop.Components.Commands;
-
-namespace MonoDevelop.GOLib
-{
-       public class GOLibGtkHost : Gtk.DrawingArea, ILayoutable, IGOLibHost, IPropertyPadProvider,ICommandDelegator
-       {
-               #region ICommandDelegator implementation
-
-               public object GetDelegatedCommandTarget ()
-               {
-                       return hoverWidget;
-               }
-
-               #endregion
-
-               #region IPropertyPadProvider implementation
-
-               public object GetActiveComponent ()
-               {
-                       return activeWidget;
-               }
-               public object GetProvider ()
-               {
-                       return activeWidget;
-               }
-               public void OnEndEditing (object obj)
-               {
-
-               }
-               public void OnChanged (object obj)
-               {
-                       (obj as GraphicObject).RegisterForGraphicUpdate ();
-                       QueueDraw ();
-               }
-               #endregion
-       
-               #region Events
-               //those events are raised only if mouse isn't in a graphic object
-               public event EventHandler<MouseWheelEventArgs> MouseWheelChanged;
-               public event EventHandler<MouseButtonEventArgs> MouseButtonUp;
-               public event EventHandler<MouseButtonEventArgs> MouseButtonDown;
-               public event EventHandler<MouseButtonEventArgs> MouseClick;
-               public event EventHandler<MouseMoveEventArgs> MouseMove;
-               #endregion
-
-               string _path;
-               GraphicObject goWidget;
-
-               public GOLibGtkHost ()
-               {
-                       this.ExposeEvent += onExpose;
-                       this.ButtonPressEvent += GOLibGtkHost_ButtonPressEvent;
-                       this.ButtonReleaseEvent += GOLibGtkHost_ButtonReleaseEvent;
-                       this.MotionNotifyEvent += GOLibGtkHost_MotionNotifyEvent;
-
-                       this.Events |= Gdk.EventMask.ButtonPressMask | Gdk.EventMask.ButtonReleaseMask |
-                               Gdk.EventMask.PointerMotionMask | Gdk.EventMask.PointerMotionHintMask;
-               }
-               static double[] dashed = {2.0};
-
-               void onExpose(object o, Gtk.ExposeEventArgs args)
-               {
-                       Gtk.DrawingArea area = (Gtk.DrawingArea) o;
-                       Cairo.Context cr =  Gdk.CairoHelper.Create(area.GdkWindow);
-                       _redrawClip.AddRectangle (this.ClientRectangle);
-
-                       //LoggingService.LogInfo ("expose event");
-
-                       update (cr);
-
-                       if (_hoverWidget != null) {
-                               cr.Rectangle (_hoverWidget.ScreenCoordinates(_hoverWidget.getSlot ()));
-                               cr.LineWidth = 1;
-                               cr.SetDash (dashed, 0);
-                               cr.Color = Crow.Color.Yellow;
-                               cr.Stroke ();
-                       }
-                       ((IDisposable) cr.Target).Dispose();                                      
-                       ((IDisposable) cr).Dispose();
-               }
-               // TODO: should find a more safer way to link gtk button to otk.
-               void GOLibGtkHost_ButtonPressEvent (object o, Gtk.ButtonPressEventArgs args)
-               {
-                       MouseButtonEventArgs e = new MouseButtonEventArgs 
-                               ((int)args.Event.X, (int)args.Event.Y, 
-                                       gtkButtonIdToOpenTkButton(args.Event.Button), true);
-                       Mouse_ButtonDown (o, e);
-
-                       DesignerSupport.DesignerSupport.Service.SetPadContent (this, this);
-               }
-               void GOLibGtkHost_ButtonReleaseEvent (object o, Gtk.ButtonReleaseEventArgs args)
-               {
-                       MouseButtonEventArgs e = new MouseButtonEventArgs 
-                               ((int)args.Event.X, (int)args.Event.Y, 
-                                       gtkButtonIdToOpenTkButton(args.Event.Button), false);
-                       Mouse_ButtonUp (o, e);
-               }
-               int lastX,LastY;
-               void GOLibGtkHost_MotionNotifyEvent (object o, Gtk.MotionNotifyEventArgs args)
-               {
-                       
-                       Mouse_Move(this, new MouseMoveEventArgs (
-                               (int)args.Event.X,(int)args.Event.Y,
-                               (int)args.Event.X-lastX, (int)args.Event.Y-LastY
-                       ));
-                       lastX = (int)args.Event.X;
-                       LastY = (int)args.Event.Y;
-
-                       QueueDraw ();
-               }
-
-               MouseButton gtkButtonIdToOpenTkButton(uint gtkMouseButton)
-               {
-                       switch (gtkMouseButton) {
-                       case 1:
-                               return MouseButton.Left;
-                       case 2:
-                               return MouseButton.Middle;
-                       case 3:
-                               return MouseButton.Right;
-                       case 4:
-                               return MouseButton.Button4;
-                       case 5:
-                               return MouseButton.Button5;
-                       }
-                       return MouseButton.LastButton;
-               }
-
-
-
-               public void Load(string path)
-               {
-                       load(Interface.Load (path));
-               }
-
-               public void Load(Stream stream)
-               {
-                       GraphicObject tmp = null;
-                       try {
-                               tmp = Interface.Load (stream, Interface.GetTopContainerOfGOMLStream (stream));
-                       } catch (Exception ex) {
-                               return; 
-                       } 
-                       load (tmp);
-                       QueueDraw ();
-               }
-
-               void load(GraphicObject go)
-               {
-                       if (goWidget != null)
-                               DeleteWidget (goWidget);
-                       goWidget = go;
-                       this.AddWidget (goWidget);
-               }
-
-               public void AddWidget(GraphicObject g)
-               {
-                       g.Parent = this;
-                       GraphicObjects.Insert (0, g);
-
-                       g.RegisterForLayouting (LayoutingType.Sizing);
-               }
-               public void DeleteWidget(GraphicObject g)
-               {
-                       g.Visible = false;//trick to ensure clip is added to refresh zone
-                       g.ClearBinding();
-                       GraphicObjects.Remove (g);
-               }
-
-               public List<GraphicObject> GraphicObjects = new List<GraphicObject>();
-               public Color Background = Color.Transparent;
-
-               Rectangles _redrawClip = new Rectangles();//should find another way to access it from child
-               List<GraphicObject> _gobjsToRedraw = new List<GraphicObject>();
-
-               public Rectangles redrawClip {
-                       get {
-                               return _redrawClip;
-                       }
-                       set {
-                               _redrawClip = value;
-                       }
-               }
-               public List<GraphicObject> gobjsToRedraw {
-                       get {
-                               return _gobjsToRedraw;
-                       }
-                       set {
-                               _gobjsToRedraw = value;
-                       }
-               }                       
-
-               #region focus
-
-               GraphicObject _activeWidget;    //button is pressed on widget 
-               GraphicObject _hoverWidget;             //mouse is over
-               GraphicObject _focusedWidget;   //has keyboard (or other perif) focus 
-
-               public GraphicObject activeWidget
-               {
-                       get { return _activeWidget; }
-                       set 
-                       {
-                               if (_activeWidget == value)
-                                       return;
-
-                               _activeWidget = value;
-                       }
-               }
-               public GraphicObject hoverWidget
-               {
-                       get { return _hoverWidget; }
-                       set { _hoverWidget = value; }
-               }
-               public GraphicObject FocusedWidget {
-                       get { return _focusedWidget; }
-                       set {
-                               if (_focusedWidget == value)
-                                       return;
-                               if (_focusedWidget != null)
-                                       _focusedWidget.onUnfocused (this, null);
-                               _focusedWidget = value;
-                               _focusedWidget.onFocused (this, null);
-                       }
-               }
-
-               #endregion
-
-               Rectangle dirtyZone = Rectangle.Empty;
-
-               #region Chrono's
-               public Stopwatch updateTime = new Stopwatch ();
-               public Stopwatch layoutTime = new Stopwatch ();
-               public Stopwatch guTime = new Stopwatch ();
-               public Stopwatch drawingTime = new Stopwatch ();
-               #endregion
-
-               #region update
-               void update (Cairo.Context ctx)
-               {
-                       updateTime.Restart ();
-                       layoutTime.Reset ();
-                       guTime.Reset ();
-                       drawingTime.Reset ();
-
-                       GraphicObject[] invGOList = new GraphicObject[GraphicObjects.Count];
-                       GraphicObjects.CopyTo (invGOList,0);
-                       invGOList = invGOList.Reverse ().ToArray ();
-
-                       Crow.Size newSize = this.ClientRectangle.Size;
-                       if (lastSize != newSize) {
-                               foreach (GraphicObject g in GraphicObjects)
-                                       g.RegisterForLayouting (LayoutingType.All);
-                               lastSize = newSize;
-                       }
-
-                       //Debug.WriteLine ("======= Layouting queue start =======");
-                       while (Interface.CurrentInterface.LayoutingQueue.Count > 0) {
-                               LayoutingQueueItem lqi = Interface.CurrentInterface.LayoutingQueue.Dequeue ();
-                               lqi.ProcessLayouting ();
-                       }
-
-                       //Debug.WriteLine ("otd:" + gobjsToRedraw.Count.ToString () + "-");
-                       //final redraw clips should be added only when layout is completed among parents,
-                       //that's why it take place in a second pass
-                       GraphicObject[] gotr = new GraphicObject[gobjsToRedraw.Count];
-                       gobjsToRedraw.CopyTo (gotr);
-                       gobjsToRedraw.Clear ();
-                       foreach (GraphicObject p in gotr) {
-                               p.registerClipRect ();
-                       }
-
-
-                       lock (redrawClip) {
-                               if (redrawClip.count > 0) {                                     
-                                       //                                      #if DEBUG_CLIP_RECTANGLE
-                                       //                                      redrawClip.stroke (ctx, new Color(1.0,0,0,0.3));
-                                       //                                      #endif
-                                       redrawClip.clearAndClip (ctx);//rajouté après, tester si utile        
-
-                                       //Link.draw (ctx);
-                                       foreach (GraphicObject p in invGOList) {
-                                               if (p.Visible) {
-                                                       drawingTime.Start ();
-
-                                                       ctx.Save ();
-                                                       if (redrawClip.count > 0) {
-                                                               Rectangles clip = redrawClip.intersectingRects (p.Slot);
-
-                                                               if (clip.count > 0)
-                                                                       p.Paint (ref ctx, clip);
-                                                       }
-                                                       ctx.Restore ();
-
-                                                       drawingTime.Stop ();
-                                               }
-                                       }
-                                       ctx.ResetClip ();
-                                       dirtyZone = redrawClip.Bounds;
-                                       //                                      #if DEBUG_CLIP_RECTANGLE
-                                       //                                      redrawClip.stroke (ctx, Color.Red.AdjustAlpha(0.1));
-                                       //                                      #endif
-                                       redrawClip.Reset ();
-                               }
-                       }
-                       //surf.WriteToPng (@"/mnt/data/test.png");
-
-                       //                      if (ToolTip.isVisible) {
-                       //                              ToolTip.panel.processkLayouting();
-                       //                              if (ToolTip.panel.layoutIsValid)
-                       //                                      ToolTip.panel.Paint(ref ctx);
-                       //                      }
-                       //                      Debug.WriteLine("INTERFACE: layouting: {0} ticks \t graphical update {1} ticks \t drawing {2} ticks",
-                       //                          layoutTime.ElapsedTicks,
-                       //                          guTime.ElapsedTicks,
-                       //                          drawingTime.ElapsedTicks);
-                       //                      Debug.WriteLine("INTERFACE: layouting: {0} ms \t graphical update {1} ms \t drawing {2} ms",
-                       //                          layoutTime.ElapsedMilliseconds,
-                       //                          guTime.ElapsedMilliseconds,
-                       //                          drawingTime.ElapsedMilliseconds);
-                       updateTime.Stop ();
-                       //                      Debug.WriteLine("UPDATE: {0} ticks \t, {1} ms",
-                       //                              updateTime.ElapsedTicks,
-                       //                              updateTime.ElapsedMilliseconds);
-               }                                               
-               #endregion
-                                       
-
-//             public void LoadInterface<T>(string path, out T result)
-//             {
-//                     GraphicObject.Load<T> (path, out result, this);
-//                     AddWidget (result as GraphicObject);
-//             }
-//             public T LoadInterface<T> (string Path)
-//             {
-//                     T result;
-//                     GraphicObject.Load<T> (Path, out result, this);
-//                     AddWidget (result as GraphicObject);
-//                     return result;
-//             }
-
-
-
-               public void PutOnTop(GraphicObject g)
-               {
-                       if (GraphicObjects.IndexOf(g) > 0)
-                       {
-                               GraphicObjects.Remove(g);
-                               GraphicObjects.Insert(0, g);
-                       }
-               }
-
-               #region Mouse Handling
-               void Mouse_Move(object sender, MouseMoveEventArgs e)
-               {
-//                     if (_activeWidget != null) {
-//                             //send move evt even if mouse move outside bounds
-//                             _activeWidget.onMouseMove (_activeWidget, e);
-//                             return;
-//                     }
-
-                       if (_hoverWidget != null) {
-                               //check topmost graphicobject first
-                               GraphicObject tmp = _hoverWidget;
-                               GraphicObject topc = null;
-                               while (tmp is GraphicObject) {
-                                       topc = tmp;
-                                       tmp = tmp.Parent as GraphicObject;
-                               }
-                               int idxhw = GraphicObjects.IndexOf (topc);
-                               if (idxhw != 0) {
-                                       int i = 0;
-                                       while (i < idxhw) {
-                                               if (GraphicObjects [i].MouseIsIn (e.Position)) {
-                                                       _hoverWidget.onMouseLeave (this, e);
-                                                       GraphicObjects [i].checkHoverWidget (e);
-                                                       return;
-                                               }
-                                               i++;
-                                       }
-                               }
-
-
-                               if (_hoverWidget.MouseIsIn (e.Position)) {
-                                       _hoverWidget.checkHoverWidget (e);
-                                       return;
-                               } else {
-                                       _hoverWidget.onMouseLeave (this, e);
-                                       //seek upward from last focused graph obj's
-                                       while (_hoverWidget.Parent as GraphicObject!=null) {
-                                               _hoverWidget = _hoverWidget.Parent as GraphicObject;
-                                               if (_hoverWidget.MouseIsIn (e.Position)) {
-                                                       _hoverWidget.checkHoverWidget (e);
-                                                       return;
-                                               } else
-                                                       _hoverWidget.onMouseLeave (this, e);
-                                       }
-                               }
-                       }
-
-                       //top level graphic obj's parsing
-                       for (int i = 0; i < GraphicObjects.Count; i++) {
-                               GraphicObject g = GraphicObjects[i];
-                               if (g.MouseIsIn (e.Position)) {
-                                       g.checkHoverWidget (e);
-                                       PutOnTop (g);
-                                       return;
-                               }
-                       }
-                       _hoverWidget = null;
-                       MouseMove.Raise (this, e);
-               }
-               void Mouse_ButtonUp(object sender, MouseButtonEventArgs e)
-               {
-//                     if (_activeWidget == null)
-//                             return;
-
-                       //_activeWidget.onMouseButtonUp (this, e);
-                       //_activeWidget = null;
-                       MouseButtonUp.Raise (this, e);
-               }
-               void Mouse_ButtonDown(object sender, MouseButtonEventArgs e)
-               {
-                       if (_hoverWidget == null) {
-                               MouseButtonDown.Raise (this, e);
-                               return;
-                       }
-                               
-                       _activeWidget = _hoverWidget;
-                       //_activeWidget.onMouseButtonDown (this, e);
-               }
-
-               void Mouse_WheelChanged(object sender, MouseWheelEventArgs e)
-               {
-                       if (_hoverWidget == null) {
-                               MouseWheelChanged.Raise (this, e);
-                               return;
-                       }
-                       _hoverWidget.onMouseWheel (this, e);
-               }        
-               #endregion
-
-               #region keyboard Handling
-               void Keyboard_KeyDown(object sender, KeyboardKeyEventArgs e)
-               {
-                       if (_focusedWidget == null)
-                               return;
-                       _focusedWidget.onKeyDown (sender, e);
-               }
-               #endregion
-
-               public void Quit ()
-               {
-                       throw new NotImplementedException ();
-               }
-               
-
-               #region ILayoutable implementation
-
-               public Rectangle ContextCoordinates (Rectangle r)
-               {
-                       return r;
-               }
-               public Rectangle ScreenCoordinates (Rectangle r)
-               {
-                       return r;
-               }
-
-               public ILayoutable Parent {
-                       get {
-                               return null;
-                       }
-                       set {
-                               throw new NotImplementedException ();
-                       }
-               }
-
-               public bool SizeIsValid {
-                       get { return true; }
-                       set { throw new NotImplementedException ();     }
-               }
-
-               public void EnqueueForLayouting (int layoutType)
-               {
-                       throw new NotImplementedException ();
-               }
-
-
-               public void UpdateLayout (LayoutingType layoutType)
-               {
-                       throw new NotImplementedException ();
-               }
-
-               public bool PositionIsValid {
-                       get {
-                               return true;
-                       }
-                       set {
-                               throw new NotImplementedException ();
-                       }
-               }
-               public bool LayoutIsValid {
-                       get {
-                               return true;//tester tout les enfants a mon avis
-                       }
-                       set {
-                               throw new NotImplementedException ();
-                       }
-               }
-               Size lastSize;
-               public Rectangle ClientRectangle {
-                       get {   
-                               Crow.Size newSize = new Crow.Size (Allocation.Width, Allocation.Height);
-                               return newSize;
-                       }
-               }
-
-               public IGOLibHost HostContainer {
-                       get { return this as IGOLibHost; }
-               }
-
-               public Rectangle getSlot ()
-               {
-                       return ClientRectangle;
-               }
-               public Rectangle getBounds ()//redundant but fill ILayoutable implementation
-               {
-                       return ClientRectangle;
-               }
-
-               public bool WIsValid {
-                       get {
-                               return true;
-                       }
-                       set {
-                               throw new NotImplementedException ();
-                       }
-               }
-               public bool HIsValid {
-                       get {
-                               return true;
-                       }
-                       set {
-                               throw new NotImplementedException ();
-                       }
-               }
-               public bool XIsValid {
-                       get {
-                               return true;
-                       }
-                       set {
-                               throw new NotImplementedException ();
-                       }
-               }
-               public bool YIsValid {
-                       get {
-                               return true;
-                       }
-                       set {
-                               throw new NotImplementedException ();
-                       }
-               }
-
-               public virtual void InvalidateLayout ()
-               {
-                       //                      foreach (GraphicObject g in GraphicObjects) {
-                       //                              g.InvalidateLayout ();
-                       //                      }
-               }
-
-               #endregion
-       }
-}
-
diff --git a/MonoDevelop.GOLib/src/GOLibNodeExtension.cs b/MonoDevelop.GOLib/src/GOLibNodeExtension.cs
deleted file mode 100644 (file)
index 8c68d4c..0000000
+++ /dev/null
@@ -1,135 +0,0 @@
-// 
-// ImageViewerNodeExtension.cs
-//  
-// Author:
-//       Mike Krüger <mkrueger@novell.com>
-// 
-// Copyright (c) 2010 Novell, Inc (http://www.novell.com)
-// 
-// 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.
-
-using System;
-using MonoDevelop.Projects;
-using MonoDevelop.Ide.Gui.Components;
-using MonoDevelop.Components;
-using MonoDevelop.Components.Commands;
-using MonoDevelop.Ide;
-using System.Linq;
-using MonoDevelop.DesignerSupport;
-
-namespace MonoDevelop.GOLib
-{
-       enum Commands {
-               ShowGOLibViewer
-       }
-       
-       class GOLibNodeExtension : NodeBuilderExtension
-       {               
-               public override Type CommandHandlerType {
-                       get { return typeof(GOLibCommandHandler); }
-               }
-               public override bool CanBuildNode (Type dataType)
-               {                       
-                       return typeof(ProjectFile).IsAssignableFrom (dataType);
-               }
-               public override void BuildNode (ITreeBuilder treeBuilder, object dataObject, NodeInfo nodeInfo)
-               {
-                       ProjectFile pf  = dataObject as ProjectFile;
-
-//                     string mimeType = DesktopService.GetMimeTypeForUri (pf.FilePath);
-//                     if (mimeType.StartsWith ("image/", StringComparison.CurrentCultureIgnoreCase)) {
-//                             Image i;
-//                             if (pf != null) {                               
-//                                     i = Image.FromFile (pf.FilePath);
-//                                     nodeInfo.Icon = i.Scale (16.0 / i.Width, 16.0 / i.Height);
-//                             }
-//                     }
-
-                       base.BuildNode (treeBuilder, dataObject, nodeInfo);
-               } 
-       }
-       
-       class GOLibCommandHandler: NodeCommandHandler //, IPropertyPadProvider
-       {
-               [CommandHandler (Commands.ShowGOLibViewer)]
-               protected void OnShowGOLibViewer () 
-               {
-
-                       GOLibView view = new GOLibView ();
-
-                       ProjectFile file   = CurrentNode.DataItem as ProjectFile;
-
-                       if (file != null)
-                               view.Load (file.FilePath);
-                       
-                       
-                       IdeApp.Workbench.OpenDocument (view, true);
-                       //IdeApp.Workbench.Documents.Where (d => d.FileName == file.FilePath);
-               }
-
-//             public override void ActivateItem ()
-//             {
-//                     ProjectFile o = this.CurrentNode.DataItem as ProjectFile;
-//
-//                     Ide.Gui.Document[] doc = IdeApp.Workbench.Documents.Where (d => d.FileName == o.FilePath).ToArray();
-//                     var tmp = MonoDevelop.Ide.Gui.DisplayBindingService.GetFileViewers (o.FilePath, o.Project).ToList();
-//
-//                     OnShowGOLibViewer ();
-//             }
-
-//             #region IPropertyPadProvider implementation
-//             public object GetActiveComponent ()
-//             {
-//                     if (CurrentNodes.Length == 1)
-//                             return CurrentNode.DataItem;
-//                     else
-//                             return null;
-//             }
-//             public object GetProvider ()
-//             {
-//                     return null;
-//             }
-//             public void OnEndEditing (object obj)
-//             {
-//                     throw new NotImplementedException ();
-//             }
-//             public void OnChanged (object obj)
-//             {
-//                     
-//             }
-//             #endregion
-       }
-
-//     class GOLibItemPropertyProvider : IPropertyProvider
-//     {
-//             #region IPropertyProvider implementation
-//             public object CreateProvider (object obj)
-//             {
-//                     var projectFile = obj as ProjectFile;
-//                     return projectFile;
-//             }
-//
-//             public bool SupportsObject (object obj)
-//             {
-//                     return obj is ProjectFile;
-//             }
-//             #endregion
-//     }
-}
-
diff --git a/MonoDevelop.GOLib/src/GOLibView.cs b/MonoDevelop.GOLib/src/GOLibView.cs
deleted file mode 100644 (file)
index 52dbf2c..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-//
-//  ImageViewer.cs
-//
-//  Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-//  Copyright (c) 2015 jp
-//
-//  This program is free software: you can redistribute it and/or modify
-//  it under the terms of the GNU Lesser General Public License as published by
-//  the Free Software Foundation, either version 3 of the License, or
-//  (at your option) any later version.
-//
-//  This program is distributed in the hope that it will be useful,
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//  GNU Lesser General Public License for more details.
-//
-//  You should have received a copy of the GNU Lesser General Public License
-//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-// 
-// HexEditorView.cs
-//  
-// Author:
-//       Mike Krüger <mkrueger@novell.com>
-// 
-// Copyright (c) 2009 Novell, Inc (http://www.novell.com)
-// 
-// 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.
-
-using System;
-using System.IO;
-using MonoDevelop.Ide.Gui;
-using MonoDevelop.Ide.Gui.Content;
-using MonoDevelop.Ide.Fonts;
-using Mono.Addins;
-using MonoDevelop.Core;
-using MonoDevelop.Ide;
-using Crow;
-using MonoDevelop.DesignerSupport;
-using MonoDevelop.SourceEditor;
-
-namespace MonoDevelop.GOLib
-{
-       class CustomVPaned : Gtk.VPaned, IPropertyPadProvider
-       {
-               #region IPropertyPadProvider implementation
-               public object GetActiveComponent ()
-               {
-                       return this.Child1 == null ? this as object: (this.Child1 as GOLibGtkHost).activeWidget as object;
-               }
-               public object GetProvider ()
-               {
-                       return null;
-                       //throw new NotImplementedException ();
-               }
-               public void OnEndEditing (object obj)
-               {
-                       //throw new NotImplementedException ();
-               }
-               public void OnChanged (object obj)
-               {
-                       //throw new NotImplementedException ();
-               }
-               #endregion
-               
-       }
-       class GOLibView : SourceEditorView
-       {
-               GOLibGtkHost gtkGoWidgetHost;
-               CustomVPaned gtkGOMLWidget;
-
-
-               double zoom = 1.0;
-               
-               public override Gtk.Widget Control {
-                       get {
-                               return gtkGOMLWidget;
-                       }
-               }
-
-               public GOLibView () : base()
-               {                       
-                       gtkGoWidgetHost = new GOLibGtkHost ();
-                       gtkGOMLWidget = new CustomVPaned ();
-                       gtkGOMLWidget.CanFocus = true;
-                       gtkGOMLWidget.Name = "vpaned1";
-                       gtkGOMLWidget.Add (gtkGoWidgetHost);
-                       gtkGOMLWidget.Add (base.Control);
-                       gtkGOMLWidget.SizeAllocated += GtkGOMLWidget_SizeAllocated;
-
-                       this.Document.DocumentUpdated += Document_DocumentUpdated;
-                       //this.DirtyChanged += GOLibView_DirtyChanged;
-               }
-
-               void Document_DocumentUpdated (object sender, EventArgs e)
-               {
-                       reloadGOML ();
-               }
-
-               void GOLibView_DirtyChanged (object sender, EventArgs e)
-               {
-
-               }
-
-               void reloadGOML()
-               {
-                       using (MemoryStream stream = new MemoryStream ()) {
-                               using (StreamWriter writer = new StreamWriter (stream)) {
-                                       writer.Write (this.Document.Text);
-                                       writer.Flush ();
-
-                                       stream.Position = 0;
-                                       gtkGoWidgetHost.Load (stream);
-                               }
-                       }                       
-               }
-                       
-               void GtkGOMLWidget_SizeAllocated (object o, Gtk.SizeAllocatedArgs args)
-               {
-                       gtkGoWidgetHost.SetSizeRequest (-1, args.Allocation.Height / 2);
-               }
-
-               public override void Load (string fileName)
-               {                                                       
-                       gtkGoWidgetHost.Load (fileName);
-                       //ContentName = fileName;
-                       //this.IsDirty = false;
-                       gtkGOMLWidget.ShowAll ();
-                       gtkGOMLWidget.Show ();
-
-                       base.Load (fileName);
-               }
-//             public override bool CanReuseView (string fileName)
-//             {
-//                     return base.CanReuseView (fileName);
-//             }
-//             public override void RedrawContent ()
-//             {
-//                     base.RedrawContent ();
-//             }
-
-       }
-}
diff --git a/SDL2Crow/LPUtf8StrMarshaler.cs b/SDL2Crow/LPUtf8StrMarshaler.cs
deleted file mode 100644 (file)
index 385c11f..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-/* SDL2# - C# Wrapper for SDL2
- *
- * Copyright (c) 2013-2016 Ethan Lee.
- *
- * 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.
- *
- * Ethan "flibitijibibo" Lee <flibitijibibo@flibitijibibo.com>
- *
- */
-
-using System;
-using System.Text;
-using System.Runtime.InteropServices;
-
-namespace SDL2
-{
-       internal unsafe class LPUtf8StrMarshaler : ICustomMarshaler
-       {
-               public const string LeaveAllocated = "LeaveAllocated";
-
-               private static ICustomMarshaler
-                       _leaveAllocatedInstance = new LPUtf8StrMarshaler(true),
-                       _defaultInstance = new LPUtf8StrMarshaler(false);
-
-               public static ICustomMarshaler GetInstance(string cookie)
-               {
-                       switch (cookie)
-                       {
-                       case "LeaveAllocated":
-                               return _leaveAllocatedInstance;
-                       default:
-                               return _defaultInstance;
-                       }
-               }
-
-               private bool _leaveAllocated;
-
-               public LPUtf8StrMarshaler(bool leaveAllocated)
-               {
-                       _leaveAllocated = leaveAllocated;
-               }
-
-               public object MarshalNativeToManaged(IntPtr pNativeData)
-               {
-                       if (pNativeData == IntPtr.Zero)
-                               return null;
-                       var ptr = (byte*)pNativeData;
-                       while (*ptr != 0)
-                       {
-                               ptr++;
-                       }
-                       var bytes = new byte[ptr - (byte*)pNativeData];
-                       Marshal.Copy(pNativeData, bytes, 0, bytes.Length);
-                       return Encoding.UTF8.GetString(bytes);
-               }
-
-               public IntPtr MarshalManagedToNative(object ManagedObj)
-               {
-                       if (ManagedObj == null)
-                               return IntPtr.Zero;
-                       var str = ManagedObj as string;
-                       if (str == null)
-                       {
-                               throw new ArgumentException("ManagedObj must be a string.", "ManagedObj");
-                       }
-                       var bytes = Encoding.UTF8.GetBytes(str);
-                       var mem = SDL.SDL_malloc((IntPtr) (bytes.Length + 1));
-                       Marshal.Copy(bytes, 0, mem, bytes.Length);
-                       ((byte*)mem)[bytes.Length] = 0;
-                       return mem;
-               }
-
-               public void CleanUpManagedData(object ManagedObj)
-               {
-               }
-
-               public void CleanUpNativeData(IntPtr pNativeData)
-               {
-                       if (!_leaveAllocated)
-                       {
-                               SDL.SDL_free(pNativeData);
-                       }
-               }
-
-               public int GetNativeDataSize ()
-               {
-                       return -1;
-               }
-       }
-}
diff --git a/SDL2Crow/SDL2.cs b/SDL2Crow/SDL2.cs
deleted file mode 100644 (file)
index f9a64fb..0000000
+++ /dev/null
@@ -1,6058 +0,0 @@
-#region License
-/* SDL2# - C# Wrapper for SDL2
- *
- * Copyright (c) 2013-2016 Ethan Lee.
- *
- * 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.
- *
- * Ethan "flibitijibibo" Lee <flibitijibibo@flibitijibibo.com>
- *
- */
-#endregion
-
-using System;
-using System.Runtime.InteropServices;
-
-namespace SDL2
-{
-public static class SDL
-       {
-               #region SDL2# Variables
-               /// <summary>
-               /// Used by DllImport to load the native library.
-               /// </summary>
-               private const string nativeLibName = "SDL2.dll";
-
-               #endregion
-
-               #region SDL_stdinc.h
-
-               public static uint SDL_FOURCC(byte A, byte B, byte C, byte D)
-               {
-                       return (uint) (A | (B << 8) | (C << 16) | (D << 24));
-               }
-
-               public enum SDL_bool
-               {
-                       SDL_FALSE = 0,
-                       SDL_TRUE = 1
-               }
-
-               /* malloc/free are used by the marshaler! -flibit */
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               internal static extern IntPtr SDL_malloc(IntPtr size);
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               internal static extern void SDL_free(IntPtr memblock);
-
-               #endregion
-
-               #region SDL_rwops.h
-
-               /* Note about SDL2# and Internal RWops:
-                * These functions are currently not supported for public use.
-                * They are only meant to be used internally in functions marked with
-                * the phrase "THIS IS AN RWops FUNCTION!"
-                */
-
-               /// <summary>
-               /// Use this function to create a new SDL_RWops structure for reading from and/or writing to a named file.
-               /// </summary>
-               /// <param name="file">a UTF-8 string representing the filename to open</param>
-               /// <param name="mode">an ASCII string representing the mode to be used for opening the file; see Remarks for details</param>
-               /// <returns>Returns a pointer to the SDL_RWops structure that is created, or NULL on failure; call SDL_GetError() for more information.</returns>
-               [DllImport(nativeLibName, EntryPoint = "SDL_RWFromFile", CallingConvention = CallingConvention.Cdecl)]
-               internal static extern IntPtr INTERNAL_SDL_RWFromFile(
-                       [In()] [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler))]
-                               string file,
-                       [In()] [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler))]
-                               string mode
-               );
-
-               /* These are the public RWops functions. They should be used by
-                * functions marked with the phrase "THIS IS A PUBLIC RWops FUNCTION!"
-                */
-
-               /* IntPtr refers to an SDL_RWops */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern IntPtr SDL_RWFromMem(byte[] mem, int size);
-
-               #endregion
-
-               #region SDL_main.h
-
-               /// <summary>
-               /// Use this function to circumvent failure of SDL_Init() when not using SDL_main() as an entry point.
-               /// </summary>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_SetMainReady();
-
-               #endregion
-
-               #region SDL.h
-
-               public const uint SDL_INIT_TIMER =              0x00000001;
-               public const uint SDL_INIT_AUDIO =              0x00000010;
-               public const uint SDL_INIT_VIDEO =              0x00000020;
-               public const uint SDL_INIT_JOYSTICK =           0x00000200;
-               public const uint SDL_INIT_HAPTIC =             0x00001000;
-               public const uint SDL_INIT_GAMECONTROLLER =     0x00002000;
-               public const uint SDL_INIT_NOPARACHUTE =        0x00100000;
-               public const uint SDL_INIT_EVERYTHING = (
-                       SDL_INIT_TIMER | SDL_INIT_AUDIO | SDL_INIT_VIDEO |
-                       SDL_INIT_JOYSTICK | SDL_INIT_HAPTIC |
-                       SDL_INIT_GAMECONTROLLER
-               );
-
-               /// <summary>
-               /// Use this function to initialize the SDL library.
-               /// This must be called before using any other SDL function.
-               /// </summary>
-               /// <param name="flags">subsystem initialization flags; see Remarks for details</param>
-               /// <returns>Returns 0 on success or a negative error code on failure.
-               /// Call <see cref="SDL_GetError()"/> for more information.</returns>
-               /// <remarks>The Event Handling, File I/O, and Threading subsystems are initialized by default.
-               /// You must specifically initialize other subsystems if you use them in your application.</remarks>
-               /// <remarks>Unless the SDL_INIT_NOPARACHUTE flag is set, it will install cleanup signal handlers
-               /// for some commonly ignored fatal signals (like SIGSEGV). </remarks>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_Init(uint flags);
-
-               /// <summary>
-               /// Use this function to initialize specific SDL subsystems.
-               /// </summary>
-               /// <param name="flags">any of the flags used by SDL_Init(); see Remarks for details</param>
-               /// <returns>Returns 0 on success or a negative error code on failure.
-               /// Call <see cref="SDL_GetError()"/> for more information.</returns>
-               /// <remarks>After SDL has been initialized with <see cref="SDL_Init()"/> you may initialize
-               /// uninitialized subsystems with <see cref="SDL_InitSubSystem()"/>.</remarks>
-               /// <remarks>If you want to initialize subsystems separately you would call <see cref="SDL_Init(0)"/>
-               /// followed by <see cref="SDL_InitSubSystem()"/> with the desired subsystem flag. </remarks>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_InitSubSystem(uint flags);
-
-               /// <summary>
-               /// Use this function to clean up all initialized subsystems.
-               /// You should call it upon all exit conditions.
-               /// </summary>
-               /// <remarks>You should call this function even if you have already shutdown each initialized
-               /// subsystem with <see cref="SDL_QuitSubSystem()"/>.</remarks>
-               /// <remarks>If you start a subsystem using a call to that subsystem's init function (for example
-               /// <see cref="SDL_VideoInit()"/>) instead of <see cref="SDL_Init()"/> or <see cref="SDL_InitSubSystem()"/>,
-               /// then you must use that subsystem's quit function (<see cref="SDL_VideoQuit()"/>) to shut it down
-               /// before calling <see cref="SDL_Quit()"/>.</remarks>
-               /// <remarks>You can use this function with atexit() to ensure that it is run when your application is
-               /// shutdown, but it is not wise to do this from a library or other dynamically loaded code. </remarks>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_Quit();
-
-               /// <summary>
-               /// Use this function to shut down specific SDL subsystems.
-               /// </summary>
-               /// <param name="flags">any of the flags used by <see cref="SDL_Init()"/>; see Remarks for details</param>
-               /// <remarks>If you start a subsystem using a call to that subsystem's init function (for example
-               /// <see cref="SDL_VideoInit()"/>) instead of <see cref="SDL_Init()"/> or <see cref="SDL_InitSubSystem()"/>,
-               /// then you must use that subsystem's quit function (<see cref="SDL_VideoQuit()"/>) to shut it down
-               /// before calling <see cref="SDL_Quit()"/>.</remarks>
-               /// <remarks>You can use this function with atexit() to en
-               /// <remarks>You still need to call <see cref="SDL_Quit()"/> even if you close all open subsystems with SDL_QuitSubSystem(). </remarks>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_QuitSubSystem(uint flags);
-
-               /// <summary>
-               /// Use this function to return a mask of the specified subsystems which have previously been initialized.
-               /// </summary>
-               /// <param name="flags">any of the flags used by <see cref="SDL_Init()"/>; see Remarks for details</param>
-               /// <returns>If flags is 0 it returns a mask of all initialized subsystems, otherwise it returns the
-               /// initialization status of the specified subsystems. The return value does not include SDL_INIT_NOPARACHUTE.</returns>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern uint SDL_WasInit(uint flags);
-
-               #endregion
-
-               #region SDL_platform.h
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               [return : MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler), MarshalCookie = LPUtf8StrMarshaler.LeaveAllocated)]
-               public static extern string SDL_GetPlatform();
-
-               #endregion
-
-               #region SDL_hints.h
-
-               public const string SDL_HINT_FRAMEBUFFER_ACCELERATION =
-                       "SDL_FRAMEBUFFER_ACCELERATION";
-               public const string SDL_HINT_RENDER_DRIVER =
-                       "SDL_RENDER_DRIVER";
-               public const string SDL_HINT_RENDER_OPENGL_SHADERS =
-                       "SDL_RENDER_OPENGL_SHADERS";
-               public const string SDL_HINT_RENDER_DIRECT3D_THREADSAFE =
-                       "SDL_RENDER_DIRECT3D_THREADSAFE";
-               public const string SDL_HINT_RENDER_VSYNC =
-                       "SDL_RENDER_VSYNC";
-               public const string SDL_HINT_VIDEO_X11_XVIDMODE =
-                       "SDL_VIDEO_X11_XVIDMODE";
-               public const string SDL_HINT_VIDEO_X11_XINERAMA =
-                       "SDL_VIDEO_X11_XINERAMA";
-               public const string SDL_HINT_VIDEO_X11_XRANDR =
-                       "SDL_VIDEO_X11_XRANDR";
-               public const string SDL_HINT_GRAB_KEYBOARD =
-                       "SDL_GRAB_KEYBOARD";
-               public const string SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS =
-                       "SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS";
-               public const string SDL_HINT_IDLE_TIMER_DISABLED =
-                       "SDL_IOS_IDLE_TIMER_DISABLED";
-               public const string SDL_HINT_ORIENTATIONS =
-                       "SDL_IOS_ORIENTATIONS";
-               public const string SDL_HINT_XINPUT_ENABLED =
-                       "SDL_XINPUT_ENABLED";
-               public const string SDL_HINT_GAMECONTROLLERCONFIG =
-                       "SDL_GAMECONTROLLERCONFIG";
-               public const string SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS =
-                       "SDL_JOYSTICK_ALLOW_BACKGROUND_EVENTS";
-               public const string SDL_HINT_ALLOW_TOPMOST =
-                       "SDL_ALLOW_TOPMOST";
-               public const string SDL_HINT_TIMER_RESOLUTION =
-                       "SDL_TIMER_RESOLUTION";
-               public const string SDL_HINT_RENDER_SCALE_QUALITY =
-                       "SDL_RENDER_SCALE_QUALITY";
-
-               /* Only available in SDL 2.0.1 or higher */
-               public const string SDL_HINT_VIDEO_HIGHDPI_DISABLED =
-                       "SDL_VIDEO_HIGHDPI_DISABLED";
-
-               /* Only available in SDL 2.0.2 or higher */
-               public const string SDL_HINT_CTRL_CLICK_EMULATE_RIGHT_CLICK =
-                       "SDL_CTRL_CLICK_EMULATE_RIGHT_CLICK";
-               public const string SDL_HINT_VIDEO_WIN_D3DCOMPILER =
-                       "SDL_VIDEO_WIN_D3DCOMPILER";
-               public const string SDL_HINT_MOUSE_RELATIVE_MODE_WARP =
-                       "SDL_MOUSE_RELATIVE_MODE_WARP";
-               public const string SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT =
-                       "SDL_VIDEO_WINDOW_SHARE_PIXEL_FORMAT";
-               public const string SDL_HINT_VIDEO_ALLOW_SCREENSAVER =
-                       "SDL_VIDEO_ALLOW_SCREENSAVER";
-               public const string SDL_HINT_ACCELEROMETER_AS_JOYSTICK =
-                       "SDL_ACCELEROMETER_AS_JOYSTICK";
-               public const string SDL_HINT_VIDEO_MAC_FULLSCREEN_SPACES =
-                       "SDL_VIDEO_MAC_FULLSCREEN_SPACES";
-
-               /* Only available in SDL 2.0.4 or higher */
-               public const string SDL_HINT_NO_SIGNAL_HANDLERS =
-                       "SDL_NO_SIGNAL_HANDLERS";
-               public const string SDL_HINT_IME_INTERNAL_EDITING =
-                       "SDL_IME_INTERNAL_EDITING";
-               public const string SDL_HINT_ANDROID_SEPARATE_MOUSE_AND_TOUCH =
-                       "SDL_ANDROID_SEPARATE_MOUSE_AND_TOUCH";
-               public const string SDL_HINT_EMSCRIPTEN_KEYBOARD_ELEMENT =
-                       "SDL_EMSCRIPTEN_KEYBOARD_ELEMENT";
-               public const string SDL_HINT_THREAD_STACK_SIZE =
-                       "SDL_THREAD_STACK_SIZE";
-               public const string SDL_HINT_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN =
-                       "SDL_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN";
-               public const string SDL_HINT_WINDOWS_ENABLE_MESSAGELOOP =
-                       "SDL_WINDOWS_ENABLE_MESSAGELOOP";
-               public const string SDL_HINT_WINDOWS_NO_CLOSE_ON_ALT_F4 =
-                       "SDL_WINDOWS_NO_CLOSE_ON_ALT_F4";
-               public const string SDL_HINT_XINPUT_USE_OLD_JOYSTICK_MAPPING =
-                       "SDL_XINPUT_USE_OLD_JOYSTICK_MAPPING";
-               public const string SDL_HINT_MAC_BACKGROUND_APP =
-                       "SDL_MAC_BACKGROUND_APP";
-               public const string SDL_HINT_VIDEO_X11_NET_WM_PING =
-                       "SDL_VIDEO_X11_NET_WM_PING";
-               public const string SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION =
-                       "SDL_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION";
-               public const string SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION =
-                       "SDL_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION";
-
-               public enum SDL_HintPriority
-               {
-                       SDL_HINT_DEFAULT,
-                       SDL_HINT_NORMAL,
-                       SDL_HINT_OVERRIDE
-               }
-
-               /// <summary>
-               /// Use this function to clear all hints.
-               /// </summary>
-               /// <remarks>This function is automatically called during <see cref="SDL_Quit()"/>. </remarks>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_ClearHints();
-
-               /// <summary>
-               /// Use this function to get the value of a hint.
-               /// </summary>
-               /// <param name="name">the hint to query; see the list of hints on
-               /// <a href="http://wiki.libsdl.org/moin.cgi/CategoryHints#Hints">CategoryHints</a> for details</param>
-               /// <returns>Returns the string value of a hint or NULL if the hint isn't set.</returns>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               [return : MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler), MarshalCookie = LPUtf8StrMarshaler.LeaveAllocated)]
-               public static extern string SDL_GetHint(
-                       [In()] [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler))]
-                               string name
-               );
-
-               /// <summary>
-               /// Use this function to set a hint with normal priority.
-               /// </summary>
-               /// <param name="name">the hint to query; see the list of hints on
-               /// <a href="http://wiki.libsdl.org/moin.cgi/CategoryHints#Hints">CategoryHints</a> for details</param>
-               /// <param name="value">the value of the hint variable</param>
-               /// <returns>Returns SDL_TRUE if the hint was set, SDL_FALSE otherwise.</returns>
-               /// <remarks>Hints will not be set if there is an existing override hint or environment
-               /// variable that takes precedence. You can use <see cref="SDL_SetHintWithPriority()"/> to set the hint with
-               /// override priority instead.</remarks>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern SDL_bool SDL_SetHint(
-                       [In()] [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler))]
-                               string name,
-                       [In()] [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler))]
-                               string value
-               );
-
-               /// <summary>
-               /// Use this function to set a hint with a specific priority.
-               /// </summary>
-               /// <param name="name">the hint to query; see the list of hints on
-               /// <a href="http://wiki.libsdl.org/moin.cgi/CategoryHints#Hints">CategoryHints</a> for details</param>
-               /// <param name="value">the value of the hint variable</param>
-               /// <param name="priority">the <see cref="SDL_HintPriority"/> level for the hint</param>
-               /// <returns>Returns SDL_TRUE if the hint was set, SDL_FALSE otherwise.</returns>
-               /// <remarks>The priority controls the behavior when setting a hint that already has a value.
-               /// Hints will replace existing hints of their priority and lower. Environment variables are
-               /// considered to have override priority. </remarks>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern SDL_bool SDL_SetHintWithPriority(
-                       [In()] [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler))]
-                               string name,
-                       [In()] [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler))]
-                               string value,
-                       SDL_HintPriority priority
-               );
-
-               #endregion
-
-               #region SDL_error.h
-
-               /// <summary>
-               /// Use this function to clear any previous error message.
-               /// </summary>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_ClearError();
-
-               /// <summary>
-               /// Use this function to retrieve a message about the last error that occurred.
-               /// </summary>
-               /// <returns>Returns a message with information about the specific error that occurred,
-               /// or an empty string if there hasn't been an error since the last call to <see cref="SDL_ClearError()"/>.
-               /// Without calling <see cref="SDL_ClearError()"/>, the message is only applicable when an SDL function
-               /// has signaled an error. You must check the return values of SDL function calls to determine
-               /// when to appropriately call <see cref="SDL_GetError()"/>.
-               /// This string is statically allocated and must not be freed by the application.</returns>
-               /// <remarks>It is possible for multiple errors to occur before calling SDL_GetError(). Only the last error is returned. </remarks>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               [return : MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler), MarshalCookie = LPUtf8StrMarshaler.LeaveAllocated)]
-               public static extern string SDL_GetError();
-
-               /// <summary>
-               /// Use this function to set the SDL error string.
-               /// </summary>
-               /// <param name="fmt">a printf() style message format string </param>
-               /// <param name="...">additional parameters matching % tokens in the fmt string, if any</param>
-               /// <remarks>Calling this function will replace any previous error message that was set.</remarks>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_SetError(
-                       [In()] [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler))]
-                               string fmt,
-                       __arglist
-               );
-
-               #endregion
-
-               #region SDL_log.h
-
-               /* Begin nameless enum SDL_LOG_CATEGORY */
-               public const int SDL_LOG_CATEGORY_APPLICATION = 0;
-               public const int SDL_LOG_CATEGORY_ERROR = 1;
-               public const int SDL_LOG_CATEGORY_ASSERT = 2;
-               public const int SDL_LOG_CATEGORY_SYSTEM = 3;
-               public const int SDL_LOG_CATEGORY_AUDIO = 4;
-               public const int SDL_LOG_CATEGORY_VIDEO = 5;
-               public const int SDL_LOG_CATEGORY_RENDER = 6;
-               public const int SDL_LOG_CATEGORY_INPUT = 7;
-               public const int SDL_LOG_CATEGORY_TEST = 8;
-
-               /* Reserved for future SDL library use */
-               public const int SDL_LOG_CATEGORY_RESERVED1 = 9;
-               public const int SDL_LOG_CATEGORY_RESERVED2 = 10;
-               public const int SDL_LOG_CATEGORY_RESERVED3 = 11;
-               public const int SDL_LOG_CATEGORY_RESERVED4 = 12;
-               public const int SDL_LOG_CATEGORY_RESERVED5 = 13;
-               public const int SDL_LOG_CATEGORY_RESERVED6 = 14;
-               public const int SDL_LOG_CATEGORY_RESERVED7 = 15;
-               public const int SDL_LOG_CATEGORY_RESERVED8 = 16;
-               public const int SDL_LOG_CATEGORY_RESERVED9 = 17;
-               public const int SDL_LOG_CATEGORY_RESERVED10 = 18;
-
-               /* Beyond this point is reserved for application use, e.g.
-                       enum {
-                               LOG_CATEGORY_AWESOME1 = SDL_LOG_CATEGORY_CUSTOM,
-                               LOG_CATEGORY_AWESOME2,
-                               LOG_CATEGORY_AWESOME3,
-                               ...
-                       };
-               */
-               public const int SDL_LOG_CATEGORY_CUSTOM = 19;
-               /* End nameless enum SDL_LOG_CATEGORY */
-
-               /// <summary>
-               /// An enumeration of the predefined log priorities.
-               /// </summary>
-               public enum SDL_LogPriority
-               {
-                       SDL_LOG_PRIORITY_VERBOSE = 1,
-                       SDL_LOG_PRIORITY_DEBUG,
-                       SDL_LOG_PRIORITY_INFO,
-                       SDL_LOG_PRIORITY_WARN,
-                       SDL_LOG_PRIORITY_ERROR,
-                       SDL_LOG_PRIORITY_CRITICAL,
-                       SDL_NUM_LOG_PRIORITIES
-               }
-
-               /// <summary>
-               /// Used as a callback for <see cref="SDL_LogGetOutputFunction()"/> and <see cref="SDL_LogSetOutputFunction()"/>
-               /// </summary>
-               /// <param name="userdata">what was passed as userdata to <see cref="SDL_LogSetOutputFunction()"/></param>
-               /// <param name="category">the category of the message; see Remarks for details</param>
-               /// <param name="priority">the priority of the message; see Remarks for details</param>
-               /// <param name="message">the message being output</param>
-               /// <remarks>The category can be one of SDL_LOG_CATEGORY*</remarks>
-               /// <remarks>The priority can be one of SDL_LOG_PRIORITY*</remarks>
-               [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
-               public delegate void SDL_LogOutputFunction(
-                       IntPtr userdata, // void*
-                       int category,
-                       SDL_LogPriority priority,
-                       IntPtr message // const char*
-               );
-
-               /// <summary>
-               /// Use this function to log a message with SDL_LOG_CATEGORY_APPLICATION and SDL_LOG_PRIORITY_INFO.
-               /// </summary>
-               /// <param name="fmt">a printf() style message format string</param>
-               /// <param name="...">additional parameters matching % tokens in the fmt string, if any</param>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_Log(
-                       [In()] [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler))]
-                               string fmt,
-                       __arglist
-               );
-
-               /// <summary>
-               /// Use this function to log a message with SDL_LOG_PRIORITY_VERBOSE.
-               /// </summary>
-               /// <param name="category">the category of the message; see Remarks for details</param>
-               /// <param name="fmt">a printf() style message format string</param>
-               /// <param name="...">additional parameters matching % tokens in the fmt string, if any</param>
-               /// <remarks>The category can be one of SDL_LOG_CATEGORY*</remarks>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_LogVerbose(
-                       int category,
-                       [In()] [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler))]
-                               string fmt,
-                       __arglist
-               );
-
-               /// <summary>
-               /// Use this function to log a message with SDL_LOG_PRIORITY_DEBUG.
-               /// </summary>
-               /// <param name="category">the category of the message; see Remarks for details</param>
-               /// <param name="fmt">a printf() style message format string</param>
-               /// <param name="...">additional parameters matching % tokens in the fmt string, if any</param>
-               /// <remarks>The category can be one of SDL_LOG_CATEGORY*</remarks>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_LogDebug(
-                       int category,
-                       [In()] [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler))]
-                               string fmt,
-                       __arglist
-               );
-
-               /// <summary>
-               /// Use this function to log a message with SDL_LOG_PRIORITY_INFO.
-               /// </summary>
-               /// <param name="category">the category of the message; see Remarks for details</param>
-               /// <param name="fmt">a printf() style message format string</param>
-               /// <param name="...">additional parameters matching % tokens in the fmt string, if any</param>
-               /// <remarks>The category can be one of SDL_LOG_CATEGORY*</remarks>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_LogInfo(
-                       int category,
-                       [In()] [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler))]
-                               string fmt,
-                       __arglist
-               );
-
-               /// <summary>
-               /// Use this function to log a message with SDL_LOG_PRIORITY_WARN.
-               /// </summary>
-               /// <param name="category">the category of the message; see Remarks for details</param>
-               /// <param name="fmt">a printf() style message format string</param>
-               /// <param name="...">additional parameters matching % tokens in the fmt string, if any</param>
-               /// <remarks>The category can be one of SDL_LOG_CATEGORY*</remarks>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_LogWarn(
-                       int category,
-                       [In()] [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler))]
-                               string fmt,
-                       __arglist
-               );
-
-               /// <summary>
-               /// Use this function to log a message with SDL_LOG_PRIORITY_ERROR.
-               /// </summary>
-               /// <param name="category">the category of the message; see Remarks for details</param>
-               /// <param name="fmt">a printf() style message format string</param>
-               /// <param name="...">additional parameters matching % tokens in the fmt string, if any</param>
-               /// <remarks>The category can be one of SDL_LOG_CATEGORY*</remarks>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_LogError(
-                       int category,
-                       [In()] [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler))]
-                               string fmt,
-                       __arglist
-               );
-
-               /// <summary>
-               /// Use this function to log a message with SDL_LOG_PRIORITY_CRITICAL.
-               /// </summary>
-               /// <param name="category">the category of the message; see Remarks for details</param>
-               /// <param name="fmt">a printf() style message format string</param>
-               /// <param name="...">additional parameters matching % tokens in the fmt string, if any</param>
-               /// <remarks>The category can be one of SDL_LOG_CATEGORY*</remarks>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_LogCritical(
-                       int category,
-                       [In()] [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler))]
-                               string fmt,
-                       __arglist
-               );
-
-               /// <summary>
-               /// Use this function to log a message with the specified category and priority.
-               /// </summary>
-               /// <param name="category">the category of the message; see Remarks for details</param>
-               /// <param name="priority">the priority of the message; see Remarks for details</param>
-               /// <param name="fmt">a printf() style message format string</param>
-               /// <param name="...">additional parameters matching % tokens in the fmt string, if any</param>
-               /// <remarks>The category can be one of SDL_LOG_CATEGORY*</remarks>
-               /// <remarks>The priority can be one of SDL_LOG_PRIORITY*</remarks>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_LogMessage(
-                       int category,
-                       SDL_LogPriority priority,
-                       [In()] [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler))]
-                               string fmt,
-                       __arglist
-               );
-
-               /// <summary>
-               /// Use this function to log a message with the specified category and priority.
-               /// This version of <see cref="SDL_LogMessage"/> uses a stdarg variadic argument list.
-               /// </summary>
-               /// <param name="category">the category of the message; see Remarks for details</param>
-               /// <param name="priority">the priority of the message; see Remarks for details</param>
-               /// <param name="fmt">a printf() style message format string</param>
-               /// <param name="...">additional parameters matching % tokens in the fmt string, if any</param>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_LogMessageV(
-                       int category,
-                       SDL_LogPriority priority,
-                       [In()] [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler))]
-                               string fmt,
-                       __arglist
-               );
-
-               /// <summary>
-               /// Use this function to get the priority of a particular log category.
-               /// </summary>
-               /// <param name="category">the category to query; see Remarks for details</param>
-               /// <returns>Returns the <see cref="SDL_LogPriority"/> for the requested category; see Remarks for details. </returns>
-               /// <remarks>The category can be one of SDL_LOG_CATEGORY*</remarks>
-               /// <remarks>The returned priority will be one of SDL_LOG_PRIORITY*</remarks>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern SDL_LogPriority SDL_LogGetPriority(
-                       int category
-               );
-
-               /// <summary>
-               /// Use this function to set the priority of a particular log category.
-               /// </summary>
-               /// <param name="category">the category to query; see Remarks for details</param>
-               /// <param name="priority">the <see cref="SDL_LogPriority"/> of the message; see Remarks for details</param>
-               /// <remarks>The category can be one of SDL_LOG_CATEGORY*</remarks>
-               /// <remarks>The priority can be one of SDL_LOG_PRIORITY*</remarks>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_LogSetPriority(
-                       int category,
-                       SDL_LogPriority priority
-               );
-
-               /// <summary>
-               /// Use this function to set the priority of all log categories.
-               /// </summary>
-               /// <param name="priority">the <see cref="SDL_LogPriority"/> of the message; see Remarks for details</param>
-               /// <remarks>The priority can be one of SDL_LOG_PRIORITY*</remarks>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_LogSetAllPriority(
-                       SDL_LogPriority priority
-               );
-
-               /// <summary>
-               /// Use this function to reset all priorities to default.
-               /// </summary>
-               /// <remarks>This is called in <see cref="SDL_Quit()"/>. </remarks>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_LogResetPriorities();
-
-               /// <summary>
-               /// Use this function to get the current log output function.
-               /// </summary>
-               /// <param name="callback">a pointer filled in with the current log callback; see Remarks for details</param>
-               /// <param name="userdata">a pointer filled in with the pointer that is passed to callback (refers to void*)</param>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_LogGetOutputFunction(
-                       out SDL_LogOutputFunction callback,
-                       out IntPtr userdata
-               );
-
-               /* userdata refers to a void* */
-               /// <summary>
-               /// Use this function to replace the default log output function with one of your own.
-               /// </summary>
-               /// <param name="callback">the function to call instead of the default; see Remarks for details</param>
-               /// <param name="userdata">a pointer that is passed to callback (refers to void*)</param>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_LogSetOutputFunction(
-                       SDL_LogOutputFunction callback,
-                       IntPtr userdata
-               );
-
-               #endregion
-
-               #region SDL_messagebox.h
-
-               [Flags]
-               public enum SDL_MessageBoxFlags : uint
-               {
-                       SDL_MESSAGEBOX_ERROR =          0x00000010,
-                       SDL_MESSAGEBOX_WARNING =        0x00000020,
-                       SDL_MESSAGEBOX_INFORMATION =    0x00000040
-               }
-
-               [Flags]
-               public enum SDL_MessageBoxButtonFlags : uint
-               {
-                       SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT = 0x00000001,
-                       SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT = 0x00000002
-               }
-
-               [StructLayout(LayoutKind.Sequential)]
-               private struct INTERNAL_SDL_MessageBoxButtonData
-               {
-                       public SDL_MessageBoxButtonFlags flags;
-                       public int buttonid;
-                       public IntPtr text; /* The UTF-8 button text */
-               }
-
-               [StructLayout(LayoutKind.Sequential)]
-               public struct SDL_MessageBoxButtonData
-               {
-                       public SDL_MessageBoxButtonFlags flags;
-                       public int buttonid;
-                       public string text; /* The UTF-8 button text */
-               }
-
-               [StructLayout(LayoutKind.Sequential)]
-               public struct SDL_MessageBoxColor
-               {
-                       public byte r, g, b;
-               }
-
-               public enum SDL_MessageBoxColorType
-               {
-                       SDL_MESSAGEBOX_COLOR_BACKGROUND,
-                       SDL_MESSAGEBOX_COLOR_TEXT,
-                       SDL_MESSAGEBOX_COLOR_BUTTON_BORDER,
-                       SDL_MESSAGEBOX_COLOR_BUTTON_BACKGROUND,
-                       SDL_MESSAGEBOX_COLOR_BUTTON_SELECTED,
-                       SDL_MESSAGEBOX_COLOR_MAX
-               }
-
-               [StructLayout(LayoutKind.Sequential)]
-               public struct SDL_MessageBoxColorScheme
-               {
-                       [MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.Struct, SizeConst = (int)SDL_MessageBoxColorType.SDL_MESSAGEBOX_COLOR_MAX)]
-                               public SDL_MessageBoxColor[] colors;
-               }
-
-               [StructLayout(LayoutKind.Sequential)]
-               private struct INTERNAL_SDL_MessageBoxData
-               {
-                       public SDL_MessageBoxFlags flags;
-                       public IntPtr window;                           /* Parent window, can be NULL */
-                       public IntPtr title;                            /* UTF-8 title */
-                       public IntPtr message;                          /* UTF-8 message text */
-                       public int numbuttons;
-                       public IntPtr buttons;
-                       public IntPtr colorScheme;                      /* Can be NULL to use system settings */
-               }
-
-               [StructLayout(LayoutKind.Sequential)]
-               public struct SDL_MessageBoxData
-               {
-                       public SDL_MessageBoxFlags flags;
-                       public IntPtr window;                           /* Parent window, can be NULL */
-                       public string title;                            /* UTF-8 title */
-                       public string message;                          /* UTF-8 message text */
-                       public int numbuttons;
-                       public SDL_MessageBoxButtonData[] buttons;
-                       public SDL_MessageBoxColorScheme? colorScheme;  /* Can be NULL to use system settings */
-               }
-
-               /// <summary>
-               ///
-               /// </summary>
-               /// <param name="messageboxdata"></param>
-               /// <param name="buttonid"></param>
-               /// <returns></returns>
-               [DllImport(nativeLibName, EntryPoint = "SDL_ShowMessageBox", CallingConvention = CallingConvention.Cdecl)]
-               private static extern int INTERNAL_SDL_ShowMessageBox([In()] ref INTERNAL_SDL_MessageBoxData messageboxdata, out int buttonid);
-
-               /// <summary>
-               ///
-               /// </summary>
-               /// <param name="messageboxdata"></param>
-               /// <param name="buttonid"></param>
-               /// <returns></returns>
-               public static unsafe int SDL_ShowMessageBox([In()] ref SDL_MessageBoxData messageboxdata, out int buttonid)
-               {
-                       var utf8 = LPUtf8StrMarshaler.GetInstance(null);
-
-                       var data = new INTERNAL_SDL_MessageBoxData()
-                       {
-                               flags = messageboxdata.flags,
-                               window = messageboxdata.window,
-                               title = utf8.MarshalManagedToNative(messageboxdata.title),
-                               message = utf8.MarshalManagedToNative(messageboxdata.message),
-                               numbuttons = messageboxdata.numbuttons,
-                       };
-
-                       var buttons = new INTERNAL_SDL_MessageBoxButtonData[messageboxdata.numbuttons];
-                       for (int i = 0; i < messageboxdata.numbuttons; i++)
-                       {
-                               buttons[i] = new INTERNAL_SDL_MessageBoxButtonData()
-                               {
-                                       flags = messageboxdata.buttons[i].flags,
-                                       buttonid = messageboxdata.buttons[i].buttonid,
-                                       text = utf8.MarshalManagedToNative(messageboxdata.buttons[i].text),
-                               };
-                       }
-
-                       if (messageboxdata.colorScheme != null)
-                       {
-                               data.colorScheme = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(SDL_MessageBoxColorScheme)));
-                               Marshal.StructureToPtr(messageboxdata.colorScheme.Value, data.colorScheme, false);
-                       }
-
-                       int result;
-                       fixed (INTERNAL_SDL_MessageBoxButtonData* buttonsPtr = &buttons[0])
-                       {
-                               data.buttons = (IntPtr)buttonsPtr;
-                               result = INTERNAL_SDL_ShowMessageBox(ref data, out buttonid);
-                       }
-
-                       Marshal.FreeHGlobal(data.colorScheme);
-                       for (int i = 0; i < messageboxdata.numbuttons; i++)
-                       {
-                               utf8.CleanUpNativeData(buttons[i].text);
-                       }
-                       utf8.CleanUpNativeData(data.message);
-                       utf8.CleanUpNativeData(data.title);
-
-                       return result;
-               }
-
-               /// <summary>
-               /// Use this function to display a simple message box.
-               /// </summary>
-               /// <param name="flags">An <see cref="SDL_MessageBoxFlag"/>; see Remarks for details;</param>
-               /// <param name="title">UTF-8 title text</param>
-               /// <param name="message">UTF-8 message text</param>
-               /// <param name="window">the parent window, or NULL for no parent (refers to a <see cref="SDL_Window"/></param>
-               /// <returns>0 on success or a negative error code on failure; call SDL_GetError() for more information. </returns>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_ShowSimpleMessageBox(
-                       SDL_MessageBoxFlags flags,
-                       [In()] [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler))]
-                               string title,
-                       [In()] [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler))]
-                               string message,
-                       IntPtr window
-               );
-
-               #endregion
-
-               #region SDL_version.h, SDL_revision.h
-
-               /* Similar to the headers, this is the version we're expecting to be
-                * running with. You will likely want to check this somewhere in your
-                * program!
-                */
-               public const int SDL_MAJOR_VERSION =    2;
-               public const int SDL_MINOR_VERSION =    0;
-               public const int SDL_PATCHLEVEL =       4;
-
-               public static readonly int SDL_COMPILEDVERSION = SDL_VERSIONNUM(
-                       SDL_MAJOR_VERSION,
-                       SDL_MINOR_VERSION,
-                       SDL_PATCHLEVEL
-               );
-
-               /// <summary>
-               /// A structure that contains information about the version of SDL in use.
-               /// </summary>
-               /// <remarks>Represents the library's version as three levels: </remarks>
-               /// <remarks>major revision (increments with massive changes, additions, and enhancements) </remarks>
-               /// <remarks>minor revision (increments with backwards-compatible changes to the major revision), and </remarks>
-               /// <remarks>patchlevel (increments with fixes to the minor revision)</remarks>
-               /// <remarks><see cref="SDL_VERSION"/> can be used to populate this structure with information</remarks>
-               [StructLayout(LayoutKind.Sequential)]
-               public struct SDL_version
-               {
-                       public byte major;
-                       public byte minor;
-                       public byte patch;
-               }
-
-               /// <summary>
-               /// Use this macro to determine the SDL version your program was compiled against.
-               /// </summary>
-               /// <param name="x">an <see cref="SDL_version"/> structure to initialize</param>
-               public static void SDL_VERSION(out SDL_version x)
-               {
-                       x.major = SDL_MAJOR_VERSION;
-                       x.minor = SDL_MINOR_VERSION;
-                       x.patch = SDL_PATCHLEVEL;
-               }
-
-               /// <summary>
-               /// Use this macro to convert separate version components into a single numeric value.
-               /// </summary>
-               /// <param name="X">major version; reported in thousands place</param>
-               /// <param name="Y">minor version; reported in hundreds place</param>
-               /// <param name="Z">update version (patchlevel); reported in tens and ones places</param>
-               /// <returns></returns>
-               /// <remarks>This assumes that there will never be more than 100 patchlevels.</remarks>
-               /// <remarks>Example: SDL_VERSIONNUM(1,2,3) -> (1203)</remarks>
-               public static int SDL_VERSIONNUM(int X, int Y, int Z)
-               {
-                       return (X * 1000) + (Y * 100) + Z;
-               }
-
-               /// <summary>
-               /// Use this macro to determine whether the SDL version compiled against is at least as new as the specified version.
-               /// </summary>
-               /// <param name="X">major version</param>
-               /// <param name="Y">minor version</param>
-               /// <param name="Z">update version (patchlevel)</param>
-               /// <returns>This macro will evaluate to true if compiled with SDL version at least X.Y.Z. </returns>
-               public static bool SDL_VERSION_ATLEAST(int X, int Y, int Z)
-               {
-                       return (SDL_COMPILEDVERSION >= SDL_VERSIONNUM(X, Y, Z));
-               }
-
-               /// <summary>
-               /// Use this function to get the version of SDL that is linked against your program.
-               /// </summary>
-               /// <param name="ver">the <see cref="SDL_version"/> structure that contains the version information</param>
-               /// <remarks>This function may be called safely at any time, even before SDL_Init(). </remarks>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_GetVersion(out SDL_version ver);
-
-               /// <summary>
-               /// Use this function to get the code revision of SDL that is linked against your program.
-               /// </summary>
-               /// <returns>Returns an arbitrary string, uniquely identifying the exact revision
-               /// of the SDL library in use. </returns>
-               /// <remarks>The revision is a string including sequential revision number that is
-               /// incremented with each commit, and a hash of the last code change.</remarks>
-               /// <remarks>Example: hg-5344:94189aa89b54</remarks>
-               /// <remarks>This value is the revision of the code you are linked with and may be
-               /// different from the code you are compiling with, which is found in the constant SDL_REVISION.</remarks>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               [return : MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler), MarshalCookie = LPUtf8StrMarshaler.LeaveAllocated)]
-               public static extern string SDL_GetRevision();
-
-               /// <summary>
-               /// Use this function to get the revision number of SDL that is linked against your program.
-               /// </summary>
-               /// <returns>Returns a number uniquely identifying the exact revision of the SDL library in use.</returns>
-               /// <remarks>This is an incrementing number based on commits to hg.libsdl.org.</remarks>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_GetRevisionNumber();
-
-               #endregion
-
-               #region SDL_video.h
-
-               /* Actually, this is from SDL_blendmode.h */
-               /// <summary>
-               /// An enumeration of blend modes used in SDL_RenderCopy() and drawing operations.
-               /// </summary>
-               [Flags]
-               public enum SDL_BlendMode
-               {
-                       SDL_BLENDMODE_NONE =    0x00000000,
-                       SDL_BLENDMODE_BLEND =   0x00000001,
-                       SDL_BLENDMODE_ADD =     0x00000002,
-                       SDL_BLENDMODE_MOD =     0x00000004
-               }
-
-               /// <summary>
-               /// An enumeration of OpenGL configuration attributes.
-               /// </summary>
-               public enum SDL_GLattr
-               {
-                       SDL_GL_RED_SIZE,
-                       SDL_GL_GREEN_SIZE,
-                       SDL_GL_BLUE_SIZE,
-                       SDL_GL_ALPHA_SIZE,
-                       SDL_GL_BUFFER_SIZE,
-                       SDL_GL_DOUBLEBUFFER,
-                       SDL_GL_DEPTH_SIZE,
-                       SDL_GL_STENCIL_SIZE,
-                       SDL_GL_ACCUM_RED_SIZE,
-                       SDL_GL_ACCUM_GREEN_SIZE,
-                       SDL_GL_ACCUM_BLUE_SIZE,
-                       SDL_GL_ACCUM_ALPHA_SIZE,
-                       SDL_GL_STEREO,
-                       SDL_GL_MULTISAMPLEBUFFERS,
-                       SDL_GL_MULTISAMPLESAMPLES,
-                       SDL_GL_ACCELERATED_VISUAL,
-                       SDL_GL_RETAINED_BACKING,
-                       SDL_GL_CONTEXT_MAJOR_VERSION,
-                       SDL_GL_CONTEXT_MINOR_VERSION,
-                       SDL_GL_CONTEXT_EGL,
-                       SDL_GL_CONTEXT_FLAGS,
-                       SDL_GL_CONTEXT_PROFILE_MASK,
-                       SDL_GL_SHARE_WITH_CURRENT_CONTEXT,
-                       SDL_GL_FRAMEBUFFER_SRGB_CAPABLE,
-                       SDL_GL_CONTEXT_RELEASE_BEHAVIOR
-               }
-
-               /// <summary>
-               /// An enumeration of OpenGL profiles.
-               /// </summary>
-               [Flags]
-               public enum SDL_GLprofile
-               {
-                       SDL_GL_CONTEXT_PROFILE_CORE                             = 0x0001,
-                       SDL_GL_CONTEXT_PROFILE_COMPATIBILITY    = 0x0002,
-                       SDL_GL_CONTEXT_PROFILE_ES                               = 0x0004
-               }
-
-               /// <summary>
-               /// This enumeration is used in conjunction with SDL_GL_SetAttribute
-               /// and SDL_GL_CONTEXT_FLAGS. Multiple flags can be OR'd together.
-               /// </summary>
-               [Flags]
-               public enum SDL_GLcontext
-               {
-                       SDL_GL_CONTEXT_DEBUG_FLAG                               = 0x0001,
-                       SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG  = 0x0002,
-                       SDL_GL_CONTEXT_ROBUST_ACCESS_FLAG               = 0x0004,
-                       SDL_GL_CONTEXT_RESET_ISOLATION_FLAG             = 0x0008
-               }
-
-               /// <summary>
-               /// An enumeration of window events.
-               /// </summary>
-               public enum SDL_WindowEventID : byte
-               {
-                       SDL_WINDOWEVENT_NONE,
-                       SDL_WINDOWEVENT_SHOWN,
-                       SDL_WINDOWEVENT_HIDDEN,
-                       SDL_WINDOWEVENT_EXPOSED,
-                       SDL_WINDOWEVENT_MOVED,
-                       SDL_WINDOWEVENT_RESIZED,
-                       SDL_WINDOWEVENT_SIZE_CHANGED,
-                       SDL_WINDOWEVENT_MINIMIZED,
-                       SDL_WINDOWEVENT_MAXIMIZED,
-                       SDL_WINDOWEVENT_RESTORED,
-                       SDL_WINDOWEVENT_ENTER,
-                       SDL_WINDOWEVENT_LEAVE,
-                       SDL_WINDOWEVENT_FOCUS_GAINED,
-                       SDL_WINDOWEVENT_FOCUS_LOST,
-                       SDL_WINDOWEVENT_CLOSE,
-               }
-
-               /// <summary>
-               /// An enumeration of window states.
-               /// </summary>
-               [Flags]
-               public enum SDL_WindowFlags : uint
-               {
-                       SDL_WINDOW_FULLSCREEN =         0x00000001,
-                       SDL_WINDOW_OPENGL =             0x00000002,
-                       SDL_WINDOW_SHOWN =              0x00000004,
-                       SDL_WINDOW_HIDDEN =             0x00000008,
-                       SDL_WINDOW_BORDERLESS =         0x00000010,
-                       SDL_WINDOW_RESIZABLE =          0x00000020,
-                       SDL_WINDOW_MINIMIZED =          0x00000040,
-                       SDL_WINDOW_MAXIMIZED =          0x00000080,
-                       SDL_WINDOW_INPUT_GRABBED =      0x00000100,
-                       SDL_WINDOW_INPUT_FOCUS =        0x00000200,
-                       SDL_WINDOW_MOUSE_FOCUS =        0x00000400,
-                       SDL_WINDOW_FULLSCREEN_DESKTOP =
-                               (SDL_WINDOW_FULLSCREEN | 0x00001000),
-                       SDL_WINDOW_FOREIGN =            0x00000800,
-                       SDL_WINDOW_ALLOW_HIGHDPI =      0x00002000,     /* Only available in 2.0.1 */
-                       SDL_WINDOW_MOUSE_CAPTURE =      0x00004000,     /* Only available in 2.0.4 */
-               }
-
-               /// <summary>
-               /// Possible return values from the SDL_HitTest callback.
-               /// This is only available in 2.0.4.
-               /// </summary>
-               public enum SDL_HitTestResult
-               {
-                       SDL_HITTEST_NORMAL,             /* Region is normal. No special properties. */
-                       SDL_HITTEST_DRAGGABLE,          /* Region can drag entire window. */
-                       SDL_HITTEST_RESIZE_TOPLEFT,
-                       SDL_HITTEST_RESIZE_TOP,
-                       SDL_HITTEST_RESIZE_TOPRIGHT,
-                       SDL_HITTEST_RESIZE_RIGHT,
-                       SDL_HITTEST_RESIZE_BOTTOMRIGHT,
-                       SDL_HITTEST_RESIZE_BOTTOM,
-                       SDL_HITTEST_RESIZE_BOTTOMLEFT,
-                       SDL_HITTEST_RESIZE_LEFT
-               }
-
-               public const int SDL_WINDOWPOS_UNDEFINED_MASK = 0x1FFF0000;
-               public const int SDL_WINDOWPOS_CENTERED_MASK =  0x2FFF0000;
-               public const int SDL_WINDOWPOS_UNDEFINED =              0x1FFF0000;
-               public const int SDL_WINDOWPOS_CENTERED =               0x2FFF0000;
-
-               public static int SDL_WINDOWPOS_UNDEFINED_DISPLAY(int X)
-               {
-                       return (SDL_WINDOWPOS_UNDEFINED_MASK | X);
-               }
-
-               public static bool SDL_WINDOWPOS_ISUNDEFINED(int X)
-               {
-                       return (X & 0xFFFF0000) == SDL_WINDOWPOS_UNDEFINED_MASK;
-               }
-
-               public static int SDL_WINDOWPOS_CENTERED_DISPLAY(int X)
-               {
-                       return (SDL_WINDOWPOS_CENTERED_MASK | X);
-               }
-
-               public static bool SDL_WINDOWPOS_ISCENTERED(int X)
-               {
-                       return (X & 0xFFFF0000) == SDL_WINDOWPOS_CENTERED_MASK;
-               }
-
-               /// <summary>
-               /// A structure that describes a display mode.
-               /// </summary>
-               [StructLayout(LayoutKind.Sequential)]
-               public struct SDL_DisplayMode
-               {
-                       public uint format;
-                       public int w;
-                       public int h;
-                       public int refresh_rate;
-                       public IntPtr driverdata; // void*
-               }
-
-               /* win refers to an SDL_Window*, area to a cosnt SDL_Point*, data to a void* */
-               /* Only available in 2.0.4 */
-               public delegate SDL_HitTestResult SDL_HitTest(IntPtr win, IntPtr area, IntPtr data);
-
-               /// <summary>
-               /// Use this function to create a window with the specified position, dimensions, and flags.
-               /// </summary>
-               /// <param name="title">the title of the window, in UTF-8 encoding</param>
-               /// <param name="x">the x position of the window, SDL_WINDOWPOS_CENTERED, or SDL_WINDOWPOS_UNDEFINED</param>
-               /// <param name="y">the y position of the window, SDL_WINDOWPOS_CENTERED, or SDL_WINDOWPOS_UNDEFINED</param>
-               /// <param name="w">the width of the window</param>
-               /// <param name="h">the height of the window</param>
-               /// <param name="flags">0, or one or more <see cref="SDL_WindowFlags"/> OR'd together;
-               /// see Remarks for details</param>
-               /// <returns>Returns the window that was created or NULL on failure; call <see cref="SDL_GetError()"/>
-               /// for more information. (refers to an <see cref="SDL_Window"/>)</returns>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern IntPtr SDL_CreateWindow(
-                       [In()] [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler))]
-                               string title,
-                       int x,
-                       int y,
-                       int w,
-                       int h,
-                       SDL_WindowFlags flags
-               );
-
-               /// <summary>
-               /// Use this function to create a window and default renderer.
-               /// </summary>
-               /// <param name="width">The width of the window</param>
-               /// <param name="height">The height of the window</param>
-               /// <param name="window_flags">The flags used to create the window (see <see cref="SDL_CreateWindow()"/>)</param>
-               /// <param name="window">A pointer filled with the window, or NULL on error (<see cref="SDL_Window*"/>)</param>
-               /// <param name="renderer">A pointer filled with the renderer, or NULL on error <see cref="(SDL_Renderer*)"/></param>
-               /// <returns>Returns 0 on success, or -1 on error; call <see cref="SDL_GetError()"/> for more information. </returns>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_CreateWindowAndRenderer(
-                       int width,
-                       int height,
-                       SDL_WindowFlags window_flags,
-                       out IntPtr window,
-                       out IntPtr renderer
-               );
-
-               /// <summary>
-               /// Use this function to create an SDL window from an existing native window.
-               /// </summary>
-               /// <param name="data">a pointer to driver-dependent window creation data, typically your native window cast to a void*</param>
-               /// <returns>Returns the window (<see cref="SDL_Window"/>) that was created or NULL on failure;
-               /// call <see cref="SDL_GetError()"/> for more information. </returns>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern IntPtr SDL_CreateWindowFrom(IntPtr data);
-
-               /// <summary>
-               /// Use this function to destroy a window.
-               /// </summary>
-               /// <param name="window">the window to destroy (<see cref="SDL_Window"/>)</param>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_DestroyWindow(IntPtr window);
-
-               /// <summary>
-               /// Use this function to prevent the screen from being blanked by a screen saver.
-               /// </summary>
-               /// <remarks>If you disable the screensaver, it is automatically re-enabled when SDL quits. </remarks>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_DisableScreenSaver();
-
-               /// <summary>
-               /// Use this function to allow the screen to be blanked by a screen saver.
-               /// </summary>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_EnableScreenSaver();
-
-               /* IntPtr refers to an SDL_DisplayMode. Just use closest. */
-               /// <summary>
-               /// Use this function to get the closest match to the requested display mode.
-               /// </summary>
-               /// <param name="displayIndex">the index of the display to query</param>
-               /// <param name="mode">an <see cref="SDL_DisplayMode"/> structure containing the desired display mode </param>
-               /// <param name="closest">an <see cref="SDL_DisplayMode"/> structure filled in with
-               /// the closest match of the available display modes </param>
-               /// <returns>Returns the passed in value closest or NULL if no matching video mode was available;
-               /// (refers to a <see cref="SDL_DisplayMode"/>)
-               /// call <see cref="SDL_GetError()"/> for more information. </returns>
-               /// <remarks>The available display modes are scanned and closest is filled in with the closest mode
-               /// matching the requested mode and returned. The mode format and refresh rate default to the desktop
-               /// mode if they are set to 0. The modes are scanned with size being first priority, format being
-               /// second priority, and finally checking the refresh rate. If all the available modes are too small,
-               /// then NULL is returned. </remarks>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern IntPtr SDL_GetClosestDisplayMode(
-                       int displayIndex,
-                       ref SDL_DisplayMode mode,
-                       out SDL_DisplayMode closest
-               );
-
-               /// <summary>
-               /// Use this function to get information about the current display mode.
-               /// </summary>
-               /// <param name="displayIndex">the index of the display to query</param>
-               /// <param name="mode">an <see cref="SDL_DisplayMode"/> structure filled in with the current display mode</param>
-               /// <returns>Returns 0 on success or a negative error code on failure;
-               /// call <see cref="SDL_GetError()"/> for more information. </returns>
-               /// <remarks>There's a difference between this function and <see cref="SDL_GetDesktopDisplayMode"/> when SDL
-               /// runs fullscreen and has changed the resolution. In that case this function will return the
-               /// current display mode, and not the previous native display mode. </remarks>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_GetCurrentDisplayMode(
-                       int displayIndex,
-                       out SDL_DisplayMode mode
-               );
-
-               /// <summary>
-               /// Use this function to return the name of the currently initialized video driver.
-               /// </summary>
-               /// <returns>Returns the name of the current video driver or NULL if no driver has been initialized. </returns>
-               /// <remarks>There's a difference between this function and <see cref="SDL_GetCurrentDisplayMode"/> when SDL
-               /// runs fullscreen and has changed the resolution. In that case this function will return the
-               /// previous native display mode, and not the current display mode. </remarks>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               [return : MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler), MarshalCookie = LPUtf8StrMarshaler.LeaveAllocated)]
-               public static extern string SDL_GetCurrentVideoDriver();
-
-               /// <summary>
-               /// Use this function to get information about the desktop display mode.
-               /// </summary>
-               /// <param name="displayIndex">the index of the display to query</param>
-               /// <param name="mode">an <see cref="SDL_DisplayMode"/> structure filled in with the current display mode</param>
-               /// <returns>Returns 0 on success or a negative error code on failure;
-               /// call <see cref="SDL_GetError()"/> for more information. </returns>
-               /// <remarks>There's a difference between this function and <see cref="SDL_GetCurrentDisplayMode"/> when SDL
-               /// runs fullscreen and has changed the resolution. In that case this function will return the
-               /// previous native display mode, and not the current display mode. </remarks>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_GetDesktopDisplayMode(
-                       int displayIndex,
-                       out SDL_DisplayMode mode
-               );
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               [return : MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler), MarshalCookie = LPUtf8StrMarshaler.LeaveAllocated)]
-               public static extern string SDL_GetDisplayName(int index);
-
-               /// <summary>
-               /// Use this function to get the desktop area represented by a display, with the primary display located at 0,0.
-               /// </summary>
-               /// <param name="displayIndex">the index of the display to query</param>
-               /// <param name="rect">the <see cref="SDL_Rect"/> structure filled in with the display bounds</param>
-               /// <returns>Returns 0 on success or a negative error code on failure;
-               /// call <see cref="SDL_GetError()"/> for more information. </returns>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_GetDisplayBounds(
-                       int displayIndex,
-                       out SDL_Rect rect
-               );
-
-               /* This function is only available in 2.0.4 or higher */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_GetDisplayDPI(
-                       int displayIndex,
-                       out float ddpi,
-                       out float hdpi,
-                       out float vdpi
-               );
-
-               /// <summary>
-               /// Use this function to get information about a specific display mode.
-               /// </summary>
-               /// <param name="displayIndex">the index of the display to query</param>
-               /// <param name="modeIndex">the index of the display mode to query</param>
-               /// <param name="mode">an <see cref="SDL_DisplayMode"/> structure filled in with the mode at modeIndex</param>
-               /// <returns>Returns 0 on success or a negative error code on failure;
-               /// call <see cref="SDL_GetError()"/> for more information. </returns>
-               /// <remarks>The display modes are sorted in this priority:
-               /// <remarks>bits per pixel -> more colors to fewer colors</remarks>
-               /// <remarks>width -> largest to smallest</remarks>
-               /// <remarks>height -> largest to smallest</remarks>
-               /// <remarks>refresh rate -> highest to lowest</remarks>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_GetDisplayMode(
-                       int displayIndex,
-                       int modeIndex,
-                       out SDL_DisplayMode mode
-               );
-
-               /// <summary>
-               /// Use this function to return the number of available display modes.
-               /// </summary>
-               /// <param name="displayIndex">the index of the display to query</param>
-               /// <returns>Returns a number >= 1 on success or a negative error code on failure;
-               /// call <see cref="SDL_GetError()"/> for more information. </returns>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_GetNumDisplayModes(
-                       int displayIndex
-               );
-
-               /// <summary>
-               /// Use this function to return the number of available video displays.
-               /// </summary>
-               /// <returns>Returns a number >= 1 or a negative error code on failure;
-               /// call <see cref="SDL_GetError()"/> for more information. </returns>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_GetNumVideoDisplays();
-
-               /// <summary>
-               /// Use this function to get the number of video drivers compiled into SDL.
-               /// </summary>
-               /// <returns>Returns a number >= 1 on success or a negative error code on failure;
-               /// call <see cref="SDL_GetError()"/> for more information. </returns>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_GetNumVideoDrivers();
-
-               /// <summary>
-               /// Use this function to get the name of a built in video driver.
-               /// </summary>
-               /// <param name="index">the index of a video driver</param>
-               /// <returns>Returns the name of the video driver with the given index. </returns>
-               /// <remarks>The video drivers are presented in the order in which they are normally checked during initialization. </remarks>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               [return : MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler), MarshalCookie = LPUtf8StrMarshaler.LeaveAllocated)]
-               public static extern string SDL_GetVideoDriver(
-                       int index
-               );
-
-               /// <summary>
-               /// Use this function to get the brightness (gamma correction) for a window.
-               /// </summary>
-               /// <param name="window">the window to query (<see cref="SDL_Window"/>)</param>
-               /// <returns>Returns the brightness for the window where 0.0 is completely dark and 1.0 is normal brightness. </returns>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern float SDL_GetWindowBrightness(
-                       IntPtr window
-               );
-
-               /// <summary>
-               /// Use this function to retrieve the data pointer associated with a window.
-               /// </summary>
-               /// <param name="window">the window to query (<see cref="SDL_Window"/>)</param>
-               /// <param name="name">the name of the pointer</param>
-               /// <returns>Returns the value associated with name. (void*)</returns>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern IntPtr SDL_GetWindowData(
-                       IntPtr window,
-                       [In()] [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler))]
-                               string name
-               );
-
-               /// <summary>
-               /// Use this function to get the index of the display associated with a window.
-               /// </summary>
-               /// <param name="window">the window to query (<see cref="SDL_Window"/>)</param>
-               /// <returns>Returns the index of the display containing the center of the window
-               /// on success or a negative error code on failure;
-               /// call <see cref="SDL_GetError()"/> for more information. </returns>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_GetWindowDisplayIndex(
-                       IntPtr window
-               );
-
-               /// <summary>
-               /// Use this function to fill in information about the display mode to use when a window is visible at fullscreen.
-               /// </summary>
-               /// <param name="window">the window to query (<see cref="SDL_Window"/>)</param>
-               /// <param name="mode">an <see cref="SDL_DisplayMode"/> structure filled in with the fullscreen display mode</param>
-               /// <returns>Returns 0 on success or a negative error code on failure;
-               /// call <see cref="SDL_GetError()"/> for more information. </returns>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_GetWindowDisplayMode(
-                       IntPtr window,
-                       out SDL_DisplayMode mode
-               );
-
-               /// <summary>
-               /// Use this function to get the window flags.
-               /// </summary>
-               /// <param name="window">the window to query (<see cref="SDL_Window"/>)</param>
-               /// <returns>Returns a mask of the <see cref="SDL_WindowFlags"/> associated with window; see Remarks for details.</returns>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern uint SDL_GetWindowFlags(IntPtr window);
-
-               /// <summary>
-               /// Use this function to get a window from a stored ID.
-               /// </summary>
-               /// <param name="id">the ID of the window</param>
-               /// <returns>Returns the window associated with id or NULL if it doesn't exist (<see cref="SDL_Window"/>);
-               /// call <see cref="SDL_GetError()"/> for more information. </returns>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern IntPtr SDL_GetWindowFromID(uint id);
-
-               /* window refers to an SDL_Window* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_GetWindowGammaRamp(
-                       IntPtr window,
-                       [Out()] [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.U2, SizeConst = 256)]
-                               ushort[] red,
-                       [Out()] [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.U2, SizeConst = 256)]
-                               ushort[] green,
-                       [Out()] [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.U2, SizeConst = 256)]
-                               ushort[] blue
-               );
-
-               /* window refers to an SDL_Window* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern SDL_bool SDL_GetWindowGrab(IntPtr window);
-
-               /* window refers to an SDL_Window* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern uint SDL_GetWindowID(IntPtr window);
-
-               /* window refers to an SDL_Window* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern uint SDL_GetWindowPixelFormat(
-                       IntPtr window
-               );
-
-               /* window refers to an SDL_Window* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_GetWindowMaximumSize(
-                       IntPtr window,
-                       out int max_w,
-                       out int max_h
-               );
-
-               /* window refers to an SDL_Window* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_GetWindowMinimumSize(
-                       IntPtr window,
-                       out int min_w,
-                       out int min_h
-               );
-
-               /* window refers to an SDL_Window* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_GetWindowPosition(
-                       IntPtr window,
-                       out int x,
-                       out int y
-               );
-
-               /* window refers to an SDL_Window* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_GetWindowSize(
-                       IntPtr window,
-                       out int w,
-                       out int h
-               );
-
-               /* IntPtr refers to an SDL_Surface*, window to an SDL_Window* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern IntPtr SDL_GetWindowSurface(IntPtr window);
-
-               /* window refers to an SDL_Window* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               [return : MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler), MarshalCookie = LPUtf8StrMarshaler.LeaveAllocated)]
-               public static extern string SDL_GetWindowTitle(
-                       IntPtr window
-               );
-
-               /* texture refers to an SDL_Texture* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_GL_BindTexture(
-                       IntPtr texture,
-                       out float texw,
-                       out float texh
-               );
-
-               /* IntPtr and window refer to an SDL_GLContext and SDL_Window* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern IntPtr SDL_GL_CreateContext(IntPtr window);
-
-               /* context refers to an SDL_GLContext */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_GL_DeleteContext(IntPtr context);
-
-               /* IntPtr refers to a function pointer */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern IntPtr SDL_GL_GetProcAddress(
-                       [In()] [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler))]
-                               string proc
-               );
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern SDL_bool SDL_GL_ExtensionSupported(
-                       [In()] [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler))]
-                               string extension
-               );
-
-               /* Only available in SDL 2.0.2 or higher */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_GL_ResetAttributes();
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_GL_GetAttribute(
-                       SDL_GLattr attr,
-                       out int value
-               );
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_GL_GetSwapInterval();
-
-               /* window and context refer to an SDL_Window* and SDL_GLContext */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_GL_MakeCurrent(
-                       IntPtr window,
-                       IntPtr context
-               );
-
-               /* IntPtr refers to an SDL_Window* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern IntPtr SDL_GL_GetCurrentWindow();
-
-               /* IntPtr refers to an SDL_Context */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern IntPtr SDL_GL_GetCurrentContext();
-
-               /* window refers to an SDL_Window*, This function is only available in SDL 2.0.1 */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_GL_GetDrawableSize(
-                       IntPtr window,
-                       out int w,
-                       out int h
-               );
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_GL_SetAttribute(
-                       SDL_GLattr attr,
-                       int value
-               );
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_GL_SetSwapInterval(int interval);
-
-               /* window refers to an SDL_Window* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_GL_SwapWindow(IntPtr window);
-
-               /* texture refers to an SDL_Texture* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_GL_UnbindTexture(IntPtr texture);
-
-               /* window refers to an SDL_Window* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_HideWindow(IntPtr window);
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern SDL_bool SDL_IsScreenSaverEnabled();
-
-               /* window refers to an SDL_Window* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_MaximizeWindow(IntPtr window);
-
-               /* window refers to an SDL_Window* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_MinimizeWindow(IntPtr window);
-
-               /* window refers to an SDL_Window* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_RaiseWindow(IntPtr window);
-
-               /* window refers to an SDL_Window* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_RestoreWindow(IntPtr window);
-
-               /* window refers to an SDL_Window* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_SetWindowBrightness(
-                       IntPtr window,
-                       float brightness
-               );
-
-               /* IntPtr and userdata are void*, window is an SDL_Window* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern IntPtr SDL_SetWindowData(
-                       IntPtr window,
-                       [In()] [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler))]
-                               string name,
-                       IntPtr userdata
-               );
-
-               /* window refers to an SDL_Window* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_SetWindowDisplayMode(
-                       IntPtr window,
-                       ref SDL_DisplayMode mode
-               );
-
-               /* window refers to an SDL_Window* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_SetWindowFullscreen(
-                       IntPtr window,
-                       uint flags
-               );
-
-               /* window refers to an SDL_Window* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_SetWindowGammaRamp(
-                       IntPtr window,
-                       [In()] [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.U2, SizeConst = 256)]
-                               ushort[] red,
-                       [In()] [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.U2, SizeConst = 256)]
-                               ushort[] green,
-                       [In()] [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.U2, SizeConst = 256)]
-                               ushort[] blue
-               );
-
-               /* window refers to an SDL_Window* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_SetWindowGrab(
-                       IntPtr window,
-                       SDL_bool grabbed
-               );
-
-               /* window refers to an SDL_Window*, icon to an SDL_Surface* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_SetWindowIcon(
-                       IntPtr window,
-                       IntPtr icon
-               );
-
-               /* window refers to an SDL_Window* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_SetWindowMaximumSize(
-                       IntPtr window,
-                       int max_w,
-                       int max_h
-               );
-
-               /* window refers to an SDL_Window* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_SetWindowMinimumSize(
-                       IntPtr window,
-                       int min_w,
-                       int min_h
-               );
-
-               /* window refers to an SDL_Window* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_SetWindowPosition(
-                       IntPtr window,
-                       int x,
-                       int y
-               );
-
-               /* window refers to an SDL_Window* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_SetWindowSize(
-                       IntPtr window,
-                       int w,
-                       int h
-               );
-
-               /* window refers to an SDL_Window* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_SetWindowBordered(
-                       IntPtr window,
-                       SDL_bool bordered
-               );
-
-               /* window refers to an SDL_Window* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_SetWindowTitle(
-                       IntPtr window,
-                       [In()] [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler))]
-                               string title
-               );
-
-               /* window refers to an SDL_Window* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_ShowWindow(IntPtr window);
-
-               /* window refers to an SDL_Window* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_UpdateWindowSurface(IntPtr window);
-
-               /* window refers to an SDL_Window* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_UpdateWindowSurfaceRects(
-                       IntPtr window,
-                       [In()] [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.Struct, SizeParamIndex = 2)]
-                               SDL_Rect[] rects,
-                       int numrects
-               );
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_VideoInit(
-                       [In()] [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler))]
-                               string driver_name
-               );
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_VideoQuit();
-
-               /* window refers to an SDL_Window*, callback_data to a void* */
-               /* Only available in 2.0.4 */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_SetWindowHitTest(
-                       IntPtr window,
-                       SDL_HitTest callback,
-                       IntPtr callback_data
-               );
-
-               /* IntPtr refers to an SDL_Window* */
-               /* Only available in 2.0.4 */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern IntPtr SDL_GetGrabbedWindow();
-
-               #endregion
-
-               #region SDL_render.h
-
-               [Flags]
-               public enum SDL_RendererFlags : uint
-               {
-                       SDL_RENDERER_SOFTWARE =         0x00000001,
-                       SDL_RENDERER_ACCELERATED =      0x00000002,
-                       SDL_RENDERER_PRESENTVSYNC =     0x00000004,
-                       SDL_RENDERER_TARGETTEXTURE =    0x00000008
-               }
-
-               [Flags]
-               public enum SDL_RendererFlip
-               {
-                       SDL_FLIP_NONE =         0x00000000,
-                       SDL_FLIP_HORIZONTAL =   0x00000001,
-                       SDL_FLIP_VERTICAL =     0x00000002
-               }
-
-               public enum SDL_TextureAccess
-               {
-                       SDL_TEXTUREACCESS_STATIC,
-                       SDL_TEXTUREACCESS_STREAMING,
-                       SDL_TEXTUREACCESS_TARGET
-               }
-
-               [Flags]
-               public enum SDL_TextureModulate
-               {
-                       SDL_TEXTUREMODULATE_NONE =              0x00000000,
-                       SDL_TEXTUREMODULATE_HORIZONTAL =        0x00000001,
-                       SDL_TEXTUREMODULATE_VERTICAL =          0x00000002
-               }
-
-               [StructLayout(LayoutKind.Sequential)]
-               public unsafe struct SDL_RendererInfo
-               {
-                       public IntPtr name; // const char*
-                       public uint flags;
-                       public uint num_texture_formats;
-                       public fixed uint texture_formats[16];
-                       public int max_texture_width;
-                       public int max_texture_height;
-               }
-
-               /* IntPtr refers to an SDL_Renderer*, window to an SDL_Window* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern IntPtr SDL_CreateRenderer(
-                       IntPtr window,
-                       int index,
-                       SDL_RendererFlags flags
-               );
-
-               /* IntPtr refers to an SDL_Renderer*, surface to an SDL_Surface* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern IntPtr SDL_CreateSoftwareRenderer(IntPtr surface);
-
-               /* IntPtr refers to an SDL_Texture*, renderer to an SDL_Renderer* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern IntPtr SDL_CreateTexture(
-                       IntPtr renderer,
-                       uint format,
-                       int access,
-                       int w,
-                       int h
-               );
-
-               /* IntPtr refers to an SDL_Texture*
-                * renderer refers to an SDL_Renderer*
-                * surface refers to an SDL_Surface*
-                */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern IntPtr SDL_CreateTextureFromSurface(
-                       IntPtr renderer,
-                       IntPtr surface
-               );
-
-               /* renderer refers to an SDL_Renderer* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_DestroyRenderer(IntPtr renderer);
-
-               /* texture refers to an SDL_Texture* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_DestroyTexture(IntPtr texture);
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_GetNumRenderDrivers();
-
-               /* renderer refers to an SDL_Renderer* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_GetRenderDrawBlendMode(
-                       IntPtr renderer,
-                       out SDL_BlendMode blendMode
-               );
-
-               /* renderer refers to an SDL_Renderer* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_GetRenderDrawColor(
-                       IntPtr renderer,
-                       out byte r,
-                       out byte g,
-                       out byte b,
-                       out byte a
-               );
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_GetRenderDriverInfo(
-                       int index,
-                       out SDL_RendererInfo info
-               );
-
-               /* IntPtr refers to an SDL_Renderer*, window to an SDL_Window* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern IntPtr SDL_GetRenderer(IntPtr window);
-
-               /* renderer refers to an SDL_Renderer* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_GetRendererInfo(
-                       IntPtr renderer,
-                       out SDL_RendererInfo info
-               );
-
-               /* renderer refers to an SDL_Renderer* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_GetRendererOutputSize(
-                       IntPtr renderer,
-                       out int w,
-                       out int h
-               );
-
-               /* texture refers to an SDL_Texture* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_GetTextureAlphaMod(
-                       IntPtr texture,
-                       out byte alpha
-               );
-
-               /* texture refers to an SDL_Texture* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_GetTextureBlendMode(
-                       IntPtr texture,
-                       out SDL_BlendMode blendMode
-               );
-
-               /* texture refers to an SDL_Texture* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_GetTextureColorMod(
-                       IntPtr texture,
-                       out byte r,
-                       out byte g,
-                       out byte b
-               );
-
-               /// <summary>
-               /// Use this function to lock a portion of the texture for write-only pixel access.
-               /// </summary>
-               /// <param name="texture">the texture to lock for access, which was created with
-               /// SDL_TEXTUREACCESS_STREAMING (refers to a SDL_Texture*)</param>
-               /// <param name="rect">an SDL_Rect structure representing the area to lock for access;
-               /// NULL to lock the entire texture </param>
-               /// <param name="pixels">this is filled in with a pointer to the locked pixels, appropriately
-               /// offset by the locked area (refers to a void*)</param>
-               /// <param name="pitch">this is filled in with the pitch of the locked pixels </param>
-               /// <returns>Returns 0 on success or a negative error code if the texture is not valid or
-               /// was not created with SDL_TEXTUREACCESS_STREAMING; call <see cref="SDL_GetError()"/> for more information. </returns>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_LockTexture(
-                       IntPtr texture,
-                       ref SDL_Rect rect,
-                       out IntPtr pixels,
-                       out int pitch
-               );
-
-               /// <summary>
-               /// Use this function to lock a portion of the texture for write-only pixel access. This overload
-               /// allows for passing an IntPtr.Zero (null) rect value to lock the entire texture.
-               /// </summary>
-               /// <param name="texture">the texture to lock for access, which was created with
-               /// SDL_TEXTUREACCESS_STREAMING (refers to a SDL_Texture*)</param>
-               /// <param name="rect">an SDL_Rect structure representing the area to lock for access;
-               /// NULL to lock the entire texture </param>
-               /// <param name="pixels">this is filled in with a pointer to the locked pixels, appropriately
-               /// offset by the locked area (refers to a void*)</param>
-               /// <param name="pitch">this is filled in with the pitch of the locked pixels </param>
-               /// <returns>Returns 0 on success or a negative error code if the texture is not valid or
-               /// was not created with SDL_TEXTUREACCESS_STREAMING; call <see cref="SDL_GetError()"/> for more information. </returns>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_LockTexture(
-                       IntPtr texture,
-                       IntPtr rect,
-                       out IntPtr pixels,
-                       out int pitch
-               );
-
-               /* texture refers to an SDL_Texture* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_QueryTexture(
-                       IntPtr texture,
-                       out uint format,
-                       out int access,
-                       out int w,
-                       out int h
-               );
-
-               /* renderer refers to an SDL_Renderer* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_RenderClear(IntPtr renderer);
-
-               /* renderer refers to an SDL_Renderer*, texture to an SDL_Texture* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_RenderCopy(
-                       IntPtr renderer,
-                       IntPtr texture,
-                       ref SDL_Rect srcrect,
-                       ref SDL_Rect dstrect
-               );
-
-               /* renderer refers to an SDL_Renderer*, texture to an SDL_Texture*.
-                * Internally, this function contains logic to use default values when
-                * source and destination rectangles are passed as NULL.
-                * This overload allows for IntPtr.Zero (null) to be passed for srcrect.
-                */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_RenderCopy(
-                       IntPtr renderer,
-                       IntPtr texture,
-                       IntPtr srcrect,
-                       ref SDL_Rect dstrect
-               );
-
-               /* renderer refers to an SDL_Renderer*, texture to an SDL_Texture*.
-                * Internally, this function contains logic to use default values when
-                * source and destination rectangles are passed as NULL.
-                * This overload allows for IntPtr.Zero (null) to be passed for dstrect.
-                */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_RenderCopy(
-                       IntPtr renderer,
-                       IntPtr texture,
-                       ref SDL_Rect srcrect,
-                       IntPtr dstrect
-               );
-
-               /* renderer refers to an SDL_Renderer*, texture to an SDL_Texture*.
-                * Internally, this function contains logic to use default values when
-                * source and destination rectangles are passed as NULL.
-                * This overload allows for IntPtr.Zero (null) to be passed for both SDL_Rects.
-                */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_RenderCopy(
-                       IntPtr renderer,
-                       IntPtr texture,
-                       IntPtr srcrect,
-                       IntPtr dstrect
-               );
-
-               /* renderer refers to an SDL_Renderer*, texture to an SDL_Texture* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_RenderCopyEx(
-                       IntPtr renderer,
-                       IntPtr texture,
-                       ref SDL_Rect srcrect,
-                       ref SDL_Rect dstrect,
-                       double angle,
-                       ref SDL_Point center,
-                       SDL_RendererFlip flip
-               );
-
-               /* renderer refers to an SDL_Renderer*, texture to an SDL_Texture*.
-                * Internally, this function contains logic to use default values when
-                * source, destination, and/or center are passed as NULL.
-                * This overload allows for IntPtr.Zero (null) to be passed for srcrect.
-                */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_RenderCopyEx(
-                       IntPtr renderer,
-                       IntPtr texture,
-                       IntPtr srcrect,
-                       ref SDL_Rect dstrect,
-                       double angle,
-                       ref SDL_Point center,
-                       SDL_RendererFlip flip
-               );
-
-               /* renderer refers to an SDL_Renderer*, texture to an SDL_Texture*.
-                * Internally, this function contains logic to use default values when
-                * source, destination, and/or center are passed as NULL.
-                * This overload allows for IntPtr.Zero (null) to be passed for dstrect.
-                */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_RenderCopyEx(
-                       IntPtr renderer,
-                       IntPtr texture,
-                       ref SDL_Rect srcrect,
-                       IntPtr dstrect,
-                       double angle,
-                       ref SDL_Point center,
-                       SDL_RendererFlip flip
-               );
-
-               /* renderer refers to an SDL_Renderer*, texture to an SDL_Texture*.
-                * Internally, this function contains logic to use default values when
-                * source, destination, and/or center are passed as NULL.
-                * This overload allows for IntPtr.Zero (null) to be passed for center.
-                */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_RenderCopyEx(
-                       IntPtr renderer,
-                       IntPtr texture,
-                       ref SDL_Rect srcrect,
-                       ref SDL_Rect dstrect,
-                       double angle,
-                       IntPtr center,
-                       SDL_RendererFlip flip
-               );
-
-               /* renderer refers to an SDL_Renderer*, texture to an SDL_Texture*.
-                * Internally, this function contains logic to use default values when
-                * source, destination, and/or center are passed as NULL.
-                * This overload allows for IntPtr.Zero (null) to be passed for both
-                * srcrect and dstrect.
-                */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_RenderCopyEx(
-                       IntPtr renderer,
-                       IntPtr texture,
-                       IntPtr srcrect,
-                       IntPtr dstrect,
-                       double angle,
-                       ref SDL_Point center,
-                       SDL_RendererFlip flip
-               );
-
-               /* renderer refers to an SDL_Renderer*, texture to an SDL_Texture*.
-                * Internally, this function contains logic to use default values when
-                * source, destination, and/or center are passed as NULL.
-                * This overload allows for IntPtr.Zero (null) to be passed for both
-                * srcrect and center.
-                */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_RenderCopyEx(
-                       IntPtr renderer,
-                       IntPtr texture,
-                       IntPtr srcrect,
-                       ref SDL_Rect dstrect,
-                       double angle,
-                       IntPtr center,
-                       SDL_RendererFlip flip
-               );
-
-               /* renderer refers to an SDL_Renderer*, texture to an SDL_Texture*.
-                * Internally, this function contains logic to use default values when
-                * source, destination, and/or center are passed as NULL.
-                * This overload allows for IntPtr.Zero (null) to be passed for both
-                * dstrect and center.
-                */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_RenderCopyEx(
-                       IntPtr renderer,
-                       IntPtr texture,
-                       ref SDL_Rect srcrect,
-                       IntPtr dstrect,
-                       double angle,
-                       IntPtr center,
-                       SDL_RendererFlip flip
-               );
-
-               /* renderer refers to an SDL_Renderer*, texture to an SDL_Texture*.
-                * Internally, this function contains logic to use default values when
-                * source, destination, and/or center are passed as NULL.
-                * This overload allows for IntPtr.Zero (null) to be passed for all
-                * three parameters.
-                */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_RenderCopyEx(
-                       IntPtr renderer,
-                       IntPtr texture,
-                       IntPtr srcrect,
-                       IntPtr dstrect,
-                       double angle,
-                       IntPtr center,
-                       SDL_RendererFlip flip
-               );
-
-               /* renderer refers to an SDL_Renderer* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_RenderDrawLine(
-                       IntPtr renderer,
-                       int x1,
-                       int y1,
-                       int x2,
-                       int y2
-               );
-
-               /* renderer refers to an SDL_Renderer* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_RenderDrawLines(
-                       IntPtr renderer,
-                       [In()] [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.Struct, SizeParamIndex = 2)]
-                               SDL_Point[] points,
-                       int count
-               );
-
-               /* renderer refers to an SDL_Renderer* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_RenderDrawPoint(
-                       IntPtr renderer,
-                       int x,
-                       int y
-               );
-
-               /* renderer refers to an SDL_Renderer* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_RenderDrawPoints(
-                       IntPtr renderer,
-                       [In()] [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.Struct, SizeParamIndex = 2)]
-                               SDL_Point[] points,
-                       int count
-               );
-
-               /* renderer refers to an SDL_Renderer* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_RenderDrawRect(
-                       IntPtr renderer,
-                       ref SDL_Rect rect
-               );
-
-               /* renderer refers to an SDL_Renderer*, rect to an SDL_Rect*.
-                * This overload allows for IntPtr.Zero (null) to be passed for rect.
-                */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_RenderDrawRect(
-                       IntPtr renderer,
-                       IntPtr rect
-               );
-
-               /* renderer refers to an SDL_Renderer* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_RenderDrawRects(
-                       IntPtr renderer,
-                       [In()] [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.Struct, SizeParamIndex = 2)]
-                               SDL_Rect[] rects,
-                       int count
-               );
-
-               /* renderer refers to an SDL_Renderer* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_RenderFillRect(
-                       IntPtr renderer,
-                       ref SDL_Rect rect
-               );
-
-               /* renderer refers to an SDL_Renderer*, rect to an SDL_Rect*.
-                * This overload allows for IntPtr.Zero (null) to be passed for rect.
-                */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_RenderFillRect(
-                       IntPtr renderer,
-                       IntPtr rect
-               );
-
-               /* renderer refers to an SDL_Renderer* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_RenderFillRects(
-                       IntPtr renderer,
-                       [In()] [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.Struct, SizeParamIndex = 2)]
-                               SDL_Rect[] rects,
-                       int count
-               );
-
-               /* renderer refers to an SDL_Renderer* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_RenderGetClipRect(
-                       IntPtr renderer,
-                       out SDL_Rect rect
-               );
-
-               /* renderer refers to an SDL_Renderer* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_RenderGetLogicalSize(
-                       IntPtr renderer,
-                       out int w,
-                       out int h
-               );
-
-               /* renderer refers to an SDL_Renderer* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_RenderGetScale(
-                       IntPtr renderer,
-                       out float scaleX,
-                       out float scaleY
-               );
-
-               /* renderer refers to an SDL_Renderer* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_RenderGetViewport(
-                       IntPtr renderer,
-                       out SDL_Rect rect
-               );
-
-               /* renderer refers to an SDL_Renderer* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_RenderPresent(IntPtr renderer);
-
-               /* renderer refers to an SDL_Renderer* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_RenderReadPixels(
-                       IntPtr renderer,
-                       ref SDL_Rect rect,
-                       uint format,
-                       IntPtr pixels,
-                       int pitch
-               );
-
-               /* renderer refers to an SDL_Renderer* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_RenderSetClipRect(
-                       IntPtr renderer,
-                       ref SDL_Rect rect
-               );
-
-               /* renderer refers to an SDL_Renderer*
-                * This overload allows for IntPtr.Zero (null) to be passed for rect.
-                */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_RenderSetClipRect(
-                       IntPtr renderer,
-                       IntPtr rect
-               );
-
-               /* renderer refers to an SDL_Renderer* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_RenderSetLogicalSize(
-                       IntPtr renderer,
-                       int w,
-                       int h
-               );
-
-               /* renderer refers to an SDL_Renderer* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_RenderSetScale(
-                       IntPtr renderer,
-                       float scaleX,
-                       float scaleY
-               );
-
-               /* renderer refers to an SDL_Renderer* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_RenderSetViewport(
-                       IntPtr renderer,
-                       ref SDL_Rect rect
-               );
-
-               /* renderer refers to an SDL_Renderer* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_SetRenderDrawBlendMode(
-                       IntPtr renderer,
-                       SDL_BlendMode blendMode
-               );
-
-               /* renderer refers to an SDL_Renderer* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_SetRenderDrawColor(
-                       IntPtr renderer,
-                       byte r,
-                       byte g,
-                       byte b,
-                       byte a
-               );
-
-               /* renderer refers to an SDL_Renderer*, texture to an SDL_Texture* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_SetRenderTarget(
-                       IntPtr renderer,
-                       IntPtr texture
-               );
-
-               /* texture refers to an SDL_Texture* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_SetTextureAlphaMod(
-                       IntPtr texture,
-                       byte alpha
-               );
-
-               /* texture refers to an SDL_Texture* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_SetTextureBlendMode(
-                       IntPtr texture,
-                       SDL_BlendMode blendMode
-               );
-
-               /* texture refers to an SDL_Texture* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_SetTextureColorMod(
-                       IntPtr texture,
-                       byte r,
-                       byte g,
-                       byte b
-               );
-
-               /* texture refers to an SDL_Texture* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_UnlockTexture(IntPtr texture);
-
-               /* texture refers to an SDL_Texture* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_UpdateTexture(
-                       IntPtr texture,
-                       ref SDL_Rect rect,
-                       IntPtr pixels,
-                       int pitch
-               );
-
-               /* renderer refers to an SDL_Renderer* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern SDL_bool SDL_RenderTargetSupported(
-                       IntPtr renderer
-               );
-
-               /* IntPtr refers to an SDL_Texture*, renderer to an SDL_Renderer* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern IntPtr SDL_GetRenderTarget(IntPtr renderer);
-
-               /* renderer refers to an SDL_Renderer* */
-               /* Only available in 2.0.4 */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern SDL_bool SDL_RenderIsClipEnabled(IntPtr renderer);
-
-               #endregion
-
-               #region SDL_pixels.h
-
-               public static uint SDL_DEFINE_PIXELFOURCC(byte A, byte B, byte C, byte D)
-               {
-                       return SDL_FOURCC(A, B, C, D);
-               }
-
-               public static uint SDL_DEFINE_PIXELFORMAT(
-                       SDL_PIXELTYPE_ENUM type,
-                       SDL_PIXELORDER_ENUM order,
-                       SDL_PACKEDLAYOUT_ENUM layout,
-                       byte bits,
-                       byte bytes
-               ) {
-                       return (uint) (
-                               (1 << 28) |
-                               (((byte) type) << 24) |
-                               (((byte) order) << 20) |
-                               (((byte) layout) << 16) |
-                               (bits << 8) |
-                               (bytes)
-                       );
-               }
-
-               public static byte SDL_PIXELFLAG(uint X)
-               {
-                       return (byte) ((X >> 28) & 0x0F);
-               }
-
-               public static byte SDL_PIXELTYPE(uint X)
-               {
-                       return (byte) ((X >> 24) & 0x0F);
-               }
-
-               public static byte SDL_PIXELORDER(uint X)
-               {
-                       return (byte) ((X >> 20) & 0x0F);
-               }
-
-               public static byte SDL_PIXELLAYOUT(uint X)
-               {
-                       return (byte) ((X >> 16) & 0x0F);
-               }
-
-               public static byte SDL_BITSPERPIXEL(uint X)
-               {
-                       return (byte) ((X >> 8) & 0x0F);
-               }
-
-               public static byte SDL_BYTESPERPIXEL(uint X)
-               {
-                       if (SDL_ISPIXELFORMAT_FOURCC(X))
-                       {
-                               if (    (X == SDL_PIXELFORMAT_YUY2) ||
-                                               (X == SDL_PIXELFORMAT_UYVY) ||
-                                               (X == SDL_PIXELFORMAT_YVYU)     )
-                               {
-                                       return 2;
-                               }
-                               return 1;
-                       }
-                       return (byte) (X & 0xFF);
-               }
-
-               public static bool SDL_ISPIXELFORMAT_INDEXED(uint format)
-               {
-                       if (SDL_ISPIXELFORMAT_FOURCC(format))
-                       {
-                               return false;
-                       }
-                       SDL_PIXELTYPE_ENUM pType =
-                                       (SDL_PIXELTYPE_ENUM) SDL_PIXELTYPE(format);
-                       return (
-                               pType == SDL_PIXELTYPE_ENUM.SDL_PIXELTYPE_INDEX1 ||
-                               pType == SDL_PIXELTYPE_ENUM.SDL_PIXELTYPE_INDEX4 ||
-                               pType == SDL_PIXELTYPE_ENUM.SDL_PIXELTYPE_INDEX8
-                       );
-               }
-
-               public static bool SDL_ISPIXELFORMAT_ALPHA(uint format)
-               {
-                       if (SDL_ISPIXELFORMAT_FOURCC(format))
-                       {
-                               return false;
-                       }
-                       SDL_PIXELORDER_ENUM pOrder =
-                                       (SDL_PIXELORDER_ENUM) SDL_PIXELORDER(format);
-                       return (
-                               pOrder == SDL_PIXELORDER_ENUM.SDL_PACKEDORDER_ARGB ||
-                               pOrder == SDL_PIXELORDER_ENUM.SDL_PACKEDORDER_RGBA ||
-                               pOrder == SDL_PIXELORDER_ENUM.SDL_PACKEDORDER_ABGR ||
-                               pOrder == SDL_PIXELORDER_ENUM.SDL_PACKEDORDER_BGRA
-                       );
-               }
-
-               public static bool SDL_ISPIXELFORMAT_FOURCC(uint format)
-               {
-                       return (format == 0) && (SDL_PIXELFLAG(format) != 1);
-               }
-
-               public enum SDL_PIXELTYPE_ENUM
-               {
-                       SDL_PIXELTYPE_UNKNOWN,
-                       SDL_PIXELTYPE_INDEX1,
-                       SDL_PIXELTYPE_INDEX4,
-                       SDL_PIXELTYPE_INDEX8,
-                       SDL_PIXELTYPE_PACKED8,
-                       SDL_PIXELTYPE_PACKED16,
-                       SDL_PIXELTYPE_PACKED32,
-                       SDL_PIXELTYPE_ARRAYU8,
-                       SDL_PIXELTYPE_ARRAYU16,
-                       SDL_PIXELTYPE_ARRAYU32,
-                       SDL_PIXELTYPE_ARRAYF16,
-                       SDL_PIXELTYPE_ARRAYF32
-               }
-
-               public enum SDL_PIXELORDER_ENUM
-               {
-                       /* BITMAPORDER */
-                       SDL_BITMAPORDER_NONE,
-                       SDL_BITMAPORDER_4321,
-                       SDL_BITMAPORDER_1234,
-                       /* PACKEDORDER */
-                       SDL_PACKEDORDER_NONE = 0,
-                       SDL_PACKEDORDER_XRGB,
-                       SDL_PACKEDORDER_RGBX,
-                       SDL_PACKEDORDER_ARGB,
-                       SDL_PACKEDORDER_RGBA,
-                       SDL_PACKEDORDER_XBGR,
-                       SDL_PACKEDORDER_BGRX,
-                       SDL_PACKEDORDER_ABGR,
-                       SDL_PACKEDORDER_BGRA,
-                       /* ARRAYORDER */
-                       SDL_ARRAYORDER_NONE = 0,
-                       SDL_ARRAYORDER_RGB,
-                       SDL_ARRAYORDER_RGBA,
-                       SDL_ARRAYORDER_ARGB,
-                       SDL_ARRAYORDER_BGR,
-                       SDL_ARRAYORDER_BGRA,
-                       SDL_ARRAYORDER_ABGR
-               }
-
-               public enum SDL_PACKEDLAYOUT_ENUM
-               {
-                       SDL_PACKEDLAYOUT_NONE,
-                       SDL_PACKEDLAYOUT_332,
-                       SDL_PACKEDLAYOUT_4444,
-                       SDL_PACKEDLAYOUT_1555,
-                       SDL_PACKEDLAYOUT_5551,
-                       SDL_PACKEDLAYOUT_565,
-                       SDL_PACKEDLAYOUT_8888,
-                       SDL_PACKEDLAYOUT_2101010,
-                       SDL_PACKEDLAYOUT_1010102
-               }
-
-               public static readonly uint SDL_PIXELFORMAT_UNKNOWN = 0;
-               public static readonly uint SDL_PIXELFORMAT_INDEX1LSB =
-                       SDL_DEFINE_PIXELFORMAT(
-                               SDL_PIXELTYPE_ENUM.SDL_PIXELTYPE_INDEX1,
-                               SDL_PIXELORDER_ENUM.SDL_BITMAPORDER_4321,
-                               0,
-                               1, 0
-                       );
-               public static readonly uint SDL_PIXELFORMAT_INDEX1MSB =
-                       SDL_DEFINE_PIXELFORMAT(
-                               SDL_PIXELTYPE_ENUM.SDL_PIXELTYPE_INDEX1,
-                               SDL_PIXELORDER_ENUM.SDL_BITMAPORDER_1234,
-                               0,
-                               1, 0
-                       );
-               public static readonly uint SDL_PIXELFORMAT_INDEX4LSB =
-                       SDL_DEFINE_PIXELFORMAT(
-                               SDL_PIXELTYPE_ENUM.SDL_PIXELTYPE_INDEX4,
-                               SDL_PIXELORDER_ENUM.SDL_BITMAPORDER_4321,
-                               0,
-                               4, 0
-                       );
-               public static readonly uint SDL_PIXELFORMAT_INDEX4MSB =
-                       SDL_DEFINE_PIXELFORMAT(
-                               SDL_PIXELTYPE_ENUM.SDL_PIXELTYPE_INDEX4,
-                               SDL_PIXELORDER_ENUM.SDL_BITMAPORDER_1234,
-                               0,
-                               4, 0
-                       );
-               public static readonly uint SDL_PIXELFORMAT_INDEX8 =
-                       SDL_DEFINE_PIXELFORMAT(
-                               SDL_PIXELTYPE_ENUM.SDL_PIXELTYPE_INDEX8,
-                               0,
-                               0,
-                               8, 1
-                       );
-               public static readonly uint SDL_PIXELFORMAT_RGB332 =
-                       SDL_DEFINE_PIXELFORMAT(
-                               SDL_PIXELTYPE_ENUM.SDL_PIXELTYPE_PACKED8,
-                               SDL_PIXELORDER_ENUM.SDL_PACKEDORDER_XRGB,
-                               SDL_PACKEDLAYOUT_ENUM.SDL_PACKEDLAYOUT_332,
-                               8, 1
-                       );
-               public static readonly uint SDL_PIXELFORMAT_RGB444 =
-                       SDL_DEFINE_PIXELFORMAT(
-                               SDL_PIXELTYPE_ENUM.SDL_PIXELTYPE_PACKED16,
-                               SDL_PIXELORDER_ENUM.SDL_PACKEDORDER_XRGB,
-                               SDL_PACKEDLAYOUT_ENUM.SDL_PACKEDLAYOUT_4444,
-                               12, 2
-                       );
-               public static readonly uint SDL_PIXELFORMAT_RGB555 =
-                       SDL_DEFINE_PIXELFORMAT(
-                               SDL_PIXELTYPE_ENUM.SDL_PIXELTYPE_PACKED16,
-                               SDL_PIXELORDER_ENUM.SDL_PACKEDORDER_XRGB,
-                               SDL_PACKEDLAYOUT_ENUM.SDL_PACKEDLAYOUT_1555,
-                               15, 2
-                       );
-               public static readonly uint SDL_PIXELFORMAT_BGR555 =
-                       SDL_DEFINE_PIXELFORMAT(
-                               SDL_PIXELTYPE_ENUM.SDL_PIXELTYPE_INDEX1,
-                               SDL_PIXELORDER_ENUM.SDL_BITMAPORDER_4321,
-                               SDL_PACKEDLAYOUT_ENUM.SDL_PACKEDLAYOUT_1555,
-                               15, 2
-                       );
-               public static readonly uint SDL_PIXELFORMAT_ARGB4444 =
-                       SDL_DEFINE_PIXELFORMAT(
-                               SDL_PIXELTYPE_ENUM.SDL_PIXELTYPE_PACKED16,
-                               SDL_PIXELORDER_ENUM.SDL_PACKEDORDER_ARGB,
-                               SDL_PACKEDLAYOUT_ENUM.SDL_PACKEDLAYOUT_4444,
-                               16, 2
-                       );
-               public static readonly uint SDL_PIXELFORMAT_RGBA4444 =
-                       SDL_DEFINE_PIXELFORMAT(
-                               SDL_PIXELTYPE_ENUM.SDL_PIXELTYPE_PACKED16,
-                               SDL_PIXELORDER_ENUM.SDL_PACKEDORDER_RGBA,
-                               SDL_PACKEDLAYOUT_ENUM.SDL_PACKEDLAYOUT_4444,
-                               16, 2
-                       );
-               public static readonly uint SDL_PIXELFORMAT_ABGR4444 =
-                       SDL_DEFINE_PIXELFORMAT(
-                               SDL_PIXELTYPE_ENUM.SDL_PIXELTYPE_PACKED16,
-                               SDL_PIXELORDER_ENUM.SDL_PACKEDORDER_ABGR,
-                               SDL_PACKEDLAYOUT_ENUM.SDL_PACKEDLAYOUT_4444,
-                               16, 2
-                       );
-               public static readonly uint SDL_PIXELFORMAT_BGRA4444 =
-                       SDL_DEFINE_PIXELFORMAT(
-                               SDL_PIXELTYPE_ENUM.SDL_PIXELTYPE_PACKED16,
-                               SDL_PIXELORDER_ENUM.SDL_PACKEDORDER_BGRA,
-                               SDL_PACKEDLAYOUT_ENUM.SDL_PACKEDLAYOUT_4444,
-                               16, 2
-                       );
-               public static readonly uint SDL_PIXELFORMAT_ARGB1555 =
-                       SDL_DEFINE_PIXELFORMAT(
-                               SDL_PIXELTYPE_ENUM.SDL_PIXELTYPE_PACKED16,
-                               SDL_PIXELORDER_ENUM.SDL_PACKEDORDER_ARGB,
-                               SDL_PACKEDLAYOUT_ENUM.SDL_PACKEDLAYOUT_1555,
-                               16, 2
-                       );
-               public static readonly uint SDL_PIXELFORMAT_RGBA5551 =
-                       SDL_DEFINE_PIXELFORMAT(
-                               SDL_PIXELTYPE_ENUM.SDL_PIXELTYPE_PACKED16,
-                               SDL_PIXELORDER_ENUM.SDL_PACKEDORDER_RGBA,
-                               SDL_PACKEDLAYOUT_ENUM.SDL_PACKEDLAYOUT_5551,
-                               16, 2
-                       );
-               public static readonly uint SDL_PIXELFORMAT_ABGR1555 =
-                       SDL_DEFINE_PIXELFORMAT(
-                               SDL_PIXELTYPE_ENUM.SDL_PIXELTYPE_PACKED16,
-                               SDL_PIXELORDER_ENUM.SDL_PACKEDORDER_ABGR,
-                               SDL_PACKEDLAYOUT_ENUM.SDL_PACKEDLAYOUT_1555,
-                               16, 2
-                       );
-               public static readonly uint SDL_PIXELFORMAT_BGRA5551 =
-                       SDL_DEFINE_PIXELFORMAT(
-                               SDL_PIXELTYPE_ENUM.SDL_PIXELTYPE_PACKED16,
-                               SDL_PIXELORDER_ENUM.SDL_PACKEDORDER_BGRA,
-                               SDL_PACKEDLAYOUT_ENUM.SDL_PACKEDLAYOUT_5551,
-                               16, 2
-                       );
-               public static readonly uint SDL_PIXELFORMAT_RGB565 =
-                       SDL_DEFINE_PIXELFORMAT(
-                               SDL_PIXELTYPE_ENUM.SDL_PIXELTYPE_PACKED16,
-                               SDL_PIXELORDER_ENUM.SDL_PACKEDORDER_XRGB,
-                               SDL_PACKEDLAYOUT_ENUM.SDL_PACKEDLAYOUT_565,
-                               16, 2
-                       );
-               public static readonly uint SDL_PIXELFORMAT_BGR565 =
-                       SDL_DEFINE_PIXELFORMAT(
-                               SDL_PIXELTYPE_ENUM.SDL_PIXELTYPE_PACKED16,
-                               SDL_PIXELORDER_ENUM.SDL_PACKEDORDER_XBGR,
-                               SDL_PACKEDLAYOUT_ENUM.SDL_PACKEDLAYOUT_565,
-                               16, 2
-                       );
-               public static readonly uint SDL_PIXELFORMAT_RGB24 =
-                       SDL_DEFINE_PIXELFORMAT(
-                               SDL_PIXELTYPE_ENUM.SDL_PIXELTYPE_ARRAYU8,
-                               SDL_PIXELORDER_ENUM.SDL_ARRAYORDER_RGB,
-                               0,
-                               24, 3
-                       );
-               public static readonly uint SDL_PIXELFORMAT_BGR24 =
-                       SDL_DEFINE_PIXELFORMAT(
-                               SDL_PIXELTYPE_ENUM.SDL_PIXELTYPE_ARRAYU8,
-                               SDL_PIXELORDER_ENUM.SDL_ARRAYORDER_BGR,
-                               0,
-                               24, 3
-                       );
-               public static readonly uint SDL_PIXELFORMAT_RGB888 =
-                       SDL_DEFINE_PIXELFORMAT(
-                               SDL_PIXELTYPE_ENUM.SDL_PIXELTYPE_PACKED32,
-                               SDL_PIXELORDER_ENUM.SDL_PACKEDORDER_XRGB,
-                               SDL_PACKEDLAYOUT_ENUM.SDL_PACKEDLAYOUT_8888,
-                               24, 4
-                       );
-               public static readonly uint SDL_PIXELFORMAT_RGBX8888 =
-                       SDL_DEFINE_PIXELFORMAT(
-                               SDL_PIXELTYPE_ENUM.SDL_PIXELTYPE_PACKED32,
-                               SDL_PIXELORDER_ENUM.SDL_PACKEDORDER_RGBX,
-                               SDL_PACKEDLAYOUT_ENUM.SDL_PACKEDLAYOUT_8888,
-                               24, 4
-                       );
-               public static readonly uint SDL_PIXELFORMAT_BGR888 =
-                       SDL_DEFINE_PIXELFORMAT(
-                               SDL_PIXELTYPE_ENUM.SDL_PIXELTYPE_PACKED32,
-                               SDL_PIXELORDER_ENUM.SDL_PACKEDORDER_XBGR,
-                               SDL_PACKEDLAYOUT_ENUM.SDL_PACKEDLAYOUT_8888,
-                               24, 4
-                       );
-               public static readonly uint SDL_PIXELFORMAT_BGRX8888 =
-                       SDL_DEFINE_PIXELFORMAT(
-                               SDL_PIXELTYPE_ENUM.SDL_PIXELTYPE_PACKED32,
-                               SDL_PIXELORDER_ENUM.SDL_PACKEDORDER_BGRX,
-                               SDL_PACKEDLAYOUT_ENUM.SDL_PACKEDLAYOUT_8888,
-                               24, 4
-                       );
-               public static readonly uint SDL_PIXELFORMAT_ARGB8888 =
-                       SDL_DEFINE_PIXELFORMAT(
-                               SDL_PIXELTYPE_ENUM.SDL_PIXELTYPE_PACKED32,
-                               SDL_PIXELORDER_ENUM.SDL_PACKEDORDER_ARGB,
-                               SDL_PACKEDLAYOUT_ENUM.SDL_PACKEDLAYOUT_8888,
-                               32, 4
-                       );
-               public static readonly uint SDL_PIXELFORMAT_RGBA8888 =
-                       SDL_DEFINE_PIXELFORMAT(
-                               SDL_PIXELTYPE_ENUM.SDL_PIXELTYPE_PACKED32,
-                               SDL_PIXELORDER_ENUM.SDL_PACKEDORDER_RGBA,
-                               SDL_PACKEDLAYOUT_ENUM.SDL_PACKEDLAYOUT_8888,
-                               32, 4
-                       );
-               public static readonly uint SDL_PIXELFORMAT_ABGR8888 =
-                       SDL_DEFINE_PIXELFORMAT(
-                               SDL_PIXELTYPE_ENUM.SDL_PIXELTYPE_PACKED32,
-                               SDL_PIXELORDER_ENUM.SDL_PACKEDORDER_ABGR,
-                               SDL_PACKEDLAYOUT_ENUM.SDL_PACKEDLAYOUT_8888,
-                               32, 4
-                       );
-               public static readonly uint SDL_PIXELFORMAT_BGRA8888 =
-                       SDL_DEFINE_PIXELFORMAT(
-                               SDL_PIXELTYPE_ENUM.SDL_PIXELTYPE_PACKED32,
-                               SDL_PIXELORDER_ENUM.SDL_PACKEDORDER_BGRA,
-                               SDL_PACKEDLAYOUT_ENUM.SDL_PACKEDLAYOUT_8888,
-                               32, 4
-                       );
-               public static readonly uint SDL_PIXELFORMAT_ARGB2101010 =
-                       SDL_DEFINE_PIXELFORMAT(
-                               SDL_PIXELTYPE_ENUM.SDL_PIXELTYPE_PACKED32,
-                               SDL_PIXELORDER_ENUM.SDL_PACKEDORDER_ARGB,
-                               SDL_PACKEDLAYOUT_ENUM.SDL_PACKEDLAYOUT_2101010,
-                               32, 4
-                       );
-               public static readonly uint SDL_PIXELFORMAT_YV12 =
-                       SDL_DEFINE_PIXELFOURCC(
-                               (byte) 'Y', (byte) 'V', (byte) '1', (byte) '2'
-                       );
-               public static readonly uint SDL_PIXELFORMAT_IYUV =
-                       SDL_DEFINE_PIXELFOURCC(
-                               (byte) 'I', (byte) 'Y', (byte) 'U', (byte) 'V'
-                       );
-               public static readonly uint SDL_PIXELFORMAT_YUY2 =
-                       SDL_DEFINE_PIXELFOURCC(
-                               (byte) 'Y', (byte) 'U', (byte) 'Y', (byte) '2'
-                       );
-               public static readonly uint SDL_PIXELFORMAT_UYVY =
-                       SDL_DEFINE_PIXELFOURCC(
-                               (byte) 'U', (byte) 'Y', (byte) 'V', (byte) 'Y'
-                       );
-               public static readonly uint SDL_PIXELFORMAT_YVYU =
-                       SDL_DEFINE_PIXELFOURCC(
-                               (byte) 'Y', (byte) 'V', (byte) 'Y', (byte) 'U'
-                       );
-
-               [StructLayout(LayoutKind.Sequential)]
-               public struct SDL_Color
-               {
-                       public byte r;
-                       public byte g;
-                       public byte b;
-                       public byte a;
-               }
-
-               [StructLayout(LayoutKind.Sequential)]
-               public struct SDL_Palette
-               {
-                       public int ncolors;
-                       public IntPtr colors;
-                       public int version;
-                       public int refcount;
-               }
-
-               [StructLayout(LayoutKind.Sequential)]
-               public struct SDL_PixelFormat
-               {
-                       public uint format;
-                       public IntPtr palette; // SDL_Palette*
-                       public byte BitsPerPixel;
-                       public byte BytesPerPixel;
-                       public uint Rmask;
-                       public uint Gmask;
-                       public uint Bmask;
-                       public uint Amask;
-                       public byte Rloss;
-                       public byte Gloss;
-                       public byte Bloss;
-                       public byte Aloss;
-                       public byte Rshift;
-                       public byte Gshift;
-                       public byte Bshift;
-                       public byte Ashift;
-                       public int refcount;
-                       public IntPtr next; // SDL_PixelFormat*
-               }
-
-               /* IntPtr refers to an SDL_PixelFormat* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern IntPtr SDL_AllocFormat(uint pixel_format);
-
-               /* IntPtr refers to an SDL_Palette* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern IntPtr SDL_AllocPalette(int ncolors);
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_CalculateGammaRamp(
-                       float gamma,
-                       [Out()] [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.U2, SizeConst = 256)]
-                               ushort[] ramp
-               );
-
-               /* format refers to an SDL_PixelFormat* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_FreeFormat(IntPtr format);
-
-               /* palette refers to an SDL_Palette* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_FreePalette(IntPtr palette);
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               [return : MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler), MarshalCookie = LPUtf8StrMarshaler.LeaveAllocated)]
-               public static extern string SDL_GetPixelFormatName(
-                       uint format
-               );
-
-               /* format refers to an SDL_PixelFormat* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_GetRGB(
-                       uint pixel,
-                       IntPtr format,
-                       out byte r,
-                       out byte g,
-                       out byte b
-               );
-
-               /* format refers to an SDL_PixelFormat* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_GetRGBA(
-                       uint pixel,
-                       IntPtr format,
-                       out byte r,
-                       out byte g,
-                       out byte b,
-                       out byte a
-               );
-
-               /* format refers to an SDL_PixelFormat* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern uint SDL_MapRGB(
-                       IntPtr format,
-                       byte r,
-                       byte g,
-                       byte b
-               );
-
-               /* format refers to an SDL_PixelFormat* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern uint SDL_MapRGBA(
-                       IntPtr format,
-                       byte r,
-                       byte g,
-                       byte b,
-                       byte a
-               );
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern uint SDL_MasksToPixelFormatEnum(
-                       int bpp,
-                       uint Rmask,
-                       uint Gmask,
-                       uint Bmask,
-                       uint Amask
-               );
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern SDL_bool SDL_PixelFormatEnumToMasks(
-                       uint format,
-                       out int bpp,
-                       out uint Rmask,
-                       out uint Gmask,
-                       out uint Bmask,
-                       out uint Amask
-               );
-
-               /* palette refers to an SDL_Palette* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_SetPaletteColors(
-                       IntPtr palette,
-                       [In()] [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.Struct)]
-                               SDL_Color[] colors,
-                       int firstcolor,
-                       int ncolors
-               );
-
-               /* format and palette refer to an SDL_PixelFormat* and SDL_Palette* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_SetPixelFormatPalette(
-                       IntPtr format,
-                       IntPtr palette
-               );
-
-               #endregion
-
-               #region SDL_rect.h
-
-               [StructLayout(LayoutKind.Sequential)]
-               public struct SDL_Point
-               {
-                       public int x;
-                       public int y;
-               }
-
-               [StructLayout(LayoutKind.Sequential)]
-               public struct SDL_Rect
-               {
-                       public int x;
-                       public int y;
-                       public int w;
-                       public int h;
-               }
-
-               /* Only available in 2.0.4 */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern SDL_bool SDL_PointInRect(ref SDL_Point p, ref SDL_Rect r);
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern SDL_bool SDL_EnclosePoints(
-                       [In()] [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.Struct, SizeParamIndex = 1)]
-                               SDL_Point[] points,
-                       int count,
-                       ref SDL_Rect clip,
-                       out SDL_Rect result
-               );
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern SDL_bool SDL_HasIntersection(
-                       ref SDL_Rect A,
-                       ref SDL_Rect B
-               );
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern SDL_bool SDL_IntersectRect(
-                       ref SDL_Rect A,
-                       ref SDL_Rect B,
-                       out SDL_Rect result
-               );
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern SDL_bool SDL_IntersectRectAndLine(
-                       ref SDL_Rect rect,
-                       ref int X1,
-                       ref int Y1,
-                       ref int X2,
-                       ref int Y2
-               );
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern SDL_bool SDL_RectEmpty(ref SDL_Rect rect);
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern SDL_bool SDL_RectEquals(
-                       ref SDL_Rect A,
-                       ref SDL_Rect B
-               );
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_UnionRect(
-                       ref SDL_Rect A,
-                       ref SDL_Rect B,
-                       out SDL_Rect result
-               );
-
-               #endregion
-
-               #region SDL_surface.h
-
-               public const uint SDL_SWSURFACE =       0x00000000;
-               public const uint SDL_PREALLOC =        0x00000001;
-               public const uint SDL_RLEACCEL =        0x00000002;
-               public const uint SDL_DONTFREE =        0x00000004;
-
-               [StructLayout(LayoutKind.Sequential)]
-               public struct SDL_Surface
-               {
-                       public uint flags;
-                       public IntPtr format; // SDL_PixelFormat*
-                       public int w;
-                       public int h;
-                       public int pitch;
-                       public IntPtr pixels; // void*
-                       public IntPtr userdata; // void*
-                       public int locked;
-                       public IntPtr lock_data; // void*
-                       public SDL_Rect clip_rect;
-                       public IntPtr map; // SDL_BlitMap*
-                       public int refcount;
-               }
-
-               /* surface refers to an SDL_Surface* */
-               public static bool SDL_MUSTLOCK(IntPtr surface)
-               {
-                       SDL_Surface sur;
-                       sur = (SDL_Surface) Marshal.PtrToStructure(
-                               surface,
-                               typeof(SDL_Surface)
-                       );
-                       return (sur.flags & SDL_RLEACCEL) != 0;
-               }
-
-               /* src and dst refer to an SDL_Surface* */
-               [DllImport(nativeLibName, EntryPoint = "SDL_UpperBlit", CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_BlitSurface(
-                       IntPtr src,
-                       ref SDL_Rect srcrect,
-                       IntPtr dst,
-                       ref SDL_Rect dstrect
-               );
-
-               /* src and dst refer to an SDL_Surface*
-                * Internally, this function contains logic to use default values when
-                * source and destination rectangles are passed as NULL.
-                * This overload allows for IntPtr.Zero (null) to be passed for srcrect.
-                */
-               [DllImport(nativeLibName, EntryPoint = "SDL_UpperBlit", CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_BlitSurface(
-                       IntPtr src,
-                       IntPtr srcrect,
-                       IntPtr dst,
-                       ref SDL_Rect dstrect
-               );
-
-               /* src and dst refer to an SDL_Surface*
-                * Internally, this function contains logic to use default values when
-                * source and destination rectangles are passed as NULL.
-                * This overload allows for IntPtr.Zero (null) to be passed for dstrect.
-                */
-               [DllImport(nativeLibName, EntryPoint = "SDL_UpperBlit", CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_BlitSurface(
-                       IntPtr src,
-                       ref SDL_Rect srcrect,
-                       IntPtr dst,
-                       IntPtr dstrect
-               );
-
-               /* src and dst refer to an SDL_Surface*
-                * Internally, this function contains logic to use default values when
-                * source and destination rectangles are passed as NULL.
-                * This overload allows for IntPtr.Zero (null) to be passed for both SDL_Rects.
-                */
-               [DllImport(nativeLibName, EntryPoint = "SDL_UpperBlit", CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_BlitSurface(
-                       IntPtr src,
-                       IntPtr srcrect,
-                       IntPtr dst,
-                       IntPtr dstrect
-               );
-
-               /* src and dst refer to an SDL_Surface* */
-               [DllImport(nativeLibName, EntryPoint = "SDL_UpperBlitScaled", CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_BlitScaled(
-                       IntPtr src,
-                       ref SDL_Rect srcrect,
-                       IntPtr dst,
-                       ref SDL_Rect dstrect
-               );
-
-               /* src and dst refer to an SDL_Surface*
-                * Internally, this function contains logic to use default values when
-                * source and destination rectangles are passed as NULL.
-                * This overload allows for IntPtr.Zero (null) to be passed for srcrect.
-                */
-               [DllImport(nativeLibName, EntryPoint = "SDL_UpperBlitScaled", CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_BlitScaled(
-                       IntPtr src,
-                       IntPtr srcrect,
-                       IntPtr dst,
-                       ref SDL_Rect dstrect
-               );
-
-               /* src and dst refer to an SDL_Surface*
-                * Internally, this function contains logic to use default values when
-                * source and destination rectangles are passed as NULL.
-                * This overload allows for IntPtr.Zero (null) to be passed for dstrect.
-                */
-               [DllImport(nativeLibName, EntryPoint = "SDL_UpperBlitScaled", CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_BlitScaled(
-                       IntPtr src,
-                       ref SDL_Rect srcrect,
-                       IntPtr dst,
-                       IntPtr dstrect
-               );
-
-               /* src and dst refer to an SDL_Surface*
-                * Internally, this function contains logic to use default values when
-                * source and destination rectangles are passed as NULL.
-                * This overload allows for IntPtr.Zero (null) to be passed for both SDL_Rects.
-                */
-               [DllImport(nativeLibName, EntryPoint = "SDL_UpperBlitScaled", CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_BlitScaled(
-                       IntPtr src,
-                       IntPtr srcrect,
-                       IntPtr dst,
-                       IntPtr dstrect
-               );
-
-               /* src and dst are void* pointers */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_ConvertPixels(
-                       int width,
-                       int height,
-                       uint src_format,
-                       IntPtr src,
-                       int src_pitch,
-                       uint dst_format,
-                       IntPtr dst,
-                       int dst_pitch
-               );
-
-               /* IntPtr refers to an SDL_Surface*
-                * src refers to an SDL_Surface*
-                * fmt refers to an SDL_PixelFormat*
-                */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern IntPtr SDL_ConvertSurface(
-                       IntPtr src,
-                       IntPtr fmt,
-                       uint flags
-               );
-
-               /* IntPtr refers to an SDL_Surface*, src to an SDL_Surface* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern IntPtr SDL_ConvertSurfaceFormat(
-                       IntPtr src,
-                       uint pixel_format,
-                       uint flags
-               );
-
-               /* IntPtr refers to an SDL_Surface* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern IntPtr SDL_CreateRGBSurface(
-                       uint flags,
-                       int width,
-                       int height,
-                       int depth,
-                       uint Rmask,
-                       uint Gmask,
-                       uint Bmask,
-                       uint Amask
-               );
-
-               /* IntPtr refers to an SDL_Surface*, pixels to a void* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern IntPtr SDL_CreateRGBSurfaceFrom(
-                       IntPtr pixels,
-                       int width,
-                       int height,
-                       int depth,
-                       int pitch,
-                       uint Rmask,
-                       uint Gmask,
-                       uint Bmask,
-                       uint Amask
-               );
-
-               /* dst refers to an SDL_Surface* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_FillRect(
-                       IntPtr dst,
-                       ref SDL_Rect rect,
-                       uint color
-               );
-
-               /* dst refers to an SDL_Surface*.
-                * This overload allows passing NULL to rect.
-                */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_FillRect(
-                       IntPtr dst,
-                       IntPtr rect,
-                       uint color
-               );
-
-               /* dst refers to an SDL_Surface* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_FillRects(
-                       IntPtr dst,
-                       [In()] [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.Struct, SizeParamIndex = 2)]
-                               SDL_Rect[] rects,
-                       int count,
-                       uint color
-               );
-
-               /* surface refers to an SDL_Surface* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_FreeSurface(IntPtr surface);
-
-               /* surface refers to an SDL_Surface* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_GetClipRect(
-                       IntPtr surface,
-                       out SDL_Rect rect
-               );
-
-               /* surface refers to an SDL_Surface* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_GetColorKey(
-                       IntPtr surface,
-                       out uint key
-               );
-
-               /* surface refers to an SDL_Surface* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_GetSurfaceAlphaMod(
-                       IntPtr surface,
-                       out byte alpha
-               );
-
-               /* surface refers to an SDL_Surface* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_GetSurfaceBlendMode(
-                       IntPtr surface,
-                       out SDL_BlendMode blendMode
-               );
-
-               /* surface refers to an SDL_Surface* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_GetSurfaceColorMod(
-                       IntPtr surface,
-                       out byte r,
-                       out byte g,
-                       out byte b
-               );
-
-               /* These are for SDL_LoadBMP, which is a macro in the SDL headers. */
-               /* IntPtr refers to an SDL_Surface* */
-               /* THIS IS AN RWops FUNCTION! */
-               [DllImport(nativeLibName, EntryPoint = "SDL_LoadBMP_RW", CallingConvention = CallingConvention.Cdecl)]
-               private static extern IntPtr INTERNAL_SDL_LoadBMP_RW(
-                       IntPtr src,
-                       int freesrc
-               );
-               public static IntPtr SDL_LoadBMP(string file)
-               {
-                       IntPtr rwops = INTERNAL_SDL_RWFromFile(file, "rb");
-                       return INTERNAL_SDL_LoadBMP_RW(rwops, 1);
-               }
-
-               /* surface refers to an SDL_Surface* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_LockSurface(IntPtr surface);
-
-               /* src and dst refer to an SDL_Surface* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_LowerBlit(
-                       IntPtr src,
-                       ref SDL_Rect srcrect,
-                       IntPtr dst,
-                       ref SDL_Rect dstrect
-               );
-
-               /* src and dst refer to an SDL_Surface* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_LowerBlitScaled(
-                       IntPtr src,
-                       ref SDL_Rect srcrect,
-                       IntPtr dst,
-                       ref SDL_Rect dstrect
-               );
-
-               /* These are for SDL_SaveBMP, which is a macro in the SDL headers. */
-               /* IntPtr refers to an SDL_Surface* */
-               /* THIS IS AN RWops FUNCTION! */
-               [DllImport(nativeLibName, EntryPoint = "SDL_SaveBMP_RW", CallingConvention = CallingConvention.Cdecl)]
-               private static extern int INTERNAL_SDL_SaveBMP_RW(
-                       IntPtr surface,
-                       IntPtr src,
-                       int freesrc
-               );
-               public static int SDL_SaveBMP(IntPtr surface, string file)
-               {
-                       IntPtr rwops = INTERNAL_SDL_RWFromFile(file, "wb");
-                       return INTERNAL_SDL_SaveBMP_RW(surface, rwops, 1);
-               }
-
-               /* surface refers to an SDL_Surface* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern SDL_bool SDL_SetClipRect(
-                       IntPtr surface,
-                       ref SDL_Rect rect
-               );
-
-               /* surface refers to an SDL_Surface* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_SetColorKey(
-                       IntPtr surface,
-                       int flag,
-                       uint key
-               );
-
-               /* surface refers to an SDL_Surface* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_SetSurfaceAlphaMod(
-                       IntPtr surface,
-                       byte alpha
-               );
-
-               /* surface refers to an SDL_Surface* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_SetSurfaceBlendMode(
-                       IntPtr surface,
-                       SDL_BlendMode blendMode
-               );
-
-               /* surface refers to an SDL_Surface* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_SetSurfaceColorMod(
-                       IntPtr surface,
-                       byte r,
-                       byte g,
-                       byte b
-               );
-
-               /* surface refers to an SDL_Surface*, palette to an SDL_Palette* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_SetSurfacePalette(
-                       IntPtr surface,
-                       IntPtr palette
-               );
-
-               /* surface refers to an SDL_Surface* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_SetSurfaceRLE(
-                       IntPtr surface,
-                       int flag
-               );
-
-               /* src and dst refer to an SDL_Surface* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_SoftStretch(
-                       IntPtr src,
-                       ref SDL_Rect srcrect,
-                       IntPtr dst,
-                       ref SDL_Rect dstrect
-               );
-
-               /* surface refers to an SDL_Surface* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_UnlockSurface(IntPtr surface);
-
-               /* src and dst refer to an SDL_Surface* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_UpperBlit(
-                       IntPtr src,
-                       ref SDL_Rect srcrect,
-                       IntPtr dst,
-                       ref SDL_Rect dstrect
-               );
-
-               /* src and dst refer to an SDL_Surface* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_UpperBlitScaled(
-                       IntPtr src,
-                       ref SDL_Rect srcrect,
-                       IntPtr dst,
-                       ref SDL_Rect dstrect
-               );
-
-               #endregion
-
-               #region SDL_clipboard.h
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern SDL_bool SDL_HasClipboardText();
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               [return : MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler), MarshalCookie = LPUtf8StrMarshaler.LeaveAllocated)]
-               public static extern string SDL_GetClipboardText();
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_SetClipboardText(
-                       [In()] [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler))]
-                               string text
-               );
-
-               #endregion
-
-               #region SDL_events.h
-
-               /* General keyboard/mouse state definitions. */
-               public const byte SDL_PRESSED =         1;
-               public const byte SDL_RELEASED =        0;
-
-               /* Default size is according to SDL2 default. */
-               public const int SDL_TEXTEDITINGEVENT_TEXT_SIZE = 32;
-               public const int SDL_TEXTINPUTEVENT_TEXT_SIZE = 32;
-
-               /* The types of events that can be delivered. */
-               public enum SDL_EventType : uint
-               {
-                       SDL_FIRSTEVENT =                0,
-
-                       /* Application events */
-                       SDL_QUIT =                      0x100,
-
-                       /* Window events */
-                       SDL_WINDOWEVENT =               0x200,
-                       SDL_SYSWMEVENT,
-
-                       /* Keyboard events */
-                       SDL_KEYDOWN =                   0x300,
-                       SDL_KEYUP,
-                       SDL_TEXTEDITING,
-                       SDL_TEXTINPUT,
-
-                       /* Mouse events */
-                       SDL_MOUSEMOTION =               0x400,
-                       SDL_MOUSEBUTTONDOWN,
-                       SDL_MOUSEBUTTONUP,
-                       SDL_MOUSEWHEEL,
-
-                       /* Joystick events */
-                       SDL_JOYAXISMOTION =             0x600,
-                       SDL_JOYBALLMOTION,
-                       SDL_JOYHATMOTION,
-                       SDL_JOYBUTTONDOWN,
-                       SDL_JOYBUTTONUP,
-                       SDL_JOYDEVICEADDED,
-                       SDL_JOYDEVICEREMOVED,
-
-                       /* Game controller events */
-                       SDL_CONTROLLERAXISMOTION =      0x650,
-                       SDL_CONTROLLERBUTTONDOWN,
-                       SDL_CONTROLLERBUTTONUP,
-                       SDL_CONTROLLERDEVICEADDED,
-                       SDL_CONTROLLERDEVICEREMOVED,
-                       SDL_CONTROLLERDEVICEREMAPPED,
-
-                       /* Touch events */
-                       SDL_FINGERDOWN =                0x700,
-                       SDL_FINGERUP,
-                       SDL_FINGERMOTION,
-
-                       /* Gesture events */
-                       SDL_DOLLARGESTURE =             0x800,
-                       SDL_DOLLARRECORD,
-                       SDL_MULTIGESTURE,
-
-                       /* Clipboard events */
-                       SDL_CLIPBOARDUPDATE =           0x900,
-
-                       /* Drag and drop events */
-                       SDL_DROPFILE =                  0x1000,
-
-                       /* Audio hotplug events */
-                       /* Only available in SDL 2.0.4 or higher */
-                       SDL_AUDIODEVICEADDED =          0x1100,
-                       SDL_AUDIODEVICEREMOVED,
-
-                       /* Render events */
-                       /* Only available in SDL 2.0.2 or higher */
-                       SDL_RENDER_TARGETS_RESET =      0x2000,
-                       /* Only available in SDL 2.0.4 or higher */
-                       SDL_RENDER_DEVICE_RESET,
-
-                       /* Events SDL_USEREVENT through SDL_LASTEVENT are for
-                        * your use, and should be allocated with
-                        * SDL_RegisterEvents()
-                        */
-                       SDL_USEREVENT =                 0x8000,
-
-                       /* The last event, used for bouding arrays. */
-                       SDL_LASTEVENT =                 0xFFFF
-               }
-
-               /* Only available in 2.0.4 or higher */
-               public enum SDL_MouseWheelDirection : uint
-               {
-                       SDL_MOUSEHWEEL_NORMAL,
-                       SDL_MOUSEWHEEL_FLIPPED
-               }
-
-               /* Fields shared by every event */
-               [StructLayout(LayoutKind.Sequential)]
-               public struct SDL_GenericEvent
-               {
-                       public SDL_EventType type;
-                       public UInt32 timestamp;
-               }
-
-// Ignore private members used for padding in this struct
-#pragma warning disable 0169
-               /* Window state change event data (event.window.*) */
-               [StructLayout(LayoutKind.Sequential)]
-               public struct SDL_WindowEvent
-               {
-                       public SDL_EventType type;
-                       public UInt32 timestamp;
-                       public UInt32 windowID;
-                       public SDL_WindowEventID windowEvent; // event, lolC#
-                       private byte padding1;
-                       private byte padding2;
-                       private byte padding3;
-                       public Int32 data1;
-                       public Int32 data2;
-               }
-#pragma warning restore 0169
-
-// Ignore private members used for padding in this struct
-#pragma warning disable 0169
-               /* Keyboard button event structure (event.key.*) */
-               [StructLayout(LayoutKind.Sequential)]
-               public struct SDL_KeyboardEvent
-               {
-                       public SDL_EventType type;
-                       public UInt32 timestamp;
-                       public UInt32 windowID;
-                       public byte state;
-                       public byte repeat; /* non-zero if this is a repeat */
-                       private byte padding2;
-                       private byte padding3;
-                       public SDL_Keysym keysym;
-               }
-#pragma warning restore 0169
-
-               [StructLayout(LayoutKind.Sequential)]
-               public unsafe struct SDL_TextEditingEvent
-               {
-                       public SDL_EventType type;
-                       public UInt32 timestamp;
-                       public UInt32 windowID;
-                       public fixed byte text[SDL_TEXTEDITINGEVENT_TEXT_SIZE];
-                       public Int32 start;
-                       public Int32 length;
-               }
-
-               [StructLayout(LayoutKind.Sequential)]
-               public unsafe struct SDL_TextInputEvent
-               {
-                       public SDL_EventType type;
-                       public UInt32 timestamp;
-                       public UInt32 windowID;
-                       public fixed byte text[SDL_TEXTINPUTEVENT_TEXT_SIZE];
-               }
-
-// Ignore private members used for padding in this struct
-#pragma warning disable 0169
-               /* Mouse motion event structure (event.motion.*) */
-               [StructLayout(LayoutKind.Sequential)]
-               public struct SDL_MouseMotionEvent
-               {
-                       public SDL_EventType type;
-                       public UInt32 timestamp;
-                       public UInt32 windowID;
-                       public UInt32 which;
-                       public byte state; /* bitmask of buttons */
-                       private byte padding1;
-                       private byte padding2;
-                       private byte padding3;
-                       public Int32 x;
-                       public Int32 y;
-                       public Int32 xrel;
-                       public Int32 yrel;
-               }
-#pragma warning restore 0169
-
-// Ignore private members used for padding in this struct
-#pragma warning disable 0169
-               /* Mouse button event structure (event.button.*) */
-               [StructLayout(LayoutKind.Sequential)]
-               public struct SDL_MouseButtonEvent
-               {
-                       public SDL_EventType type;
-                       public UInt32 timestamp;
-                       public UInt32 windowID;
-                       public UInt32 which;
-                       public byte button; /* button id */
-                       public byte state; /* SDL_PRESSED or SDL_RELEASED */
-                       public byte clicks; /* 1 for single-click, 2 for double-click, etc. */
-                       private byte padding1;
-                       public Int32 x;
-                       public Int32 y;
-               }
-#pragma warning restore 0169
-
-               /* Mouse wheel event structure (event.wheel.*) */
-               [StructLayout(LayoutKind.Sequential)]
-               public struct SDL_MouseWheelEvent
-               {
-                       public SDL_EventType type;
-                       public UInt32 timestamp;
-                       public UInt32 windowID;
-                       public UInt32 which;
-                       public Int32 x; /* amount scrolled horizontally */
-                       public Int32 y; /* amount scrolled vertically */
-                       public UInt32 direction; /* Set to one of the SDL_MOUSEWHEEL_* defines */
-               }
-
-// Ignore private members used for padding in this struct
-#pragma warning disable 0169
-               /* Joystick axis motion event structure (event.jaxis.*) */
-               [StructLayout(LayoutKind.Sequential)]
-               public struct SDL_JoyAxisEvent
-               {
-                       public SDL_EventType type;
-                       public UInt32 timestamp;
-                       public Int32 which; /* SDL_JoystickID */
-                       public byte axis;
-                       private byte padding1;
-                       private byte padding2;
-                       private byte padding3;
-                       public Int16 axisValue; /* value, lolC# */
-                       public UInt16 padding4;
-               }
-#pragma warning restore 0169
-
-// Ignore private members used for padding in this struct
-#pragma warning disable 0169
-               /* Joystick trackball motion event structure (event.jball.*) */
-               [StructLayout(LayoutKind.Sequential)]
-               public struct SDL_JoyBallEvent
-               {
-                       public SDL_EventType type;
-                       public UInt32 timestamp;
-                       public Int32 which; /* SDL_JoystickID */
-                       public byte ball;
-                       private byte padding1;
-                       private byte padding2;
-                       private byte padding3;
-                       public Int16 xrel;
-                       public Int16 yrel;
-               }
-#pragma warning restore 0169
-
-// Ignore private members used for padding in this struct
-#pragma warning disable 0169
-               /* Joystick hat position change event struct (event.jhat.*) */
-               [StructLayout(LayoutKind.Sequential)]
-               public struct SDL_JoyHatEvent
-               {
-                       public SDL_EventType type;
-                       public UInt32 timestamp;
-                       public Int32 which; /* SDL_JoystickID */
-                       public byte hat; /* index of the hat */
-                       public byte hatValue; /* value, lolC# */
-                       private byte padding1;
-                       private byte padding2;
-               }
-#pragma warning restore 0169
-
-// Ignore private members used for padding in this struct
-#pragma warning disable 0169
-               /* Joystick button event structure (event.jbutton.*) */
-               [StructLayout(LayoutKind.Sequential)]
-               public struct SDL_JoyButtonEvent
-               {
-                       public SDL_EventType type;
-                       public UInt32 timestamp;
-                       public Int32 which; /* SDL_JoystickID */
-                       public byte button;
-                       public byte state; /* SDL_PRESSED or SDL_RELEASED */
-                       private byte padding1;
-                       private byte padding2;
-               }
-#pragma warning restore 0169
-
-               /* Joystick device event structure (event.jdevice.*) */
-               [StructLayout(LayoutKind.Sequential)]
-               public struct SDL_JoyDeviceEvent
-               {
-                       public SDL_EventType type;
-                       public UInt32 timestamp;
-                       public Int32 which; /* SDL_JoystickID */
-               }
-
-// Ignore private members used for padding in this struct
-#pragma warning disable 0169
-               /* Game controller axis motion event (event.caxis.*) */
-               [StructLayout(LayoutKind.Sequential)]
-               public struct SDL_ControllerAxisEvent
-               {
-                       public SDL_EventType type;
-                       public UInt32 timestamp;
-                       public Int32 which; /* SDL_JoystickID */
-                       public byte axis;
-                       private byte padding1;
-                       private byte padding2;
-                       private byte padding3;
-                       public Int16 axisValue; /* value, lolC# */
-                       private UInt16 padding4;
-               }
-#pragma warning restore 0169
-
-// Ignore private members used for padding in this struct
-#pragma warning disable 0169
-               /* Game controller button event (event.cbutton.*) */
-               [StructLayout(LayoutKind.Sequential)]
-               public struct SDL_ControllerButtonEvent
-               {
-                       public SDL_EventType type;
-                       public UInt32 timestamp;
-                       public Int32 which; /* SDL_JoystickID */
-                       public byte button;
-                       public byte state;
-                       private byte padding1;
-                       private byte padding2;
-               }
-#pragma warning restore 0169
-
-               /* Game controller device event (event.cdevice.*) */
-               [StructLayout(LayoutKind.Sequential)]
-               public struct SDL_ControllerDeviceEvent
-               {
-                       public SDL_EventType type;
-                       public UInt32 timestamp;
-                       public Int32 which;     /* joystick id for ADDED,
-                                                * else instance id
-                                                */
-               }
-
-               [StructLayout(LayoutKind.Sequential)]
-               public struct SDL_TouchFingerEvent
-               {
-                       public UInt32 type;
-                       public UInt32 timestamp;
-                       public Int64 touchId; // SDL_TouchID
-                       public Int64 fingerId; // SDL_GestureID
-                       public float x;
-                       public float y;
-                       public float dx;
-                       public float dy;
-                       public float pressure;
-               }
-
-               [StructLayout(LayoutKind.Sequential)]
-               public struct SDL_MultiGestureEvent
-               {
-                       public UInt32 type;
-                       public UInt32 timestamp;
-                       public Int64 touchId; // SDL_TouchID
-                       public float dTheta;
-                       public float dDist;
-                       public float x;
-                       public float y;
-                       public UInt16 numFingers;
-                       public UInt16 padding;
-               }
-
-               [StructLayout(LayoutKind.Sequential)]
-               public struct SDL_DollarGestureEvent
-               {
-                       public UInt32 type;
-                       public UInt32 timestamp;
-                       public Int64 touchId; // SDL_TouchID
-                       public Int64 gestureId; // SDL_GestureID
-                       public UInt32 numFingers;
-                       public float error;
-                       public float x;
-                       public float y;
-               }
-
-               /* File open request by system (event.drop.*), disabled by
-                * default
-                */
-               [StructLayout(LayoutKind.Sequential)]
-               public struct SDL_DropEvent
-               {
-                       public SDL_EventType type;
-                       public UInt32 timestamp;
-                       public IntPtr file; /* char* filename, to be freed */
-               }
-
-               /* The "quit requested" event */
-               [StructLayout(LayoutKind.Sequential)]
-               public struct SDL_QuitEvent
-               {
-                       public SDL_EventType type;
-                       public UInt32 timestamp;
-               }
-
-               /* A user defined event (event.user.*) */
-               [StructLayout(LayoutKind.Sequential)]
-               public struct SDL_UserEvent
-               {
-                       public UInt32 type;
-                       public UInt32 timestamp;
-                       public UInt32 windowID;
-                       public Int32 code;
-                       public IntPtr data1; /* user-defined */
-                       public IntPtr data2; /* user-defined */
-               }
-
-               /* A video driver dependent event (event.syswm.*), disabled */
-               [StructLayout(LayoutKind.Sequential)]
-               public struct SDL_SysWMEvent
-               {
-                       public SDL_EventType type;
-                       public UInt32 timestamp;
-                       public IntPtr msg; /* SDL_SysWMmsg*, system-dependent*/
-               }
-
-               /* General event structure */
-               // C# doesn't do unions, so we do this ugly thing. */
-               [StructLayout(LayoutKind.Explicit)]
-               public struct SDL_Event
-               {
-                       [FieldOffset(0)]
-                       public SDL_EventType type;
-                       [FieldOffset(0)]
-                       public SDL_WindowEvent window;
-                       [FieldOffset(0)]
-                       public SDL_KeyboardEvent key;
-                       [FieldOffset(0)]
-                       public SDL_TextEditingEvent edit;
-                       [FieldOffset(0)]
-                       public SDL_TextInputEvent text;
-                       [FieldOffset(0)]
-                       public SDL_MouseMotionEvent motion;
-                       [FieldOffset(0)]
-                       public SDL_MouseButtonEvent button;
-                       [FieldOffset(0)]
-                       public SDL_MouseWheelEvent wheel;
-                       [FieldOffset(0)]
-                       public SDL_JoyAxisEvent jaxis;
-                       [FieldOffset(0)]
-                       public SDL_JoyBallEvent jball;
-                       [FieldOffset(0)]
-                       public SDL_JoyHatEvent jhat;
-                       [FieldOffset(0)]
-                       public SDL_JoyButtonEvent jbutton;
-                       [FieldOffset(0)]
-                       public SDL_JoyDeviceEvent jdevice;
-                       [FieldOffset(0)]
-                       public SDL_ControllerAxisEvent caxis;
-                       [FieldOffset(0)]
-                       public SDL_ControllerButtonEvent cbutton;
-                       [FieldOffset(0)]
-                       public SDL_ControllerDeviceEvent cdevice;
-                       [FieldOffset(0)]
-                       public SDL_QuitEvent quit;
-                       [FieldOffset(0)]
-                       public SDL_UserEvent user;
-                       [FieldOffset(0)]
-                       public SDL_SysWMEvent syswm;
-                       [FieldOffset(0)]
-                       public SDL_TouchFingerEvent tfinger;
-                       [FieldOffset(0)]
-                       public SDL_MultiGestureEvent mgesture;
-                       [FieldOffset(0)]
-                       public SDL_DollarGestureEvent dgesture;
-                       [FieldOffset(0)]
-                       public SDL_DropEvent drop;
-               }
-
-               [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
-               public delegate int SDL_EventFilter(
-                       IntPtr userdata, // void*
-                       IntPtr sdlevent // SDL_Event* event, lolC#
-               );
-
-               /* Pump the event loop, getting events from the input devices*/
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_PumpEvents();
-
-               public enum SDL_eventaction
-               {
-                       SDL_ADDEVENT,
-                       SDL_PEEKEVENT,
-                       SDL_GETEVENT
-               }
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_PeepEvents(
-                       [Out()] [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.Struct, SizeParamIndex = 1)]
-                               SDL_Event[] events,
-                       int numevents,
-                       SDL_eventaction action,
-                       SDL_EventType minType,
-                       SDL_EventType maxType
-               );
-
-               /* Checks to see if certain events are in the event queue */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern SDL_bool SDL_HasEvent(SDL_EventType type);
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern SDL_bool SDL_HasEvents(
-                       SDL_EventType minType,
-                       SDL_EventType maxType
-               );
-
-               /* Clears events from the event queue */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_FlushEvent(SDL_EventType type);
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_FlushEvents(
-                       SDL_EventType min,
-                       SDL_EventType max
-               );
-
-               /* Polls for currently pending events */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_PollEvent(out SDL_Event _event);
-
-               /* Waits indefinitely for the next event */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_WaitEvent(out SDL_Event _event);
-
-               /* Waits until the specified timeout (in ms) for the next event
-                */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_WaitEventTimeout(out SDL_Event _event, int timeout);
-
-               /* Add an event to the event queue */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_PushEvent(ref SDL_Event _event);
-
-               /* userdata refers to a void* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_SetEventFilter(
-                       SDL_EventFilter filter,
-                       IntPtr userdata
-               );
-
-               /* userdata refers to a void* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern SDL_bool SDL_GetEventFilter(
-                       out SDL_EventFilter filter,
-                       out IntPtr userdata
-               );
-
-               /* userdata refers to a void* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_AddEventWatch(
-                       SDL_EventFilter filter,
-                       IntPtr userdata
-               );
-
-               /* userdata refers to a void* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_DelEventWatch(
-                       SDL_EventFilter filter,
-                       IntPtr userdata
-               );
-
-               /* userdata refers to a void* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_FilterEvents(
-                       SDL_EventFilter filter,
-                       IntPtr userdata
-               );
-
-               /* These are for SDL_EventState() */
-               public const int SDL_QUERY =            -1;
-               public const int SDL_IGNORE =           0;
-               public const int SDL_DISABLE =          0;
-               public const int SDL_ENABLE =           1;
-
-               /* This function allows you to enable/disable certain events */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern byte SDL_EventState(SDL_EventType type, int state);
-
-               /* Get the state of an event */
-               public static byte SDL_GetEventState(SDL_EventType type)
-               {
-                       return SDL_EventState(type, SDL_QUERY);
-               }
-
-               /* Allocate a set of user-defined events */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern UInt32 SDL_RegisterEvents(int numevents);
-               #endregion
-
-               #region SDL_scancode.h
-
-               /* Scancodes based off USB keyboard page (0x07) */
-               public enum SDL_Scancode
-               {
-                       SDL_SCANCODE_UNKNOWN = 0,
-
-                       SDL_SCANCODE_A = 4,
-                       SDL_SCANCODE_B = 5,
-                       SDL_SCANCODE_C = 6,
-                       SDL_SCANCODE_D = 7,
-                       SDL_SCANCODE_E = 8,
-                       SDL_SCANCODE_F = 9,
-                       SDL_SCANCODE_G = 10,
-                       SDL_SCANCODE_H = 11,
-                       SDL_SCANCODE_I = 12,
-                       SDL_SCANCODE_J = 13,
-                       SDL_SCANCODE_K = 14,
-                       SDL_SCANCODE_L = 15,
-                       SDL_SCANCODE_M = 16,
-                       SDL_SCANCODE_N = 17,
-                       SDL_SCANCODE_O = 18,
-                       SDL_SCANCODE_P = 19,
-                       SDL_SCANCODE_Q = 20,
-                       SDL_SCANCODE_R = 21,
-                       SDL_SCANCODE_S = 22,
-                       SDL_SCANCODE_T = 23,
-                       SDL_SCANCODE_U = 24,
-                       SDL_SCANCODE_V = 25,
-                       SDL_SCANCODE_W = 26,
-                       SDL_SCANCODE_X = 27,
-                       SDL_SCANCODE_Y = 28,
-                       SDL_SCANCODE_Z = 29,
-
-                       SDL_SCANCODE_1 = 30,
-                       SDL_SCANCODE_2 = 31,
-                       SDL_SCANCODE_3 = 32,
-                       SDL_SCANCODE_4 = 33,
-                       SDL_SCANCODE_5 = 34,
-                       SDL_SCANCODE_6 = 35,
-                       SDL_SCANCODE_7 = 36,
-                       SDL_SCANCODE_8 = 37,
-                       SDL_SCANCODE_9 = 38,
-                       SDL_SCANCODE_0 = 39,
-
-                       SDL_SCANCODE_RETURN = 40,
-                       SDL_SCANCODE_ESCAPE = 41,
-                       SDL_SCANCODE_BACKSPACE = 42,
-                       SDL_SCANCODE_TAB = 43,
-                       SDL_SCANCODE_SPACE = 44,
-
-                       SDL_SCANCODE_MINUS = 45,
-                       SDL_SCANCODE_EQUALS = 46,
-                       SDL_SCANCODE_LEFTBRACKET = 47,
-                       SDL_SCANCODE_RIGHTBRACKET = 48,
-                       SDL_SCANCODE_BACKSLASH = 49,
-                       SDL_SCANCODE_NONUSHASH = 50,
-                       SDL_SCANCODE_SEMICOLON = 51,
-                       SDL_SCANCODE_APOSTROPHE = 52,
-                       SDL_SCANCODE_GRAVE = 53,
-                       SDL_SCANCODE_COMMA = 54,
-                       SDL_SCANCODE_PERIOD = 55,
-                       SDL_SCANCODE_SLASH = 56,
-
-                       SDL_SCANCODE_CAPSLOCK = 57,
-
-                       SDL_SCANCODE_F1 = 58,
-                       SDL_SCANCODE_F2 = 59,
-                       SDL_SCANCODE_F3 = 60,
-                       SDL_SCANCODE_F4 = 61,
-                       SDL_SCANCODE_F5 = 62,
-                       SDL_SCANCODE_F6 = 63,
-                       SDL_SCANCODE_F7 = 64,
-                       SDL_SCANCODE_F8 = 65,
-                       SDL_SCANCODE_F9 = 66,
-                       SDL_SCANCODE_F10 = 67,
-                       SDL_SCANCODE_F11 = 68,
-                       SDL_SCANCODE_F12 = 69,
-
-                       SDL_SCANCODE_PRINTSCREEN = 70,
-                       SDL_SCANCODE_SCROLLLOCK = 71,
-                       SDL_SCANCODE_PAUSE = 72,
-                       SDL_SCANCODE_INSERT = 73,
-                       SDL_SCANCODE_HOME = 74,
-                       SDL_SCANCODE_PAGEUP = 75,
-                       SDL_SCANCODE_DELETE = 76,
-                       SDL_SCANCODE_END = 77,
-                       SDL_SCANCODE_PAGEDOWN = 78,
-                       SDL_SCANCODE_RIGHT = 79,
-                       SDL_SCANCODE_LEFT = 80,
-                       SDL_SCANCODE_DOWN = 81,
-                       SDL_SCANCODE_UP = 82,
-
-                       SDL_SCANCODE_NUMLOCKCLEAR = 83,
-                       SDL_SCANCODE_KP_DIVIDE = 84,
-                       SDL_SCANCODE_KP_MULTIPLY = 85,
-                       SDL_SCANCODE_KP_MINUS = 86,
-                       SDL_SCANCODE_KP_PLUS = 87,
-                       SDL_SCANCODE_KP_ENTER = 88,
-                       SDL_SCANCODE_KP_1 = 89,
-                       SDL_SCANCODE_KP_2 = 90,
-                       SDL_SCANCODE_KP_3 = 91,
-                       SDL_SCANCODE_KP_4 = 92,
-                       SDL_SCANCODE_KP_5 = 93,
-                       SDL_SCANCODE_KP_6 = 94,
-                       SDL_SCANCODE_KP_7 = 95,
-                       SDL_SCANCODE_KP_8 = 96,
-                       SDL_SCANCODE_KP_9 = 97,
-                       SDL_SCANCODE_KP_0 = 98,
-                       SDL_SCANCODE_KP_PERIOD = 99,
-
-                       SDL_SCANCODE_NONUSBACKSLASH = 100,
-                       SDL_SCANCODE_APPLICATION = 101,
-                       SDL_SCANCODE_POWER = 102,
-                       SDL_SCANCODE_KP_EQUALS = 103,
-                       SDL_SCANCODE_F13 = 104,
-                       SDL_SCANCODE_F14 = 105,
-                       SDL_SCANCODE_F15 = 106,
-                       SDL_SCANCODE_F16 = 107,
-                       SDL_SCANCODE_F17 = 108,
-                       SDL_SCANCODE_F18 = 109,
-                       SDL_SCANCODE_F19 = 110,
-                       SDL_SCANCODE_F20 = 111,
-                       SDL_SCANCODE_F21 = 112,
-                       SDL_SCANCODE_F22 = 113,
-                       SDL_SCANCODE_F23 = 114,
-                       SDL_SCANCODE_F24 = 115,
-                       SDL_SCANCODE_EXECUTE = 116,
-                       SDL_SCANCODE_HELP = 117,
-                       SDL_SCANCODE_MENU = 118,
-                       SDL_SCANCODE_SELECT = 119,
-                       SDL_SCANCODE_STOP = 120,
-                       SDL_SCANCODE_AGAIN = 121,
-                       SDL_SCANCODE_UNDO = 122,
-                       SDL_SCANCODE_CUT = 123,
-                       SDL_SCANCODE_COPY = 124,
-                       SDL_SCANCODE_PASTE = 125,
-                       SDL_SCANCODE_FIND = 126,
-                       SDL_SCANCODE_MUTE = 127,
-                       SDL_SCANCODE_VOLUMEUP = 128,
-                       SDL_SCANCODE_VOLUMEDOWN = 129,
-                       /* not sure whether there's a reason to enable these */
-                       /*      SDL_SCANCODE_LOCKINGCAPSLOCK = 130, */
-                       /*      SDL_SCANCODE_LOCKINGNUMLOCK = 131, */
-                       /*      SDL_SCANCODE_LOCKINGSCROLLLOCK = 132, */
-                       SDL_SCANCODE_KP_COMMA = 133,
-                       SDL_SCANCODE_KP_EQUALSAS400 = 134,
-
-                       SDL_SCANCODE_INTERNATIONAL1 = 135,
-                       SDL_SCANCODE_INTERNATIONAL2 = 136,
-                       SDL_SCANCODE_INTERNATIONAL3 = 137,
-                       SDL_SCANCODE_INTERNATIONAL4 = 138,
-                       SDL_SCANCODE_INTERNATIONAL5 = 139,
-                       SDL_SCANCODE_INTERNATIONAL6 = 140,
-                       SDL_SCANCODE_INTERNATIONAL7 = 141,
-                       SDL_SCANCODE_INTERNATIONAL8 = 142,
-                       SDL_SCANCODE_INTERNATIONAL9 = 143,
-                       SDL_SCANCODE_LANG1 = 144,
-                       SDL_SCANCODE_LANG2 = 145,
-                       SDL_SCANCODE_LANG3 = 146,
-                       SDL_SCANCODE_LANG4 = 147,
-                       SDL_SCANCODE_LANG5 = 148,
-                       SDL_SCANCODE_LANG6 = 149,
-                       SDL_SCANCODE_LANG7 = 150,
-                       SDL_SCANCODE_LANG8 = 151,
-                       SDL_SCANCODE_LANG9 = 152,
-
-                       SDL_SCANCODE_ALTERASE = 153,
-                       SDL_SCANCODE_SYSREQ = 154,
-                       SDL_SCANCODE_CANCEL = 155,
-                       SDL_SCANCODE_CLEAR = 156,
-                       SDL_SCANCODE_PRIOR = 157,
-                       SDL_SCANCODE_RETURN2 = 158,
-                       SDL_SCANCODE_SEPARATOR = 159,
-                       SDL_SCANCODE_OUT = 160,
-                       SDL_SCANCODE_OPER = 161,
-                       SDL_SCANCODE_CLEARAGAIN = 162,
-                       SDL_SCANCODE_CRSEL = 163,
-                       SDL_SCANCODE_EXSEL = 164,
-
-                       SDL_SCANCODE_KP_00 = 176,
-                       SDL_SCANCODE_KP_000 = 177,
-                       SDL_SCANCODE_THOUSANDSSEPARATOR = 178,
-                       SDL_SCANCODE_DECIMALSEPARATOR = 179,
-                       SDL_SCANCODE_CURRENCYUNIT = 180,
-                       SDL_SCANCODE_CURRENCYSUBUNIT = 181,
-                       SDL_SCANCODE_KP_LEFTPAREN = 182,
-                       SDL_SCANCODE_KP_RIGHTPAREN = 183,
-                       SDL_SCANCODE_KP_LEFTBRACE = 184,
-                       SDL_SCANCODE_KP_RIGHTBRACE = 185,
-                       SDL_SCANCODE_KP_TAB = 186,
-                       SDL_SCANCODE_KP_BACKSPACE = 187,
-                       SDL_SCANCODE_KP_A = 188,
-                       SDL_SCANCODE_KP_B = 189,
-                       SDL_SCANCODE_KP_C = 190,
-                       SDL_SCANCODE_KP_D = 191,
-                       SDL_SCANCODE_KP_E = 192,
-                       SDL_SCANCODE_KP_F = 193,
-                       SDL_SCANCODE_KP_XOR = 194,
-                       SDL_SCANCODE_KP_POWER = 195,
-                       SDL_SCANCODE_KP_PERCENT = 196,
-                       SDL_SCANCODE_KP_LESS = 197,
-                       SDL_SCANCODE_KP_GREATER = 198,
-                       SDL_SCANCODE_KP_AMPERSAND = 199,
-                       SDL_SCANCODE_KP_DBLAMPERSAND = 200,
-                       SDL_SCANCODE_KP_VERTICALBAR = 201,
-                       SDL_SCANCODE_KP_DBLVERTICALBAR = 202,
-                       SDL_SCANCODE_KP_COLON = 203,
-                       SDL_SCANCODE_KP_HASH = 204,
-                       SDL_SCANCODE_KP_SPACE = 205,
-                       SDL_SCANCODE_KP_AT = 206,
-                       SDL_SCANCODE_KP_EXCLAM = 207,
-                       SDL_SCANCODE_KP_MEMSTORE = 208,
-                       SDL_SCANCODE_KP_MEMRECALL = 209,
-                       SDL_SCANCODE_KP_MEMCLEAR = 210,
-                       SDL_SCANCODE_KP_MEMADD = 211,
-                       SDL_SCANCODE_KP_MEMSUBTRACT = 212,
-                       SDL_SCANCODE_KP_MEMMULTIPLY = 213,
-                       SDL_SCANCODE_KP_MEMDIVIDE = 214,
-                       SDL_SCANCODE_KP_PLUSMINUS = 215,
-                       SDL_SCANCODE_KP_CLEAR = 216,
-                       SDL_SCANCODE_KP_CLEARENTRY = 217,
-                       SDL_SCANCODE_KP_BINARY = 218,
-                       SDL_SCANCODE_KP_OCTAL = 219,
-                       SDL_SCANCODE_KP_DECIMAL = 220,
-                       SDL_SCANCODE_KP_HEXADECIMAL = 221,
-
-                       SDL_SCANCODE_LCTRL = 224,
-                       SDL_SCANCODE_LSHIFT = 225,
-                       SDL_SCANCODE_LALT = 226,
-                       SDL_SCANCODE_LGUI = 227,
-                       SDL_SCANCODE_RCTRL = 228,
-                       SDL_SCANCODE_RSHIFT = 229,
-                       SDL_SCANCODE_RALT = 230,
-                       SDL_SCANCODE_RGUI = 231,
-
-                       SDL_SCANCODE_MODE = 257,
-
-                       /* These come from the USB consumer page (0x0C) */
-                       SDL_SCANCODE_AUDIONEXT = 258,
-                       SDL_SCANCODE_AUDIOPREV = 259,
-                       SDL_SCANCODE_AUDIOSTOP = 260,
-                       SDL_SCANCODE_AUDIOPLAY = 261,
-                       SDL_SCANCODE_AUDIOMUTE = 262,
-                       SDL_SCANCODE_MEDIASELECT = 263,
-                       SDL_SCANCODE_WWW = 264,
-                       SDL_SCANCODE_MAIL = 265,
-                       SDL_SCANCODE_CALCULATOR = 266,
-                       SDL_SCANCODE_COMPUTER = 267,
-                       SDL_SCANCODE_AC_SEARCH = 268,
-                       SDL_SCANCODE_AC_HOME = 269,
-                       SDL_SCANCODE_AC_BACK = 270,
-                       SDL_SCANCODE_AC_FORWARD = 271,
-                       SDL_SCANCODE_AC_STOP = 272,
-                       SDL_SCANCODE_AC_REFRESH = 273,
-                       SDL_SCANCODE_AC_BOOKMARKS = 274,
-
-                       /* These come from other sources, and are mostly mac related */
-                       SDL_SCANCODE_BRIGHTNESSDOWN = 275,
-                       SDL_SCANCODE_BRIGHTNESSUP = 276,
-                       SDL_SCANCODE_DISPLAYSWITCH = 277,
-                       SDL_SCANCODE_KBDILLUMTOGGLE = 278,
-                       SDL_SCANCODE_KBDILLUMDOWN = 279,
-                       SDL_SCANCODE_KBDILLUMUP = 280,
-                       SDL_SCANCODE_EJECT = 281,
-                       SDL_SCANCODE_SLEEP = 282,
-
-                       SDL_SCANCODE_APP1 = 283,
-                       SDL_SCANCODE_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
-               }
-
-               #endregion
-
-               #region SDL_keycode.h
-
-               public const int SDLK_SCANCODE_MASK = (1 << 30);
-               public static SDL_Keycode SDL_SCANCODE_TO_KEYCODE(SDL_Scancode X)
-               {
-                       return (SDL_Keycode)((int)X | SDLK_SCANCODE_MASK);
-               }
-
-               /* So, in the C headers, SDL_Keycode is a typedef of Sint32
-                * and all of the names are in an anonymous enum. Yeah...
-                * that's not going to cut it for C#. We'll just put them in an
-                * enum for now? */
-               public enum SDL_Keycode
-               {
-                       SDLK_UNKNOWN = 0,
-
-                       SDLK_RETURN = '\r',
-                       SDLK_ESCAPE = 27, // '\033'
-                       SDLK_BACKSPACE = '\b',
-                       SDLK_TAB = '\t',
-                       SDLK_SPACE = ' ',
-                       SDLK_EXCLAIM = '!',
-                       SDLK_QUOTEDBL = '"',
-                       SDLK_HASH = '#',
-                       SDLK_PERCENT = '%',
-                       SDLK_DOLLAR = '$',
-                       SDLK_AMPERSAND = '&',
-                       SDLK_QUOTE = '\'',
-                       SDLK_LEFTPAREN = '(',
-                       SDLK_RIGHTPAREN = ')',
-                       SDLK_ASTERISK = '*',
-                       SDLK_PLUS = '+',
-                       SDLK_COMMA = ',',
-                       SDLK_MINUS = '-',
-                       SDLK_PERIOD = '.',
-                       SDLK_SLASH = '/',
-                       SDLK_0 = '0',
-                       SDLK_1 = '1',
-                       SDLK_2 = '2',
-                       SDLK_3 = '3',
-                       SDLK_4 = '4',
-                       SDLK_5 = '5',
-                       SDLK_6 = '6',
-                       SDLK_7 = '7',
-                       SDLK_8 = '8',
-                       SDLK_9 = '9',
-                       SDLK_COLON = ':',
-                       SDLK_SEMICOLON = ';',
-                       SDLK_LESS = '<',
-                       SDLK_EQUALS = '=',
-                       SDLK_GREATER = '>',
-                       SDLK_QUESTION = '?',
-                       SDLK_AT = '@',
-                       /*
-                       Skip uppercase letters
-                       */
-                       SDLK_LEFTBRACKET = '[',
-                       SDLK_BACKSLASH = '\\',
-                       SDLK_RIGHTBRACKET = ']',
-                       SDLK_CARET = '^',
-                       SDLK_UNDERSCORE = '_',
-                       SDLK_BACKQUOTE = '`',
-                       SDLK_a = 'a',
-                       SDLK_b = 'b',
-                       SDLK_c = 'c',
-                       SDLK_d = 'd',
-                       SDLK_e = 'e',
-                       SDLK_f = 'f',
-                       SDLK_g = 'g',
-                       SDLK_h = 'h',
-                       SDLK_i = 'i',
-                       SDLK_j = 'j',
-                       SDLK_k = 'k',
-                       SDLK_l = 'l',
-                       SDLK_m = 'm',
-                       SDLK_n = 'n',
-                       SDLK_o = 'o',
-                       SDLK_p = 'p',
-                       SDLK_q = 'q',
-                       SDLK_r = 'r',
-                       SDLK_s = 's',
-                       SDLK_t = 't',
-                       SDLK_u = 'u',
-                       SDLK_v = 'v',
-                       SDLK_w = 'w',
-                       SDLK_x = 'x',
-                       SDLK_y = 'y',
-                       SDLK_z = 'z',
-
-                       SDLK_CAPSLOCK = (int)SDL_Scancode.SDL_SCANCODE_CAPSLOCK | SDLK_SCANCODE_MASK,
-
-                       SDLK_F1 = (int)SDL_Scancode.SDL_SCANCODE_F1 | SDLK_SCANCODE_MASK,
-                       SDLK_F2 = (int)SDL_Scancode.SDL_SCANCODE_F2 | SDLK_SCANCODE_MASK,
-                       SDLK_F3 = (int)SDL_Scancode.SDL_SCANCODE_F3 | SDLK_SCANCODE_MASK,
-                       SDLK_F4 = (int)SDL_Scancode.SDL_SCANCODE_F4 | SDLK_SCANCODE_MASK,
-                       SDLK_F5 = (int)SDL_Scancode.SDL_SCANCODE_F5 | SDLK_SCANCODE_MASK,
-                       SDLK_F6 = (int)SDL_Scancode.SDL_SCANCODE_F6 | SDLK_SCANCODE_MASK,
-                       SDLK_F7 = (int)SDL_Scancode.SDL_SCANCODE_F7 | SDLK_SCANCODE_MASK,
-                       SDLK_F8 = (int)SDL_Scancode.SDL_SCANCODE_F8 | SDLK_SCANCODE_MASK,
-                       SDLK_F9 = (int)SDL_Scancode.SDL_SCANCODE_F9 | SDLK_SCANCODE_MASK,
-                       SDLK_F10 = (int)SDL_Scancode.SDL_SCANCODE_F10 | SDLK_SCANCODE_MASK,
-                       SDLK_F11 = (int)SDL_Scancode.SDL_SCANCODE_F11 | SDLK_SCANCODE_MASK,
-                       SDLK_F12 = (int)SDL_Scancode.SDL_SCANCODE_F12 | SDLK_SCANCODE_MASK,
-
-                       SDLK_PRINTSCREEN = (int)SDL_Scancode.SDL_SCANCODE_PRINTSCREEN | SDLK_SCANCODE_MASK,
-                       SDLK_SCROLLLOCK = (int)SDL_Scancode.SDL_SCANCODE_SCROLLLOCK | SDLK_SCANCODE_MASK,
-                       SDLK_PAUSE = (int)SDL_Scancode.SDL_SCANCODE_PAUSE | SDLK_SCANCODE_MASK,
-                       SDLK_INSERT = (int)SDL_Scancode.SDL_SCANCODE_INSERT | SDLK_SCANCODE_MASK,
-                       SDLK_HOME = (int)SDL_Scancode.SDL_SCANCODE_HOME | SDLK_SCANCODE_MASK,
-                       SDLK_PAGEUP = (int)SDL_Scancode.SDL_SCANCODE_PAGEUP | SDLK_SCANCODE_MASK,
-                       SDLK_DELETE = 127,
-                       SDLK_END = (int)SDL_Scancode.SDL_SCANCODE_END | SDLK_SCANCODE_MASK,
-                       SDLK_PAGEDOWN = (int)SDL_Scancode.SDL_SCANCODE_PAGEDOWN | SDLK_SCANCODE_MASK,
-                       SDLK_RIGHT = (int)SDL_Scancode.SDL_SCANCODE_RIGHT | SDLK_SCANCODE_MASK,
-                       SDLK_LEFT = (int)SDL_Scancode.SDL_SCANCODE_LEFT | SDLK_SCANCODE_MASK,
-                       SDLK_DOWN = (int)SDL_Scancode.SDL_SCANCODE_DOWN | SDLK_SCANCODE_MASK,
-                       SDLK_UP = (int)SDL_Scancode.SDL_SCANCODE_UP | SDLK_SCANCODE_MASK,
-
-                       SDLK_NUMLOCKCLEAR = (int)SDL_Scancode.SDL_SCANCODE_NUMLOCKCLEAR | SDLK_SCANCODE_MASK,
-                       SDLK_KP_DIVIDE = (int)SDL_Scancode.SDL_SCANCODE_KP_DIVIDE | SDLK_SCANCODE_MASK,
-                       SDLK_KP_MULTIPLY = (int)SDL_Scancode.SDL_SCANCODE_KP_MULTIPLY | SDLK_SCANCODE_MASK,
-                       SDLK_KP_MINUS = (int)SDL_Scancode.SDL_SCANCODE_KP_MINUS | SDLK_SCANCODE_MASK,
-                       SDLK_KP_PLUS = (int)SDL_Scancode.SDL_SCANCODE_KP_PLUS | SDLK_SCANCODE_MASK,
-                       SDLK_KP_ENTER = (int)SDL_Scancode.SDL_SCANCODE_KP_ENTER | SDLK_SCANCODE_MASK,
-                       SDLK_KP_1 = (int)SDL_Scancode.SDL_SCANCODE_KP_1 | SDLK_SCANCODE_MASK,
-                       SDLK_KP_2 = (int)SDL_Scancode.SDL_SCANCODE_KP_2 | SDLK_SCANCODE_MASK,
-                       SDLK_KP_3 = (int)SDL_Scancode.SDL_SCANCODE_KP_3 | SDLK_SCANCODE_MASK,
-                       SDLK_KP_4 = (int)SDL_Scancode.SDL_SCANCODE_KP_4 | SDLK_SCANCODE_MASK,
-                       SDLK_KP_5 = (int)SDL_Scancode.SDL_SCANCODE_KP_5 | SDLK_SCANCODE_MASK,
-                       SDLK_KP_6 = (int)SDL_Scancode.SDL_SCANCODE_KP_6 | SDLK_SCANCODE_MASK,
-                       SDLK_KP_7 = (int)SDL_Scancode.SDL_SCANCODE_KP_7 | SDLK_SCANCODE_MASK,
-                       SDLK_KP_8 = (int)SDL_Scancode.SDL_SCANCODE_KP_8 | SDLK_SCANCODE_MASK,
-                       SDLK_KP_9 = (int)SDL_Scancode.SDL_SCANCODE_KP_9 | SDLK_SCANCODE_MASK,
-                       SDLK_KP_0 = (int)SDL_Scancode.SDL_SCANCODE_KP_0 | SDLK_SCANCODE_MASK,
-                       SDLK_KP_PERIOD = (int)SDL_Scancode.SDL_SCANCODE_KP_PERIOD | SDLK_SCANCODE_MASK,
-
-                       SDLK_APPLICATION = (int)SDL_Scancode.SDL_SCANCODE_APPLICATION | SDLK_SCANCODE_MASK,
-                       SDLK_POWER = (int)SDL_Scancode.SDL_SCANCODE_POWER | SDLK_SCANCODE_MASK,
-                       SDLK_KP_EQUALS = (int)SDL_Scancode.SDL_SCANCODE_KP_EQUALS | SDLK_SCANCODE_MASK,
-                       SDLK_F13 = (int)SDL_Scancode.SDL_SCANCODE_F13 | SDLK_SCANCODE_MASK,
-                       SDLK_F14 = (int)SDL_Scancode.SDL_SCANCODE_F14 | SDLK_SCANCODE_MASK,
-                       SDLK_F15 = (int)SDL_Scancode.SDL_SCANCODE_F15 | SDLK_SCANCODE_MASK,
-                       SDLK_F16 = (int)SDL_Scancode.SDL_SCANCODE_F16 | SDLK_SCANCODE_MASK,
-                       SDLK_F17 = (int)SDL_Scancode.SDL_SCANCODE_F17 | SDLK_SCANCODE_MASK,
-                       SDLK_F18 = (int)SDL_Scancode.SDL_SCANCODE_F18 | SDLK_SCANCODE_MASK,
-                       SDLK_F19 = (int)SDL_Scancode.SDL_SCANCODE_F19 | SDLK_SCANCODE_MASK,
-                       SDLK_F20 = (int)SDL_Scancode.SDL_SCANCODE_F20 | SDLK_SCANCODE_MASK,
-                       SDLK_F21 = (int)SDL_Scancode.SDL_SCANCODE_F21 | SDLK_SCANCODE_MASK,
-                       SDLK_F22 = (int)SDL_Scancode.SDL_SCANCODE_F22 | SDLK_SCANCODE_MASK,
-                       SDLK_F23 = (int)SDL_Scancode.SDL_SCANCODE_F23 | SDLK_SCANCODE_MASK,
-                       SDLK_F24 = (int)SDL_Scancode.SDL_SCANCODE_F24 | SDLK_SCANCODE_MASK,
-                       SDLK_EXECUTE = (int)SDL_Scancode.SDL_SCANCODE_EXECUTE | SDLK_SCANCODE_MASK,
-                       SDLK_HELP = (int)SDL_Scancode.SDL_SCANCODE_HELP | SDLK_SCANCODE_MASK,
-                       SDLK_MENU = (int)SDL_Scancode.SDL_SCANCODE_MENU | SDLK_SCANCODE_MASK,
-                       SDLK_SELECT = (int)SDL_Scancode.SDL_SCANCODE_SELECT | SDLK_SCANCODE_MASK,
-                       SDLK_STOP = (int)SDL_Scancode.SDL_SCANCODE_STOP | SDLK_SCANCODE_MASK,
-                       SDLK_AGAIN = (int)SDL_Scancode.SDL_SCANCODE_AGAIN | SDLK_SCANCODE_MASK,
-                       SDLK_UNDO = (int)SDL_Scancode.SDL_SCANCODE_UNDO | SDLK_SCANCODE_MASK,
-                       SDLK_CUT = (int)SDL_Scancode.SDL_SCANCODE_CUT | SDLK_SCANCODE_MASK,
-                       SDLK_COPY = (int)SDL_Scancode.SDL_SCANCODE_COPY | SDLK_SCANCODE_MASK,
-                       SDLK_PASTE = (int)SDL_Scancode.SDL_SCANCODE_PASTE | SDLK_SCANCODE_MASK,
-                       SDLK_FIND = (int)SDL_Scancode.SDL_SCANCODE_FIND | SDLK_SCANCODE_MASK,
-                       SDLK_MUTE = (int)SDL_Scancode.SDL_SCANCODE_MUTE | SDLK_SCANCODE_MASK,
-                       SDLK_VOLUMEUP = (int)SDL_Scancode.SDL_SCANCODE_VOLUMEUP | SDLK_SCANCODE_MASK,
-                       SDLK_VOLUMEDOWN = (int)SDL_Scancode.SDL_SCANCODE_VOLUMEDOWN | SDLK_SCANCODE_MASK,
-                       SDLK_KP_COMMA = (int)SDL_Scancode.SDL_SCANCODE_KP_COMMA | SDLK_SCANCODE_MASK,
-                       SDLK_KP_EQUALSAS400 =
-                       (int)SDL_Scancode.SDL_SCANCODE_KP_EQUALSAS400 | SDLK_SCANCODE_MASK,
-
-                       SDLK_ALTERASE = (int)SDL_Scancode.SDL_SCANCODE_ALTERASE | SDLK_SCANCODE_MASK,
-                       SDLK_SYSREQ = (int)SDL_Scancode.SDL_SCANCODE_SYSREQ | SDLK_SCANCODE_MASK,
-                       SDLK_CANCEL = (int)SDL_Scancode.SDL_SCANCODE_CANCEL | SDLK_SCANCODE_MASK,
-                       SDLK_CLEAR = (int)SDL_Scancode.SDL_SCANCODE_CLEAR | SDLK_SCANCODE_MASK,
-                       SDLK_PRIOR = (int)SDL_Scancode.SDL_SCANCODE_PRIOR | SDLK_SCANCODE_MASK,
-                       SDLK_RETURN2 = (int)SDL_Scancode.SDL_SCANCODE_RETURN2 | SDLK_SCANCODE_MASK,
-                       SDLK_SEPARATOR = (int)SDL_Scancode.SDL_SCANCODE_SEPARATOR | SDLK_SCANCODE_MASK,
-                       SDLK_OUT = (int)SDL_Scancode.SDL_SCANCODE_OUT | SDLK_SCANCODE_MASK,
-                       SDLK_OPER = (int)SDL_Scancode.SDL_SCANCODE_OPER | SDLK_SCANCODE_MASK,
-                       SDLK_CLEARAGAIN = (int)SDL_Scancode.SDL_SCANCODE_CLEARAGAIN | SDLK_SCANCODE_MASK,
-                       SDLK_CRSEL = (int)SDL_Scancode.SDL_SCANCODE_CRSEL | SDLK_SCANCODE_MASK,
-                       SDLK_EXSEL = (int)SDL_Scancode.SDL_SCANCODE_EXSEL | SDLK_SCANCODE_MASK,
-
-                       SDLK_KP_00 = (int)SDL_Scancode.SDL_SCANCODE_KP_00 | SDLK_SCANCODE_MASK,
-                       SDLK_KP_000 = (int)SDL_Scancode.SDL_SCANCODE_KP_000 | SDLK_SCANCODE_MASK,
-                       SDLK_THOUSANDSSEPARATOR =
-                       (int)SDL_Scancode.SDL_SCANCODE_THOUSANDSSEPARATOR | SDLK_SCANCODE_MASK,
-                       SDLK_DECIMALSEPARATOR =
-                       (int)SDL_Scancode.SDL_SCANCODE_DECIMALSEPARATOR | SDLK_SCANCODE_MASK,
-                       SDLK_CURRENCYUNIT = (int)SDL_Scancode.SDL_SCANCODE_CURRENCYUNIT | SDLK_SCANCODE_MASK,
-                       SDLK_CURRENCYSUBUNIT =
-                       (int)SDL_Scancode.SDL_SCANCODE_CURRENCYSUBUNIT | SDLK_SCANCODE_MASK,
-                       SDLK_KP_LEFTPAREN = (int)SDL_Scancode.SDL_SCANCODE_KP_LEFTPAREN | SDLK_SCANCODE_MASK,
-                       SDLK_KP_RIGHTPAREN = (int)SDL_Scancode.SDL_SCANCODE_KP_RIGHTPAREN | SDLK_SCANCODE_MASK,
-                       SDLK_KP_LEFTBRACE = (int)SDL_Scancode.SDL_SCANCODE_KP_LEFTBRACE | SDLK_SCANCODE_MASK,
-                       SDLK_KP_RIGHTBRACE = (int)SDL_Scancode.SDL_SCANCODE_KP_RIGHTBRACE | SDLK_SCANCODE_MASK,
-                       SDLK_KP_TAB = (int)SDL_Scancode.SDL_SCANCODE_KP_TAB | SDLK_SCANCODE_MASK,
-                       SDLK_KP_BACKSPACE = (int)SDL_Scancode.SDL_SCANCODE_KP_BACKSPACE | SDLK_SCANCODE_MASK,
-                       SDLK_KP_A = (int)SDL_Scancode.SDL_SCANCODE_KP_A | SDLK_SCANCODE_MASK,
-                       SDLK_KP_B = (int)SDL_Scancode.SDL_SCANCODE_KP_B | SDLK_SCANCODE_MASK,
-                       SDLK_KP_C = (int)SDL_Scancode.SDL_SCANCODE_KP_C | SDLK_SCANCODE_MASK,
-                       SDLK_KP_D = (int)SDL_Scancode.SDL_SCANCODE_KP_D | SDLK_SCANCODE_MASK,
-                       SDLK_KP_E = (int)SDL_Scancode.SDL_SCANCODE_KP_E | SDLK_SCANCODE_MASK,
-                       SDLK_KP_F = (int)SDL_Scancode.SDL_SCANCODE_KP_F | SDLK_SCANCODE_MASK,
-                       SDLK_KP_XOR = (int)SDL_Scancode.SDL_SCANCODE_KP_XOR | SDLK_SCANCODE_MASK,
-                       SDLK_KP_POWER = (int)SDL_Scancode.SDL_SCANCODE_KP_POWER | SDLK_SCANCODE_MASK,
-                       SDLK_KP_PERCENT = (int)SDL_Scancode.SDL_SCANCODE_KP_PERCENT | SDLK_SCANCODE_MASK,
-                       SDLK_KP_LESS = (int)SDL_Scancode.SDL_SCANCODE_KP_LESS | SDLK_SCANCODE_MASK,
-                       SDLK_KP_GREATER = (int)SDL_Scancode.SDL_SCANCODE_KP_GREATER | SDLK_SCANCODE_MASK,
-                       SDLK_KP_AMPERSAND = (int)SDL_Scancode.SDL_SCANCODE_KP_AMPERSAND | SDLK_SCANCODE_MASK,
-                       SDLK_KP_DBLAMPERSAND =
-                       (int)SDL_Scancode.SDL_SCANCODE_KP_DBLAMPERSAND | SDLK_SCANCODE_MASK,
-                       SDLK_KP_VERTICALBAR =
-                       (int)SDL_Scancode.SDL_SCANCODE_KP_VERTICALBAR | SDLK_SCANCODE_MASK,
-                       SDLK_KP_DBLVERTICALBAR =
-                       (int)SDL_Scancode.SDL_SCANCODE_KP_DBLVERTICALBAR | SDLK_SCANCODE_MASK,
-                       SDLK_KP_COLON = (int)SDL_Scancode.SDL_SCANCODE_KP_COLON | SDLK_SCANCODE_MASK,
-                       SDLK_KP_HASH = (int)SDL_Scancode.SDL_SCANCODE_KP_HASH | SDLK_SCANCODE_MASK,
-                       SDLK_KP_SPACE = (int)SDL_Scancode.SDL_SCANCODE_KP_SPACE | SDLK_SCANCODE_MASK,
-                       SDLK_KP_AT = (int)SDL_Scancode.SDL_SCANCODE_KP_AT | SDLK_SCANCODE_MASK,
-                       SDLK_KP_EXCLAM = (int)SDL_Scancode.SDL_SCANCODE_KP_EXCLAM | SDLK_SCANCODE_MASK,
-                       SDLK_KP_MEMSTORE = (int)SDL_Scancode.SDL_SCANCODE_KP_MEMSTORE | SDLK_SCANCODE_MASK,
-                       SDLK_KP_MEMRECALL = (int)SDL_Scancode.SDL_SCANCODE_KP_MEMRECALL | SDLK_SCANCODE_MASK,
-                       SDLK_KP_MEMCLEAR = (int)SDL_Scancode.SDL_SCANCODE_KP_MEMCLEAR | SDLK_SCANCODE_MASK,
-                       SDLK_KP_MEMADD = (int)SDL_Scancode.SDL_SCANCODE_KP_MEMADD | SDLK_SCANCODE_MASK,
-                       SDLK_KP_MEMSUBTRACT =
-                       (int)SDL_Scancode.SDL_SCANCODE_KP_MEMSUBTRACT | SDLK_SCANCODE_MASK,
-                       SDLK_KP_MEMMULTIPLY =
-                       (int)SDL_Scancode.SDL_SCANCODE_KP_MEMMULTIPLY | SDLK_SCANCODE_MASK,
-                       SDLK_KP_MEMDIVIDE = (int)SDL_Scancode.SDL_SCANCODE_KP_MEMDIVIDE | SDLK_SCANCODE_MASK,
-                       SDLK_KP_PLUSMINUS = (int)SDL_Scancode.SDL_SCANCODE_KP_PLUSMINUS | SDLK_SCANCODE_MASK,
-                       SDLK_KP_CLEAR = (int)SDL_Scancode.SDL_SCANCODE_KP_CLEAR | SDLK_SCANCODE_MASK,
-                       SDLK_KP_CLEARENTRY = (int)SDL_Scancode.SDL_SCANCODE_KP_CLEARENTRY | SDLK_SCANCODE_MASK,
-                       SDLK_KP_BINARY = (int)SDL_Scancode.SDL_SCANCODE_KP_BINARY | SDLK_SCANCODE_MASK,
-                       SDLK_KP_OCTAL = (int)SDL_Scancode.SDL_SCANCODE_KP_OCTAL | SDLK_SCANCODE_MASK,
-                       SDLK_KP_DECIMAL = (int)SDL_Scancode.SDL_SCANCODE_KP_DECIMAL | SDLK_SCANCODE_MASK,
-                       SDLK_KP_HEXADECIMAL =
-                       (int)SDL_Scancode.SDL_SCANCODE_KP_HEXADECIMAL | SDLK_SCANCODE_MASK,
-
-                       SDLK_LCTRL = (int)SDL_Scancode.SDL_SCANCODE_LCTRL | SDLK_SCANCODE_MASK,
-                       SDLK_LSHIFT = (int)SDL_Scancode.SDL_SCANCODE_LSHIFT | SDLK_SCANCODE_MASK,
-                       SDLK_LALT = (int)SDL_Scancode.SDL_SCANCODE_LALT | SDLK_SCANCODE_MASK,
-                       SDLK_LGUI = (int)SDL_Scancode.SDL_SCANCODE_LGUI | SDLK_SCANCODE_MASK,
-                       SDLK_RCTRL = (int)SDL_Scancode.SDL_SCANCODE_RCTRL | SDLK_SCANCODE_MASK,
-                       SDLK_RSHIFT = (int)SDL_Scancode.SDL_SCANCODE_RSHIFT | SDLK_SCANCODE_MASK,
-                       SDLK_RALT = (int)SDL_Scancode.SDL_SCANCODE_RALT | SDLK_SCANCODE_MASK,
-                       SDLK_RGUI = (int)SDL_Scancode.SDL_SCANCODE_RGUI | SDLK_SCANCODE_MASK,
-
-                       SDLK_MODE = (int)SDL_Scancode.SDL_SCANCODE_MODE | SDLK_SCANCODE_MASK,
-
-                       SDLK_AUDIONEXT = (int)SDL_Scancode.SDL_SCANCODE_AUDIONEXT | SDLK_SCANCODE_MASK,
-                       SDLK_AUDIOPREV = (int)SDL_Scancode.SDL_SCANCODE_AUDIOPREV | SDLK_SCANCODE_MASK,
-                       SDLK_AUDIOSTOP = (int)SDL_Scancode.SDL_SCANCODE_AUDIOSTOP | SDLK_SCANCODE_MASK,
-                       SDLK_AUDIOPLAY = (int)SDL_Scancode.SDL_SCANCODE_AUDIOPLAY | SDLK_SCANCODE_MASK,
-                       SDLK_AUDIOMUTE = (int)SDL_Scancode.SDL_SCANCODE_AUDIOMUTE | SDLK_SCANCODE_MASK,
-                       SDLK_MEDIASELECT = (int)SDL_Scancode.SDL_SCANCODE_MEDIASELECT | SDLK_SCANCODE_MASK,
-                       SDLK_WWW = (int)SDL_Scancode.SDL_SCANCODE_WWW | SDLK_SCANCODE_MASK,
-                       SDLK_MAIL = (int)SDL_Scancode.SDL_SCANCODE_MAIL | SDLK_SCANCODE_MASK,
-                       SDLK_CALCULATOR = (int)SDL_Scancode.SDL_SCANCODE_CALCULATOR | SDLK_SCANCODE_MASK,
-                       SDLK_COMPUTER = (int)SDL_Scancode.SDL_SCANCODE_COMPUTER | SDLK_SCANCODE_MASK,
-                       SDLK_AC_SEARCH = (int)SDL_Scancode.SDL_SCANCODE_AC_SEARCH | SDLK_SCANCODE_MASK,
-                       SDLK_AC_HOME = (int)SDL_Scancode.SDL_SCANCODE_AC_HOME | SDLK_SCANCODE_MASK,
-                       SDLK_AC_BACK = (int)SDL_Scancode.SDL_SCANCODE_AC_BACK | SDLK_SCANCODE_MASK,
-                       SDLK_AC_FORWARD = (int)SDL_Scancode.SDL_SCANCODE_AC_FORWARD | SDLK_SCANCODE_MASK,
-                       SDLK_AC_STOP = (int)SDL_Scancode.SDL_SCANCODE_AC_STOP | SDLK_SCANCODE_MASK,
-                       SDLK_AC_REFRESH = (int)SDL_Scancode.SDL_SCANCODE_AC_REFRESH | SDLK_SCANCODE_MASK,
-                       SDLK_AC_BOOKMARKS = (int)SDL_Scancode.SDL_SCANCODE_AC_BOOKMARKS | SDLK_SCANCODE_MASK,
-
-                       SDLK_BRIGHTNESSDOWN =
-                       (int)SDL_Scancode.SDL_SCANCODE_BRIGHTNESSDOWN | SDLK_SCANCODE_MASK,
-                       SDLK_BRIGHTNESSUP = (int)SDL_Scancode.SDL_SCANCODE_BRIGHTNESSUP | SDLK_SCANCODE_MASK,
-                       SDLK_DISPLAYSWITCH = (int)SDL_Scancode.SDL_SCANCODE_DISPLAYSWITCH | SDLK_SCANCODE_MASK,
-                       SDLK_KBDILLUMTOGGLE =
-                       (int)SDL_Scancode.SDL_SCANCODE_KBDILLUMTOGGLE | SDLK_SCANCODE_MASK,
-                       SDLK_KBDILLUMDOWN = (int)SDL_Scancode.SDL_SCANCODE_KBDILLUMDOWN | SDLK_SCANCODE_MASK,
-                       SDLK_KBDILLUMUP = (int)SDL_Scancode.SDL_SCANCODE_KBDILLUMUP | SDLK_SCANCODE_MASK,
-                       SDLK_EJECT = (int)SDL_Scancode.SDL_SCANCODE_EJECT | SDLK_SCANCODE_MASK,
-                       SDLK_SLEEP = (int)SDL_Scancode.SDL_SCANCODE_SLEEP | SDLK_SCANCODE_MASK
-               }
-
-               /* Key modifiers (bitfield) */
-               [Flags]
-               public enum SDL_Keymod : ushort
-               {
-                       KMOD_NONE = 0x0000,
-                       KMOD_LSHIFT = 0x0001,
-                       KMOD_RSHIFT = 0x0002,
-                       KMOD_LCTRL = 0x0040,
-                       KMOD_RCTRL = 0x0080,
-                       KMOD_LALT = 0x0100,
-                       KMOD_RALT = 0x0200,
-                       KMOD_LGUI = 0x0400,
-                       KMOD_RGUI = 0x0800,
-                       KMOD_NUM = 0x1000,
-                       KMOD_CAPS = 0x2000,
-                       KMOD_MODE = 0x4000,
-                       KMOD_RESERVED = 0x8000,
-
-                       /* These are defines in the SDL headers */
-                       KMOD_CTRL = (KMOD_LCTRL | KMOD_RCTRL),
-                       KMOD_SHIFT = (KMOD_LSHIFT | KMOD_RSHIFT),
-                       KMOD_ALT = (KMOD_LALT | KMOD_RALT),
-                       KMOD_GUI = (KMOD_LGUI | KMOD_RGUI)
-               }
-
-               #endregion
-
-               #region SDL_keyboard.h
-
-               [StructLayout(LayoutKind.Sequential)]
-               public struct SDL_Keysym
-               {
-                       public SDL_Scancode scancode;
-                       public SDL_Keycode sym;
-                       public SDL_Keymod mod; /* UInt16 */
-                       public UInt32 unicode; /* Deprecated */
-               }
-
-               /* Get the window which has kbd focus */
-               /* Return type is an SDL_Window pointer */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern IntPtr SDL_GetKeyboardFocus();
-
-               /* Get a snapshot of the keyboard state. */
-               /* Return value is a pointer to a UInt8 array */
-               /* Numkeys returns the size of the array if non-null */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern IntPtr SDL_GetKeyboardState(out int numkeys);
-
-               /* Get the current key modifier state for the keyboard. */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern SDL_Keymod SDL_GetModState();
-
-               /* Set the current key modifier state */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_SetModState(SDL_Keymod modstate);
-
-               /* Get the key code corresponding to the given scancode
-                * with the current keyboard layout.
-                */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern SDL_Keycode SDL_GetKeyFromScancode(SDL_Scancode scancode);
-
-               /* Get the scancode for the given keycode */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern SDL_Scancode SDL_GetScancodeFromKey(SDL_Keycode key);
-
-               /* Wrapper for SDL_GetScancodeName */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               [return : MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler), MarshalCookie = LPUtf8StrMarshaler.LeaveAllocated)]
-               public static extern string SDL_GetScancodeName(SDL_Scancode scancode);
-
-               /* Get a scancode from a human-readable name */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern SDL_Scancode SDL_GetScancodeFromName(
-                       [In()] [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler))] string name
-               );
-
-               /* Wrapper for SDL_GetKeyName */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               [return : MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler), MarshalCookie = LPUtf8StrMarshaler.LeaveAllocated)]
-               public static extern string SDL_GetKeyName(SDL_Keycode key);
-
-               /* Get a key code from a human-readable name */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern SDL_Keycode SDL_GetKeyFromName(
-                       [In()] [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler))] string name
-               );
-
-               /* Start accepting Unicode text input events, show keyboard */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_StartTextInput();
-
-               /* Check if unicode input events are enabled */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern SDL_bool SDL_IsTextInputActive();
-
-               /* Stop receiving any text input events, hide onscreen kbd */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_StopTextInput();
-
-               /* Set the rectangle used for text input, hint for IME */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_SetTextInputRect(ref SDL_Rect rect);
-
-               /* Does the platform support an on-screen keyboard? */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern SDL_bool SDL_HasScreenKeyboardSupport();
-
-               /* Is the on-screen keyboard shown for a given window? */
-               /* window is an SDL_Window pointer */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern SDL_bool SDL_IsScreenKeyboardShown(IntPtr window);
-
-               #endregion
-
-               #region SDL_mouse.c
-
-               /* Note: SDL_Cursor is a typedef normally. We'll treat it as
-                * an IntPtr, because C# doesn't do typedefs. Yay!
-                */
-
-               /* System cursor types */
-               public enum SDL_SystemCursor
-               {
-                       SDL_SYSTEM_CURSOR_ARROW,        // Arrow
-                       SDL_SYSTEM_CURSOR_IBEAM,        // I-beam
-                       SDL_SYSTEM_CURSOR_WAIT,         // Wait
-                       SDL_SYSTEM_CURSOR_CROSSHAIR,    // Crosshair
-                       SDL_SYSTEM_CURSOR_WAITARROW,    // Small wait cursor (or Wait if not available)
-                       SDL_SYSTEM_CURSOR_SIZENWSE,     // Double arrow pointing northwest and southeast
-                       SDL_SYSTEM_CURSOR_SIZENESW,     // Double arrow pointing northeast and southwest
-                       SDL_SYSTEM_CURSOR_SIZEWE,       // Double arrow pointing west and east
-                       SDL_SYSTEM_CURSOR_SIZENS,       // Double arrow pointing north and south
-                       SDL_SYSTEM_CURSOR_SIZEALL,      // Four pointed arrow pointing north, south, east, and west
-                       SDL_SYSTEM_CURSOR_NO,           // Slashed circle or crossbones
-                       SDL_SYSTEM_CURSOR_HAND,         // Hand
-                       SDL_NUM_SYSTEM_CURSORS
-               }
-
-               /* Get the window which currently has mouse focus */
-               /* Return value is an SDL_Window pointer */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern IntPtr SDL_GetMouseFocus();
-
-               /* Get the current state of the mouse */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern UInt32 SDL_GetMouseState(out int x, out int y);
-
-               /* Get the current state of the mouse */
-               /* This overload allows for passing NULL to x */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern UInt32 SDL_GetMouseState(IntPtr x, out int y);
-
-               /* Get the current state of the mouse */
-               /* This overload allows for passing NULL to y */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern UInt32 SDL_GetMouseState(out int x, IntPtr y);
-
-               /* Get the current state of the mouse */
-               /* This overload allows for passing NULL to both x and y */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern UInt32 SDL_GetMouseState(IntPtr x, IntPtr y);
-
-               /* Get the current state of the mouse, in relation to the desktop */
-               /* Only available in 2.0.4 */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern UInt32 SDL_GetGlobalMouseState(out int x, out int y);
-
-               /* Get the current state of the mouse, in relation to the desktop */
-               /* Only available in 2.0.4 */
-               /* This overload allows for passing NULL to x */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern UInt32 SDL_GetGlobalMouseState(IntPtr x, out int y);
-
-               /* Get the current state of the mouse, in relation to the desktop */
-               /* Only available in 2.0.4 */
-               /* This overload allows for passing NULL to y */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern UInt32 SDL_GetGlobalMouseState(out int x, IntPtr y);
-
-               /* Get the current state of the mouse, in relation to the desktop */
-               /* Only available in 2.0.4 */
-               /* This overload allows for passing NULL to both x and y */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern UInt32 SDL_GetGlobalMouseState(IntPtr x, IntPtr y);
-
-               /* Get the mouse state with relative coords*/
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern UInt32 SDL_GetRelativeMouseState(out int x, out int y);
-
-               /* Set the mouse cursor's position (within a window) */
-               /* window is an SDL_Window pointer */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_WarpMouseInWindow(IntPtr window, int x, int y);
-
-               /* Set the mouse cursor's position in global screen space */
-               /* Only available in 2.0.4 */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_WarpMouseGlobal(int x, int y);
-
-               /* Enable/Disable relative mouse mode (grabs mouse, rel coords) */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_SetRelativeMouseMode(SDL_bool enabled);
-
-               /* Capture the mouse, to track input outside an SDL window */
-               /* Only available in 2.0.4 */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_CaptureMouse(SDL_bool enabled);
-
-               /* Query if the relative mouse mode is enabled */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern SDL_bool SDL_GetRelativeMouseMode();
-
-               /* Create a cursor from bitmap data (amd mask) in MSB format */
-               /* data and mask are byte arrays, and w must be a multiple of 8 */
-               /* return value is an SDL_Cursor pointer */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern IntPtr SDL_CreateCursor(
-                       IntPtr data,
-                       IntPtr mask,
-                       int w,
-                       int h,
-                       int hot_x,
-                       int hot_y
-               );
-
-               /* Create a cursor from an SDL_Surface */
-               /* IntPtr refers to an SDL_Cursor*, surface to an SDL_Surface* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern IntPtr SDL_CreateColorCursor(
-                       IntPtr surface,
-                       int hot_x,
-                       int hot_y
-               );
-
-               /* Create a cursor from a system cursor id */
-               /* return value is an SDL_Cursor pointer */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern IntPtr SDL_CreateSystemCursor(SDL_SystemCursor id);
-
-               /* Set the active cursor */
-               /* cursor is an SDL_Cursor pointer */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_SetCursor(IntPtr cursor);
-
-               /* Return the active cursor */
-               /* return value is an SDL_Cursor pointer */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern IntPtr SDL_GetCursor();
-
-               /* Frees a cursor created with one of the CreateCursor functions */
-               /* cursor in an SDL_Cursor pointer */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_FreeCursor(IntPtr cursor);
-
-               /* Toggle whether or not the cursor is shown */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_ShowCursor(int toggle);
-
-               public static uint SDL_BUTTON(uint X)
-               {
-                       // If only there were a better way of doing this in C#
-                       return (uint) (1 << ((int) X - 1));
-               }
-
-               public const uint SDL_BUTTON_LEFT =     1;
-               public const uint SDL_BUTTON_MIDDLE =   2;
-               public const uint SDL_BUTTON_RIGHT =    3;
-               public const uint SDL_BUTTON_X1 =       4;
-               public const uint SDL_BUTTON_X2 =       5;
-               public static readonly UInt32 SDL_BUTTON_LMASK =        SDL_BUTTON(SDL_BUTTON_LEFT);
-               public static readonly UInt32 SDL_BUTTON_MMASK =        SDL_BUTTON(SDL_BUTTON_MIDDLE);
-               public static readonly UInt32 SDL_BUTTON_RMASK =        SDL_BUTTON(SDL_BUTTON_RIGHT);
-               public static readonly UInt32 SDL_BUTTON_X1MASK =       SDL_BUTTON(SDL_BUTTON_X1);
-               public static readonly UInt32 SDL_BUTTON_X2MASK =       SDL_BUTTON(SDL_BUTTON_X2);
-
-               #endregion
-
-               #region SDL_touch.h
-
-               public const uint SDL_TOUCH_MOUSEID = uint.MaxValue;
-
-               public struct SDL_Finger
-               {
-                       public long id; // SDL_FingerID
-                       public float x;
-                       public float y;
-                       public float pressure;
-               }
-
-               /**
-                *  \brief Get the number of registered touch devices.
-                */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_GetNumTouchDevices();
-
-               /**
-                *  \brief Get the touch ID with the given index, or 0 if the index is invalid.
-                */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern long SDL_GetTouchDevice(int index);
-
-               /**
-                *  \brief Get the number of active fingers for a given touch device.
-                */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_GetNumTouchFingers(long touchID);
-
-               /**
-                *  \brief Get the finger object of the given touch, with the given index.
-                *  Returns pointer to SDL_Finger.
-                */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern IntPtr SDL_GetTouchFinger(long touchID, int index);
-
-               #endregion
-
-               #region SDL_joystick.h
-
-               public const byte SDL_HAT_CENTERED =    0x00;
-               public const byte SDL_HAT_UP =          0x01;
-               public const byte SDL_HAT_RIGHT =       0x02;
-               public const byte SDL_HAT_DOWN =        0x04;
-               public const byte SDL_HAT_LEFT =        0x08;
-               public const byte SDL_HAT_RIGHTUP =     SDL_HAT_RIGHT | SDL_HAT_UP;
-               public const byte SDL_HAT_RIGHTDOWN =   SDL_HAT_RIGHT | SDL_HAT_DOWN;
-               public const byte SDL_HAT_LEFTUP =      SDL_HAT_LEFT | SDL_HAT_UP;
-               public const byte SDL_HAT_LEFTDOWN =    SDL_HAT_LEFT | SDL_HAT_DOWN;
-
-               public enum SDL_JoystickPowerLevel
-               {
-                       SDL_JOYSTICK_POWER_UNKNOWN = -1,
-                       SDL_JOYSTICK_POWER_EMPTY,
-                       SDL_JOYSTICK_POWER_LOW,
-                       SDL_JOYSTICK_POWER_MEDIUM,
-                       SDL_JOYSTICK_POWER_FULL,
-                       SDL_JOYSTICK_POWER_WIRED,
-                       SDL_JOYSTICK_POWER_MAX
-               }
-
-               /* joystick refers to an SDL_Joystick* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_JoystickClose(IntPtr joystick);
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_JoystickEventState(int state);
-
-               /* joystick refers to an SDL_Joystick* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern short SDL_JoystickGetAxis(
-                       IntPtr joystick,
-                       int axis
-               );
-
-               /* joystick refers to an SDL_Joystick* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_JoystickGetBall(
-                       IntPtr joystick,
-                       int ball,
-                       out int dx,
-                       out int dy
-               );
-
-               /* joystick refers to an SDL_Joystick* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern byte SDL_JoystickGetButton(
-                       IntPtr joystick,
-                       int button
-               );
-
-               /* joystick refers to an SDL_Joystick* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern byte SDL_JoystickGetHat(
-                       IntPtr joystick,
-                       int hat
-               );
-
-               /* joystick refers to an SDL_Joystick* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               [return : MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler), MarshalCookie = LPUtf8StrMarshaler.LeaveAllocated)]
-               public static extern string SDL_JoystickName(
-                       IntPtr joystick
-               );
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               [return : MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler), MarshalCookie = LPUtf8StrMarshaler.LeaveAllocated)]
-               public static extern string SDL_JoystickNameForIndex(
-                       int device_index
-               );
-
-               /* joystick refers to an SDL_Joystick* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_JoystickNumAxes(IntPtr joystick);
-
-               /* joystick refers to an SDL_Joystick* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_JoystickNumBalls(IntPtr joystick);
-
-               /* joystick refers to an SDL_Joystick* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_JoystickNumButtons(IntPtr joystick);
-
-               /* joystick refers to an SDL_Joystick* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_JoystickNumHats(IntPtr joystick);
-
-               /* IntPtr refers to an SDL_Joystick* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern IntPtr SDL_JoystickOpen(int device_index);
-
-               /* joystick refers to an SDL_Joystick* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_JoystickOpened(int device_index);
-
-               /* joystick refers to an SDL_Joystick* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_JoystickUpdate();
-
-               /* joystick refers to an SDL_Joystick* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_NumJoysticks();
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern Guid SDL_JoystickGetDeviceGUID(
-                       int device_index
-               );
-
-               /* joystick refers to an SDL_Joystick* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern Guid SDL_JoystickGetGUID(
-                       IntPtr joystick
-               );
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_JoystickGetGUIDString(
-                       Guid guid,
-                       byte[] pszGUID,
-                       int cbGUID
-               );
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern Guid SDL_JoystickGetGUIDFromString(
-                       [In()] [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler))]
-                               string pchGUID
-               );
-
-               /* joystick refers to an SDL_Joystick* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern SDL_bool SDL_JoystickGetAttached(IntPtr joystick);
-
-               /* int refers to an SDL_JoystickID, joystick to an SDL_Joystick* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_JoystickInstanceID(IntPtr joystick);
-
-               /* joystick refers to an SDL_Joystick*.
-                * This function is only available in 2.0.4 or higher.
-                */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern SDL_JoystickPowerLevel SDL_JoystickCurrentPowerLevel(
-                       IntPtr joystick
-               );
-
-               /* int refers to an SDL_JoystickID, IntPtr to an SDL_Joystick*.
-                * This function is only available in 2.0.4 or higher.
-                */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern IntPtr SDL_JoystickFromInstanceID(int joyid);
-
-               #endregion
-
-               #region SDL_gamecontroller.h
-
-               public enum SDL_GameControllerBindType
-               {
-                       SDL_CONTROLLER_BINDTYPE_NONE,
-                       SDL_CONTROLLER_BINDTYPE_BUTTON,
-                       SDL_CONTROLLER_BINDTYPE_AXIS,
-                       SDL_CONTROLLER_BINDTYPE_HAT
-               }
-
-               public enum SDL_GameControllerAxis
-               {
-                       SDL_CONTROLLER_AXIS_INVALID = -1,
-                       SDL_CONTROLLER_AXIS_LEFTX,
-                       SDL_CONTROLLER_AXIS_LEFTY,
-                       SDL_CONTROLLER_AXIS_RIGHTX,
-                       SDL_CONTROLLER_AXIS_RIGHTY,
-                       SDL_CONTROLLER_AXIS_TRIGGERLEFT,
-                       SDL_CONTROLLER_AXIS_TRIGGERRIGHT,
-                       SDL_CONTROLLER_AXIS_MAX
-               }
-
-               public enum SDL_GameControllerButton
-               {
-                       SDL_CONTROLLER_BUTTON_INVALID = -1,
-                       SDL_CONTROLLER_BUTTON_A,
-                       SDL_CONTROLLER_BUTTON_B,
-                       SDL_CONTROLLER_BUTTON_X,
-                       SDL_CONTROLLER_BUTTON_Y,
-                       SDL_CONTROLLER_BUTTON_BACK,
-                       SDL_CONTROLLER_BUTTON_GUIDE,
-                       SDL_CONTROLLER_BUTTON_START,
-                       SDL_CONTROLLER_BUTTON_LEFTSTICK,
-                       SDL_CONTROLLER_BUTTON_RIGHTSTICK,
-                       SDL_CONTROLLER_BUTTON_LEFTSHOULDER,
-                       SDL_CONTROLLER_BUTTON_RIGHTSHOULDER,
-                       SDL_CONTROLLER_BUTTON_DPAD_UP,
-                       SDL_CONTROLLER_BUTTON_DPAD_DOWN,
-                       SDL_CONTROLLER_BUTTON_DPAD_LEFT,
-                       SDL_CONTROLLER_BUTTON_DPAD_RIGHT,
-                       SDL_CONTROLLER_BUTTON_MAX,
-               }
-
-               // FIXME: I'd rather this somehow be private...
-               [StructLayout(LayoutKind.Sequential)]
-               public struct INTERNAL_GameControllerButtonBind_hat
-               {
-                       public int hat;
-                       public int hat_mask;
-               }
-
-               /* This struct has a union in it, hence the Explicit layout. */
-               [StructLayout(LayoutKind.Explicit)]
-               public struct SDL_GameControllerButtonBind
-               {
-                       /* Note: enum size is 4 bytes. */
-                       [FieldOffset(0)]
-                       public SDL_GameControllerBindType bindType;
-                       [FieldOffset(4)]
-                       public int button;
-                       [FieldOffset(4)]
-                       public int axis;
-                       [FieldOffset(4)]
-                       public INTERNAL_GameControllerButtonBind_hat hat;
-               }
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_GameControllerAddMapping(
-                       [In()] [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler))]
-                               string mappingString
-               );
-
-               /* THIS IS AN RWops FUNCTION! */
-               [DllImport(nativeLibName, EntryPoint = "SDL_GameControllerAddMappingsFromRW", CallingConvention = CallingConvention.Cdecl)]
-               private static extern int INTERNAL_SDL_GameControllerAddMappingsFromRW(
-                       IntPtr rw,
-                       int freerw
-               );
-               public static int SDL_GameControllerAddMappingsFromFile(string file)
-               {
-                       IntPtr rwops = INTERNAL_SDL_RWFromFile(file, "rb");
-                       return INTERNAL_SDL_GameControllerAddMappingsFromRW(rwops, 1);
-               }
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               [return : MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler), MarshalCookie = LPUtf8StrMarshaler.LeaveAllocated)]
-               public static extern string SDL_GameControllerMappingForGUID(
-                       Guid guid
-               );
-
-               /* gamecontroller refers to an SDL_GameController* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               [return : MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler), MarshalCookie = LPUtf8StrMarshaler.LeaveAllocated)]
-               public static extern string SDL_GameControllerMapping(
-                       IntPtr gamecontroller
-               );
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern SDL_bool SDL_IsGameController(int joystick_index);
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               [return : MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler), MarshalCookie = LPUtf8StrMarshaler.LeaveAllocated)]
-               public static extern string SDL_GameControllerNameForIndex(
-                       int joystick_index
-               );
-
-               /* IntPtr refers to an SDL_GameController* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern IntPtr SDL_GameControllerOpen(int joystick_index);
-
-               /* gamecontroller refers to an SDL_GameController* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               [return : MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler), MarshalCookie = LPUtf8StrMarshaler.LeaveAllocated)]
-               public static extern string SDL_GameControllerName(
-                       IntPtr gamecontroller
-               );
-
-               /* gamecontroller refers to an SDL_GameController* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern SDL_bool SDL_GameControllerGetAttached(
-                       IntPtr gamecontroller
-               );
-
-               /* IntPtr refers to an SDL_Joystick*
-                * gamecontroller refers to an SDL_GameController*
-                */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern IntPtr SDL_GameControllerGetJoystick(
-                       IntPtr gamecontroller
-               );
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_GameControllerEventState(int state);
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_GameControllerUpdate();
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern SDL_GameControllerAxis SDL_GameControllerGetAxisFromString(
-                       [In()] [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler))]
-                               string pchString
-               );
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               [return : MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler), MarshalCookie = LPUtf8StrMarshaler.LeaveAllocated)]
-               public static extern string SDL_GameControllerGetStringForAxis(
-                       SDL_GameControllerAxis axis
-               );
-
-               /* gamecontroller refers to an SDL_GameController* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern SDL_GameControllerButtonBind SDL_GameControllerGetBindForAxis(
-                       IntPtr gamecontroller,
-                       SDL_GameControllerAxis axis
-               );
-
-               /* gamecontroller refers to an SDL_GameController* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern short SDL_GameControllerGetAxis(
-                       IntPtr gamecontroller,
-                       SDL_GameControllerAxis axis
-               );
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern SDL_GameControllerButton SDL_GameControllerGetButtonFromString(
-                       [In()] [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler))]
-                               string pchString
-               );
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               [return : MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler), MarshalCookie = LPUtf8StrMarshaler.LeaveAllocated)]
-               public static extern string SDL_GameControllerGetStringForButton(
-                       SDL_GameControllerButton button
-               );
-
-               /* gamecontroller refers to an SDL_GameController* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern SDL_GameControllerButtonBind SDL_GameControllerGetBindForButton(
-                       IntPtr gamecontroller,
-                       SDL_GameControllerButton button
-               );
-
-               /* gamecontroller refers to an SDL_GameController* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern byte SDL_GameControllerGetButton(
-                       IntPtr gamecontroller,
-                       SDL_GameControllerButton button
-               );
-
-               /* gamecontroller refers to an SDL_GameController* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_GameControllerClose(
-                       IntPtr gamecontroller
-               );
-
-               /* int refers to an SDL_JoystickID, IntPtr to an SDL_GameController*.
-                * This function is only available in 2.0.4 or higher.
-                */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern IntPtr SDL_GameControllerFromInstanceID(int joyid);
-
-               #endregion
-
-               #region SDL_haptic.h
-
-               /* SDL_HapticEffect type */
-               public const ushort SDL_HAPTIC_CONSTANT =       (1 << 0);
-               public const ushort SDL_HAPTIC_SINE =           (1 << 1);
-               public const ushort SDL_HAPTIC_LEFTRIGHT =      (1 << 2);
-               public const ushort SDL_HAPTIC_TRIANGLE =       (1 << 3);
-               public const ushort SDL_HAPTIC_SAWTOOTHUP =     (1 << 4);
-               public const ushort SDL_HAPTIC_SAWTOOTHDOWN =   (1 << 5);
-               public const ushort SDL_HAPTIC_SPRING =         (1 << 7);
-               public const ushort SDL_HAPTIC_DAMPER =         (1 << 8);
-               public const ushort SDL_HAPTIC_INERTIA =        (1 << 9);
-               public const ushort SDL_HAPTIC_FRICTION =       (1 << 10);
-               public const ushort SDL_HAPTIC_CUSTOM =         (1 << 11);
-               public const ushort SDL_HAPTIC_GAIN =           (1 << 12);
-               public const ushort SDL_HAPTIC_AUTOCENTER =     (1 << 13);
-               public const ushort SDL_HAPTIC_STATUS =         (1 << 14);
-               public const ushort SDL_HAPTIC_PAUSE =          (1 << 15);
-
-               /* SDL_HapticDirection type */
-               public const byte SDL_HAPTIC_POLAR =            0;
-               public const byte SDL_HAPTIC_CARTESIAN =        1;
-               public const byte SDL_HAPTIC_SPHERICAL =        2;
-
-               /* SDL_HapticRunEffect */
-               public const uint SDL_HAPTIC_INFINITY = 4292967295U;
-
-               [StructLayout(LayoutKind.Sequential)]
-               public unsafe struct SDL_HapticDirection
-               {
-                       public byte type;
-                       public fixed int dir[3];
-               }
-
-               [StructLayout(LayoutKind.Sequential)]
-               public struct SDL_HapticConstant
-               {
-                       // Header
-                       public ushort type;
-                       public SDL_HapticDirection direction;
-                       // Replay
-                       public uint length;
-                       public ushort delay;
-                       // Trigger
-                       public ushort button;
-                       public ushort interval;
-                       // Constant
-                       public short level;
-                       // Envelope
-                       public ushort attack_length;
-                       public ushort attack_level;
-                       public ushort fade_length;
-                       public ushort fade_level;
-               }
-
-               [StructLayout(LayoutKind.Sequential)]
-               public struct SDL_HapticPeriodic
-               {
-                       // Header
-                       public ushort type;
-                       public SDL_HapticDirection direction;
-                       // Replay
-                       public uint length;
-                       public ushort delay;
-                       // Trigger
-                       public ushort button;
-                       public ushort interval;
-                       // Periodic
-                       public ushort period;
-                       public short magnitude;
-                       public short offset;
-                       public ushort phase;
-                       // Envelope
-                       public ushort attack_length;
-                       public ushort attack_level;
-                       public ushort fade_length;
-                       public ushort fade_level;
-               }
-
-               [StructLayout(LayoutKind.Sequential)]
-               public unsafe struct SDL_HapticCondition
-               {
-                       // Header
-                       public ushort type;
-                       public SDL_HapticDirection direction;
-                       // Replay
-                       public uint length;
-                       public ushort delay;
-                       // Trigger
-                       public ushort button;
-                       public ushort interval;
-                       // Condition
-                       public fixed ushort right_sat[3];
-                       public fixed ushort left_sat[3];
-                       public fixed short right_coeff[3];
-                       public fixed short left_coeff[3];
-                       public fixed ushort deadband[3];
-                       public fixed short center[3];
-               }
-
-               [StructLayout(LayoutKind.Sequential)]
-               public struct SDL_HapticRamp
-               {
-                       // Header
-                       public ushort type;
-                       public SDL_HapticDirection direction;
-                       // Replay
-                       public uint length;
-                       public ushort delay;
-                       // Trigger
-                       public ushort button;
-                       public ushort interval;
-                       // Ramp
-                       public short start;
-                       public short end;
-                       // Envelope
-                       public ushort attack_length;
-                       public ushort attack_level;
-                       public ushort fade_length;
-                       public ushort fade_level;
-               }
-
-               [StructLayout(LayoutKind.Sequential)]
-               public struct SDL_HapticLeftRight
-               {
-                       // Header
-                       public ushort type;
-                       // Replay
-                       public uint length;
-                       // Rumble
-                       public ushort large_magnitude;
-                       public ushort small_magnitude;
-               }
-
-               [StructLayout(LayoutKind.Sequential)]
-               public struct SDL_HapticCustom
-               {
-                       // Header
-                       public ushort type;
-                       public SDL_HapticDirection direction;
-                       // Replay
-                       public uint length;
-                       public ushort delay;
-                       // Trigger
-                       public ushort button;
-                       public ushort interval;
-                       // Custom
-                       public byte channels;
-                       public ushort period;
-                       public ushort samples;
-                       public IntPtr data; // Uint16*
-                       // Envelope
-                       public ushort attack_length;
-                       public ushort attack_level;
-                       public ushort fade_length;
-                       public ushort fade_level;
-               }
-
-               [StructLayout(LayoutKind.Explicit)]
-               public struct SDL_HapticEffect
-               {
-                       [FieldOffset(0)]
-                       public ushort type;
-                       [FieldOffset(0)]
-                       public SDL_HapticConstant constant;
-                       [FieldOffset(0)]
-                       public SDL_HapticPeriodic periodic;
-                       [FieldOffset(0)]
-                       public SDL_HapticCondition condition;
-                       [FieldOffset(0)]
-                       public SDL_HapticRamp ramp;
-                       [FieldOffset(0)]
-                       public SDL_HapticLeftRight leftright;
-                       [FieldOffset(0)]
-                       public SDL_HapticCustom custom;
-               }
-
-               /* haptic refers to an SDL_Haptic* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_HapticClose(IntPtr haptic);
-
-               /* haptic refers to an SDL_Haptic* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_HapticDestroyEffect(
-                       IntPtr haptic,
-                       int effect
-               );
-
-               /* haptic refers to an SDL_Haptic* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_HapticEffectSupported(
-                       IntPtr haptic,
-                       ref SDL_HapticEffect effect
-               );
-
-               /* haptic refers to an SDL_Haptic* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_HapticGetEffectStatus(
-                       IntPtr haptic,
-                       int effect
-               );
-
-               /* haptic refers to an SDL_Haptic* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_HapticIndex(IntPtr haptic);
-
-               /* haptic refers to an SDL_Haptic* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               [return : MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler), MarshalCookie = LPUtf8StrMarshaler.LeaveAllocated)]
-               public static extern string SDL_HapticName(int device_index);
-
-               /* haptic refers to an SDL_Haptic* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_HapticNewEffect(
-                       IntPtr haptic,
-                       ref SDL_HapticEffect effect
-               );
-
-               /* haptic refers to an SDL_Haptic* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_HapticNumAxes(IntPtr haptic);
-
-               /* haptic refers to an SDL_Haptic* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_HapticNumEffects(IntPtr haptic);
-
-               /* haptic refers to an SDL_Haptic* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_HapticNumEffectsPlaying(IntPtr haptic);
-
-               /* IntPtr refers to an SDL_Haptic* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern IntPtr SDL_HapticOpen(int device_index);
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_HapticOpened(int device_index);
-
-               /* IntPtr refers to an SDL_Haptic*, joystick to an SDL_Joystick* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern IntPtr SDL_HapticOpenFromJoystick(
-                       IntPtr joystick
-               );
-
-               /* IntPtr refers to an SDL_Haptic* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern IntPtr SDL_HapticOpenFromMouse();
-
-               /* haptic refers to an SDL_Haptic* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_HapticPause(IntPtr haptic);
-
-               /* haptic refers to an SDL_Haptic* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern uint SDL_HapticQuery(IntPtr haptic);
-
-               /* haptic refers to an SDL_Haptic* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_HapticRumbleInit(IntPtr haptic);
-
-               /* haptic refers to an SDL_Haptic* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_HapticRumblePlay(
-                       IntPtr haptic,
-                       float strength,
-                       uint length
-               );
-
-               /* haptic refers to an SDL_Haptic* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_HapticRumbleStop(IntPtr haptic);
-
-               /* haptic refers to an SDL_Haptic* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_HapticRumbleSupported(IntPtr haptic);
-
-               /* haptic refers to an SDL_Haptic* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_HapticRunEffect(
-                       IntPtr haptic,
-                       int effect,
-                       uint iterations
-               );
-
-               /* haptic refers to an SDL_Haptic* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_HapticSetAutocenter(
-                       IntPtr haptic,
-                       int autocenter
-               );
-
-               /* haptic refers to an SDL_Haptic* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_HapticSetGain(
-                       IntPtr haptic,
-                       int gain
-               );
-
-               /* haptic refers to an SDL_Haptic* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_HapticStopAll(IntPtr haptic);
-
-               /* haptic refers to an SDL_Haptic* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_HapticStopEffect(
-                       IntPtr haptic,
-                       int effect
-               );
-
-               /* haptic refers to an SDL_Haptic* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_HapticUnpause(IntPtr haptic);
-
-               /* haptic refers to an SDL_Haptic* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_HapticUpdateEffect(
-                       IntPtr haptic,
-                       int effect,
-                       ref SDL_HapticEffect data
-               );
-
-               /* joystick refers to an SDL_Joystick* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_JoystickIsHaptic(IntPtr joystick);
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_MouseIsHaptic();
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_NumHaptics();
-
-               #endregion
-
-               #region SDL_audio.h
-
-               public const ushort SDL_AUDIO_MASK_BITSIZE =    0xFF;
-               public const ushort SDL_AUDIO_MASK_DATATYPE =   (1 << 8);
-               public const ushort SDL_AUDIO_MASK_ENDIAN =     (1 << 12);
-               public const ushort SDL_AUDIO_MASK_SIGNED =     (1 << 15);
-
-               public static ushort SDL_AUDIO_BITSIZE(ushort x)
-               {
-                       return (ushort) (x & SDL_AUDIO_MASK_BITSIZE);
-               }
-
-               public static bool SDL_AUDIO_ISFLOAT(ushort x)
-               {
-                       return (x & SDL_AUDIO_MASK_DATATYPE) != 0;
-               }
-
-               public static bool SDL_AUDIO_ISBIGENDIAN(ushort x)
-               {
-                       return (x & SDL_AUDIO_MASK_ENDIAN) != 0;
-               }
-
-               public static bool SDL_AUDIO_ISSIGNED(ushort x)
-               {
-                       return (x & SDL_AUDIO_MASK_SIGNED) != 0;
-               }
-
-               public static bool SDL_AUDIO_ISINT(ushort x)
-               {
-                       return (x & SDL_AUDIO_MASK_DATATYPE) == 0;
-               }
-
-               public static bool SDL_AUDIO_ISLITTLEENDIAN(ushort x)
-               {
-                       return (x & SDL_AUDIO_MASK_ENDIAN) == 0;
-               }
-
-               public static bool SDL_AUDIO_ISUNSIGNED(ushort x)
-               {
-                       return (x & SDL_AUDIO_MASK_SIGNED) == 0;
-               }
-
-               public const ushort AUDIO_U8 =          0x0008;
-               public const ushort AUDIO_S8 =          0x8008;
-               public const ushort AUDIO_U16LSB =      0x0010;
-               public const ushort AUDIO_S16LSB =      0x8010;
-               public const ushort AUDIO_U16MSB =      0x1010;
-               public const ushort AUDIO_S16MSB =      0x9010;
-               public const ushort AUDIO_U16 =         AUDIO_U16LSB;
-               public const ushort AUDIO_S16 =         AUDIO_S16LSB;
-               public const ushort AUDIO_S32LSB =      0x8020;
-               public const ushort AUDIO_S32MSB =      0x9020;
-               public const ushort AUDIO_S32 =         AUDIO_S32LSB;
-               public const ushort AUDIO_F32LSB =      0x8120;
-               public const ushort AUDIO_F32MSB =      0x9120;
-               public const ushort AUDIO_F32 =         AUDIO_F32LSB;
-
-               public static readonly ushort AUDIO_U16SYS =
-                       BitConverter.IsLittleEndian ? AUDIO_U16LSB : AUDIO_U16MSB;
-               public static readonly ushort AUDIO_S16SYS =
-                       BitConverter.IsLittleEndian ? AUDIO_S16LSB : AUDIO_S16MSB;
-               public static readonly ushort AUDIO_S32SYS =
-                       BitConverter.IsLittleEndian ? AUDIO_S32LSB : AUDIO_S32MSB;
-               public static readonly ushort AUDIO_F32SYS =
-                       BitConverter.IsLittleEndian ? AUDIO_F32LSB : AUDIO_F32MSB;
-
-               public const uint SDL_AUDIO_ALLOW_FREQUENCY_CHANGE =    0x00000001;
-               public const uint SDL_AUDIO_ALLOW_FORMAT_CHANGE =       0x00000001;
-               public const uint SDL_AUDIO_ALLOW_CHANNELS_CHANGE =     0x00000001;
-               public const uint SDL_AUDIO_ALLOW_ANY_CHANGE = (
-                       SDL_AUDIO_ALLOW_FREQUENCY_CHANGE |
-                       SDL_AUDIO_ALLOW_FORMAT_CHANGE |
-                       SDL_AUDIO_ALLOW_CHANNELS_CHANGE
-               );
-
-               public const int SDL_MIX_MAXVOLUME = 128;
-
-               public enum SDL_AudioStatus
-               {
-                       SDL_AUDIO_STOPPED,
-                       SDL_AUDIO_PLAYING,
-                       SDL_AUDIO_PAUSED
-               }
-
-               [StructLayout(LayoutKind.Sequential)]
-               public struct SDL_AudioSpec
-               {
-                       public int freq;
-                       public ushort format; // SDL_AudioFormat
-                       public byte channels;
-                       public byte silence;
-                       public ushort samples;
-                       public uint size;
-                       public SDL_AudioCallback callback;
-                       public IntPtr userdata; // void*
-               }
-
-               /* userdata refers to a void*, stream to a Uint8 */
-               [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
-               public delegate void SDL_AudioCallback(
-                       IntPtr userdata,
-                       IntPtr stream,
-                       int len
-               );
-
-               /* dev refers to an SDL_AudioDeviceID */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_AudioDeviceConnected(uint dev);
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_AudioInit(
-                       [In()] [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler))]
-                               string driver_name
-               );
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_AudioQuit();
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_CloseAudio();
-
-               /* dev refers to an SDL_AudioDeviceID */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_CloseAudioDevice(uint dev);
-
-               /* audio_buf refers to a malloc()'d buffer from SDL_LoadWAV */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_FreeWAV(IntPtr audio_buf);
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               [return : MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler), MarshalCookie = LPUtf8StrMarshaler.LeaveAllocated)]
-               public static extern string SDL_GetAudioDeviceName(
-                       int index,
-                       int iscapture
-               );
-
-               /* dev refers to an SDL_AudioDeviceID */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern SDL_AudioStatus SDL_GetAudioDeviceStatus(
-                       uint dev
-               );
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               [return : MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler), MarshalCookie = LPUtf8StrMarshaler.LeaveAllocated)]
-               public static extern string SDL_GetAudioDriver(int index);
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern SDL_AudioStatus SDL_GetAudioStatus();
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               [return : MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler), MarshalCookie = LPUtf8StrMarshaler.LeaveAllocated)]
-               public static extern string SDL_GetCurrentAudioDriver();
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_GetNumAudioDevices(int iscapture);
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_GetNumAudioDrivers();
-
-               /* audio_buf will refer to a malloc()'d byte buffer */
-               /* THIS IS AN RWops FUNCTION! */
-               [DllImport(nativeLibName, EntryPoint = "SDL_LoadWAV_RW", CallingConvention = CallingConvention.Cdecl)]
-               private static extern IntPtr INTERNAL_SDL_LoadWAV_RW(
-                       IntPtr src,
-                       int freesrc,
-                       ref SDL_AudioSpec spec,
-                       out IntPtr audio_buf,
-                       out uint audio_len
-               );
-               public static SDL_AudioSpec SDL_LoadWAV(
-                       string file,
-                       ref SDL_AudioSpec spec,
-                       out IntPtr audio_buf,
-                       out uint audio_len
-               ) {
-                       SDL_AudioSpec result;
-                       IntPtr rwops = INTERNAL_SDL_RWFromFile(file, "rb");
-                       IntPtr result_ptr = INTERNAL_SDL_LoadWAV_RW(
-                               rwops,
-                               1,
-                               ref spec,
-                               out audio_buf,
-                               out audio_len
-                       );
-                       result = (SDL_AudioSpec) Marshal.PtrToStructure(
-                               result_ptr,
-                               typeof(SDL_AudioSpec)
-                       );
-                       return result;
-               }
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_LockAudio();
-
-               /* dev refers to an SDL_AudioDeviceID */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_LockAudioDevice(uint dev);
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_MixAudio(
-                       [Out()] [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.U1, SizeParamIndex = 2)]
-                               byte[] dst,
-                       [In()] [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.U1, SizeParamIndex = 2)]
-                               byte[] src,
-                       uint len,
-                       int volume
-               );
-
-               /* format refers to an SDL_AudioFormat */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_MixAudioFormat(
-                       [Out()] [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.U1, SizeParamIndex = 3)]
-                               byte[] dst,
-                       [In()] [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.U1, SizeParamIndex = 3)]
-                               byte[] src,
-                       ushort format,
-                       uint len,
-                       int volume
-               );
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_OpenAudio(
-                       ref SDL_AudioSpec desired,
-                       out SDL_AudioSpec obtained
-               );
-
-               /* uint refers to an SDL_AudioDeviceID */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern uint SDL_OpenAudioDevice(
-                       [In()] [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler))]
-                               string device,
-                       int iscapture,
-                       ref SDL_AudioSpec desired,
-                       out SDL_AudioSpec obtained,
-                       int allowed_changes
-               );
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_PauseAudio(int pause_on);
-
-               /* dev refers to an SDL_AudioDeviceID */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_PauseAudioDevice(
-                       uint dev,
-                       int pause_on
-               );
-
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_UnlockAudio();
-
-               /* dev refers to an SDL_AudioDeviceID */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_UnlockAudioDevice(uint dev);
-
-               /* dev refers to an SDL_AudioDeviceID, data to a void* */
-               /* Only available in 2.0.4 */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_QueueAudio(
-                       uint dev,
-                       IntPtr data,
-                       UInt32 len
-               );
-
-               /* dev refers to an SDL_AudioDeviceID */
-               /* Only available in 2.0.4 */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern UInt32 SDL_GetQueuedAudioSize(uint dev);
-
-               /* dev refers to an SDL_AudioDeviceID */
-               /* Only available in 2.0.4 */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_ClearQueuedAudio(uint dev);
-
-               #endregion
-
-               #region SDL_timer.h
-
-               /* System timers rely on different OS mechanisms depending on
-                * which operating system SDL2 is compiled against.
-                */
-
-               /* Compare tick values, return true if A has passed B. Introduced in SDL 2.0.1,
-                * but does not require it (it was a macro).
-                */
-               public static bool SDL_TICKS_PASSED(UInt32 A, UInt32 B)
-               {
-                       return ((Int32)(B - A) <= 0);
-               }
-
-               /* Delays the thread's processing based on the milliseconds parameter */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern void SDL_Delay(UInt32 ms);
-
-               /* Returns the milliseconds that have passed since SDL was initialized */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern UInt32 SDL_GetTicks();
-
-               /* Get the current value of the high resolution counter */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern UInt64 SDL_GetPerformanceCounter();
-
-               /* Get the count per second of the high resolution counter */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern UInt64 SDL_GetPerformanceFrequency();
-
-               /* param refers to a void* */
-               public delegate UInt32 SDL_TimerCallback(UInt32 interval, IntPtr param);
-
-               /* int refers to an SDL_TimerID, param to a void* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_AddTimer(
-                       UInt32 interval,
-                       SDL_TimerCallback callback,
-                       IntPtr param
-               );
-
-               /* id refers to an SDL_TimerID */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern SDL_bool SDL_RemoveTimer(int id);
-
-               #endregion
-
-               #region SDL_syswm.h
-
-               public enum SDL_SYSWM_TYPE
-               {
-                       SDL_SYSWM_UNKNOWN,
-                       SDL_SYSWM_WINDOWS,
-                       SDL_SYSWM_X11,
-                       SDL_SYSWM_DIRECTFB,
-                       SDL_SYSWM_COCOA,
-                       SDL_SYSWM_UIKIT,
-                       SDL_SYSWM_WAYLAND,
-                       SDL_SYSWM_MIR,
-                       SDL_SYSWM_WINRT,
-                       SDL_SYSWM_ANDROID
-               }
-
-               // FIXME: I wish these weren't public...
-               [StructLayout(LayoutKind.Sequential)]
-               public struct INTERNAL_windows_wminfo
-               {
-                       public IntPtr window; // Refers to an HWND
-                       public IntPtr hdc; // Refers to an HDC
-               }
-
-               [StructLayout(LayoutKind.Sequential)]
-               public struct INTERNAL_winrt_wminfo
-               {
-                       public IntPtr window; // Refers to an IInspectable*
-               }
-
-               [StructLayout(LayoutKind.Sequential)]
-               public struct INTERNAL_x11_wminfo
-               {
-                       public IntPtr display; // Refers to a Display*
-                       public IntPtr window; // Refers to a Window (XID, use ToInt64!)
-               }
-
-               [StructLayout(LayoutKind.Sequential)]
-               public struct INTERNAL_directfb_wminfo
-               {
-                       public IntPtr dfb; // Refers to an IDirectFB*
-                       public IntPtr window; // Refers to an IDirectFBWindow*
-                       public IntPtr surface; // Refers to an IDirectFBSurface*
-               }
-
-               [StructLayout(LayoutKind.Sequential)]
-               public struct INTERNAL_cocoa_wminfo
-               {
-                       public IntPtr window; // Refers to an NSWindow*
-               }
-
-               [StructLayout(LayoutKind.Sequential)]
-               public struct INTERNAL_uikit_wminfo
-               {
-                       public IntPtr window; // Refers to a UIWindow*
-                       public uint framebuffer;
-                       public uint colorbuffer;
-                       public uint resolveFramebuffer;
-               }
-
-               [StructLayout(LayoutKind.Sequential)]
-               public struct INTERNAL_wayland_wminfo
-               {
-                       public IntPtr display; // Refers to a wl_display*
-                       public IntPtr surface; // Refers to a wl_surface*
-                       public IntPtr shell_surface; // Refers to a wl_shell_surface*
-               }
-
-               [StructLayout(LayoutKind.Sequential)]
-               public struct INTERNAL_mir_wminfo
-               {
-                       public IntPtr connection; // Refers to a MirConnection*
-                       public IntPtr surface; // Refers to a MirSurface*
-               }
-
-               [StructLayout(LayoutKind.Sequential)]
-               public struct INTERNAL_android_wminfo
-               {
-                       public IntPtr window; // Refers to an ANativeWindow
-                       public IntPtr surface; // Refers to an EGLSurface
-               }
-
-               [StructLayout(LayoutKind.Explicit)]
-               public struct INTERNAL_SysWMDriverUnion
-               {
-                       [FieldOffset(0)]
-                       public INTERNAL_windows_wminfo win;
-                       [FieldOffset(0)]
-                       public INTERNAL_winrt_wminfo winrt;
-                       [FieldOffset(0)]
-                       public INTERNAL_x11_wminfo x11;
-                       [FieldOffset(0)]
-                       public INTERNAL_directfb_wminfo dfb;
-                       [FieldOffset(0)]
-                       public INTERNAL_cocoa_wminfo cocoa;
-                       [FieldOffset(0)]
-                       public INTERNAL_uikit_wminfo uikit;
-                       [FieldOffset(0)]
-                       public INTERNAL_wayland_wminfo wl;
-                       [FieldOffset(0)]
-                       public INTERNAL_mir_wminfo mir;
-                       [FieldOffset(0)]
-                       public INTERNAL_android_wminfo android;
-                       // private int dummy;
-               }
-
-               [StructLayout(LayoutKind.Sequential)]
-               public struct SDL_SysWMinfo
-               {
-                       public SDL_version version;
-                       public SDL_SYSWM_TYPE subsystem;
-                       public INTERNAL_SysWMDriverUnion info;
-               }
-
-               /* window refers to an SDL_Window* */
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern SDL_bool SDL_GetWindowWMInfo(
-                       IntPtr window,
-                       ref SDL_SysWMinfo info
-               );
-
-               #endregion
-
-               #region SDL_filesystem.h
-
-               /// <summary>
-               /// Get the path where the application resides.
-               ///
-               /// Get the "base path". This is the directory where the application was run
-               /// from, which is probably the installation directory, and may or may not
-               /// be the process's current working directory.
-               ///
-               /// This returns an absolute path in UTF-8 encoding, and is garunteed to
-               /// end with a path separator ('\\' on Windows, '/' most other places).
-               /// </summary>
-               /// <returns>string of base dir in UTF-8 encoding</returns>
-               /// <remarks>The underlying C string is owned by the application,
-               /// and can be NULL on some platforms.
-               ///
-               /// This function is not necessarily fast, so you should only
-               /// call it once and save the string if you need it.
-               ///
-               /// This function is only available in SDL 2.0.1 and later.</remarks>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               [return : MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler))]
-               public static extern string SDL_GetBasePath();
-
-               /// <summary>
-               /// Get the user-and-app-specific path where files can be written.
-               ///
-               /// Get the "pref dir". This is meant to be where users can write personal
-               /// files (preferences and save games, etc) that are specific to your
-               /// application. This directory is unique per user, per application.
-               ///
-               /// This function will decide the appropriate location in the native filesystem¸
-               /// create the directory if necessary, and return a string of the absolute
-               /// path to the directory in UTF-8 encoding.
-               /// </summary>
-               /// <param name="org">The name of your organization.</param>
-               /// <param name="app">The name of your application.</param>
-               /// <returns>UTF-8 string of user dir in platform-dependent notation. NULL
-               /// if there's a problem (creating directory failed, etc).</returns>
-               /// <remarks>The underlying C string is owned by the application,
-               /// and can be NULL on some platforms. .NET provides some similar functions.
-               ///
-               /// This function is not necessarily fast, so you should only
-               /// call it once and save the string if you need it.
-               ///
-               /// This function is only available in SDL 2.0.1 and later.</remarks>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               [return : MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler))]
-               public static extern string SDL_GetPrefPath(
-                       [In()] [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler))]
-                       string org,
-                       [In()] [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler))]
-                       string app
-               );
-
-               #endregion
-
-               #region SDL_power.h
-
-               /// <summary>
-               /// The basic state for the system's power supply.
-               /// </summary>
-               public enum SDL_PowerState
-               {
-                       SDL_POWERSTATE_UNKNOWN = 0,
-                       SDL_POWERSTATE_ON_BATTERY,
-                       SDL_POWERSTATE_NO_BATTERY,
-                       SDL_POWERSTATE_CHARGING,
-                       SDL_POWERSTATE_CHARGED
-               }
-
-               /// <summary>
-               /// Get the current power supply details.
-               /// </summary>
-               /// <param name="secs">Seconds of battery life left. You can pass a NULL here if
-               /// you don't care. Will return -1 if we can't determine a
-               /// value, or we're not running on a battery.</param>
-               /// <param name="pct">Percentage of battery life left, between 0 and 100. You can
-               /// pass a NULL here if you don't care. Will return -1 if we
-               /// can't determine a value, or we're not running on a battery.</param>
-               /// <returns>The state of the battery (if any).</returns>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern SDL_PowerState SDL_GetPowerInfo(
-                       out int secs,
-                       out int pct
-               );
-
-               #endregion
-
-               #region SDL_cpuinfo.h
-
-               /// <summary>
-               /// This function returns the number of CPU cores available.
-               /// </summary>
-               /// <returns>The number of CPU cores available.</returns>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_GetCPUCount();
-
-               /// <summary>
-               /// This function returns the amount of RAM configured in the system, in MB.
-               /// </summary>
-               /// <returns>The amount of RAM configured in the system, in MB.</returns>
-               /// <remarks>
-               /// This function is only available in SDL 2.0.1 and later.
-               /// </remarks>
-               [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-               public static extern int SDL_GetSystemRAM();
-
-               #endregion
-       }
-}
diff --git a/SDL2Crow/SDL2Crow.csproj b/SDL2Crow/SDL2Crow.csproj
deleted file mode 100644 (file)
index 941e426..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">Linux_x86</Platform>
-    <ProductVersion>8.0.30703</ProductVersion>
-    <SchemaVersion>2.0</SchemaVersion>
-    <ProjectGuid>{E7C76053-6A59-4B72-8E78-F30147B2A05E}</ProjectGuid>
-    <OutputType>Exe</OutputType>
-    <RootNamespace>SDL2Crow</RootNamespace>
-    <AssemblyName>SDL2Crow</AssemblyName>
-    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
-    <ReleaseVersion>0.4</ReleaseVersion>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|Linux_x86' ">
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>false</Optimize>
-    <OutputPath>bin\Debug</OutputPath>
-    <DefineConstants>DEBUG;</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <ConsolePause>false</ConsolePause>
-    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|Linux_x86' ">
-    <Optimize>true</Optimize>
-    <OutputPath>bin\Release</OutputPath>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <ConsolePause>false</ConsolePause>
-    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="SDL2-CS">
-      <HintPath>..\packages\SDL2-CS.dll.2.0.0.0\lib\net20\SDL2-CS.dll</HintPath>
-    </Reference>
-    <Reference Include="System" />
-    <Reference Include="System.Drawing" />
-    <Reference Include="System.Xml" />
-    <Reference Include="atk-sharp">
-      <HintPath>..\packages\gtk-sharp.Linux.3.14.3.14.7\lib\net40\atk-sharp.dll</HintPath>
-    </Reference>
-    <Reference Include="cairo-sharp">
-      <HintPath>..\packages\gtk-sharp.Linux.3.14.3.14.7\lib\net40\cairo-sharp.dll</HintPath>
-    </Reference>
-    <Reference Include="gdk-sharp">
-      <HintPath>..\packages\gtk-sharp.Linux.3.14.3.14.7\lib\net40\gdk-sharp.dll</HintPath>
-    </Reference>
-    <Reference Include="gio-sharp">
-      <HintPath>..\packages\gtk-sharp.Linux.3.14.3.14.7\lib\net40\gio-sharp.dll</HintPath>
-    </Reference>
-    <Reference Include="glib-sharp">
-      <HintPath>..\packages\gtk-sharp.Linux.3.14.3.14.7\lib\net40\glib-sharp.dll</HintPath>
-    </Reference>
-    <Reference Include="gtk-dotnet">
-      <HintPath>..\packages\gtk-sharp.Linux.3.14.3.14.7\lib\net40\gtk-dotnet.dll</HintPath>
-    </Reference>
-    <Reference Include="gtk-sharp">
-      <HintPath>..\packages\gtk-sharp.Linux.3.14.3.14.7\lib\net40\gtk-sharp.dll</HintPath>
-    </Reference>
-    <Reference Include="pango-sharp">
-      <HintPath>..\packages\gtk-sharp.Linux.3.14.3.14.7\lib\net40\pango-sharp.dll</HintPath>
-    </Reference>
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="packages.config" />
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="main.cs" />
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="..\Crow.csproj">
-      <Project>{C2980F9B-4798-4C05-99E2-E174810F7C7B}</Project>
-      <Name>Crow</Name>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
-  <Import Project="..\packages\gtk-sharp.Linux.3.14.3.14.7\build\net40\gtk-sharp.Linux.3.14.targets" Condition="Exists('..\packages\gtk-sharp.Linux.3.14.3.14.7\build\net40\gtk-sharp.Linux.3.14.targets')" />
-</Project>
\ No newline at end of file
diff --git a/SDL2Crow/main.cs b/SDL2Crow/main.cs
deleted file mode 100644 (file)
index 3bc4d2a..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-//
-//  main.cs
-//
-//  Author:
-//       Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
-//
-//  Copyright (c) 2016 jp
-//
-//  This program is free software: you can redistribute it and/or modify
-//  it under the terms of the GNU General Public License as published by
-//  the Free Software Foundation, either version 3 of the License, or
-//  (at your option) any later version.
-//
-//  This program is distributed in the hope that it will be useful,
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//  GNU General Public License for more details.
-//
-//  You should have received a copy of the GNU General Public License
-//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
-using System;
-using System.Diagnostics;
-using System.Runtime.InteropServices;
-using SDL2;
-using Cairo;
-
-namespace SDL2Crow
-{
-       public class SDL2Window : IDisposable
-       {
-               int width, height;
-               IntPtr win, rend;
-               SDL.SDL_Surface sdlSurface;
-
-               public SDL2Window (int _width = 800, int _height = 600) {
-                       width = _width;
-                       height = _height;
-
-                       SDL.SDL_Init (SDL.SDL_INIT_VIDEO);
-
-
-                       SDL.SDL_CreateWindowAndRenderer (width, height,
-                                                                                       SDL.SDL_WindowFlags.SDL_WINDOW_BORDERLESS, out win, out rend);
-
-                       IntPtr sdlSurfPtr = SDL.SDL_GetWindowSurface (win);
-                       sdlSurface = (SDL.SDL_Surface)Marshal.PtrToStructure (sdlSurfPtr, typeof (SDL.SDL_Surface));
-                       sdlSurface.
-                       //uint colorkey = SDL.SDL_MapRGB (sdlSurface.format, 0xFF, 0x00, 0xFF);
-                       //// Set all pixels of colour R(255), G(0), B(255) to be transparent
-                       //SDL.SDL_SetColorKey (sdlSurfPtr, 4, colorkey);
-
-                       //using (Cairo.Surface surf = new Cairo.ImageSurface (sdlSurface.pixels, Cairo.Format.ARGB32, sdlSurface.w, sdlSurface.h, sdlSurface.pitch)) {
-                       //      using (Context ctx = new Context (surf)) {
-                       //              ctx.Rectangle (0, 0, width, height);
-                       //              ctx.SetSourceRGBA (1, 0, 0, 0);
-                       //              ctx.Fill ();
-                       //      }
-                       //}
-
-                       //SDL.SDL_UpdateWindowSurface (win);
-
-               }
-               void Run () {
-                       SDL.SDL_Event e;
-
-                       while(true){
-                               SDL.SDL_PollEvent (out e);
-
-                               if (e.type == SDL.SDL_EventType.SDL_QUIT)
-                                       break;
-                               
-                               SDL.SDL_SetRenderDrawBlendMode (rend, SDL.SDL_BlendMode.SDL_BLENDMODE_BLEND);
-                               SDL.SDL_SetRenderDrawColor (rend, 0xFF, 0x00, 0x00, 0x20);
-                               SDL.SDL_RenderClear (rend);
-
-                               SDL.SDL_RenderPresent (rend);
-                       }
-               
-               }
-
-               [STAThread]
-               static void Main ()
-               {
-                       using (SDL2Window win = new SDL2Window ()) {
-                               win.Run ();
-                       }
-               }
-
-               public void Dispose ()
-               {
-                       SDL.SDL_DestroyRenderer (rend);
-                       SDL.SDL_DestroyWindow (win);
-                       SDL.SDL_Quit ();
-               }
-       }
-}
-
diff --git a/SDL2Crow/packages.config b/SDL2Crow/packages.config
deleted file mode 100644 (file)
index 916a571..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
-  <package id="gtk-sharp.Linux.3.14" version="3.14.7" targetFramework="net45" />
-  <package id="SDL2-CS.dll" version="2.0.0.0" targetFramework="net45" />
-</packages>
\ No newline at end of file
diff --git a/magic3d.png b/magic3d.png
deleted file mode 100644 (file)
index 767086d..0000000
Binary files a/magic3d.png and /dev/null differ
diff --git a/screenshot1.png b/screenshot1.png
deleted file mode 100644 (file)
index 877c7c4..0000000
Binary files a/screenshot1.png and /dev/null differ
diff --git a/screenshot2.png b/screenshot2.png
deleted file mode 100644 (file)
index 815ab30..0000000
Binary files a/screenshot2.png and /dev/null differ