Changed API.* to * in order to reflect changes in OpenTK.Platform.Windows.API.

Improved Disposable pattern implementation in most Windows classes.
This commit is contained in:
the_fiddler 2007-09-02 00:16:22 +00:00
parent b25edb985d
commit b89d2231d4
9 changed files with 1292 additions and 1041 deletions

File diff suppressed because it is too large Load diff

View file

@ -45,32 +45,32 @@ namespace OpenTK.Platform.Windows
[System.CLSCompliant(false)]
public static
unsafe int ChoosePixelFormat(IntPtr hDc, API.PixelFormatDescriptor* pPfd)
unsafe int ChoosePixelFormat(IntPtr hDc, PixelFormatDescriptor* pPfd)
{
unsafe { return Delegates.wglChoosePixelFormat((IntPtr)hDc, (API.PixelFormatDescriptor*)pPfd); }
unsafe { return Delegates.wglChoosePixelFormat((IntPtr)hDc, (PixelFormatDescriptor*)pPfd); }
}
public static
int ChoosePixelFormat(IntPtr hDc, API.PixelFormatDescriptor[] pPfd)
int ChoosePixelFormat(IntPtr hDc, PixelFormatDescriptor[] pPfd)
{
unsafe
{
fixed (API.PixelFormatDescriptor* pPfd_ptr = pPfd)
fixed (PixelFormatDescriptor* pPfd_ptr = pPfd)
{
int retval = Delegates.wglChoosePixelFormat((IntPtr)hDc, (API.PixelFormatDescriptor*)pPfd_ptr);
int retval = Delegates.wglChoosePixelFormat((IntPtr)hDc, (PixelFormatDescriptor*)pPfd_ptr);
return retval;
}
}
}
public static
int ChoosePixelFormat(IntPtr hDc, ref API.PixelFormatDescriptor pPfd)
int ChoosePixelFormat(IntPtr hDc, ref PixelFormatDescriptor pPfd)
{
unsafe
{
fixed (API.PixelFormatDescriptor* pPfd_ptr = &pPfd)
fixed (PixelFormatDescriptor* pPfd_ptr = &pPfd)
{
int retval = Delegates.wglChoosePixelFormat((IntPtr)hDc, (API.PixelFormatDescriptor*)pPfd_ptr);
int retval = Delegates.wglChoosePixelFormat((IntPtr)hDc, (PixelFormatDescriptor*)pPfd_ptr);
return retval;
}
}
@ -78,44 +78,44 @@ namespace OpenTK.Platform.Windows
[System.CLSCompliant(false)]
public static
unsafe int DescribePixelFormat(IntPtr hdc, int ipfd, UInt32 cjpfd, API.PixelFormatDescriptor* ppfd)
unsafe int DescribePixelFormat(IntPtr hdc, int ipfd, UInt32 cjpfd, PixelFormatDescriptor* ppfd)
{
unsafe { return Delegates.wglDescribePixelFormat((IntPtr)hdc, (int)ipfd, (UInt32)cjpfd, (API.PixelFormatDescriptor*)ppfd); }
unsafe { return Delegates.wglDescribePixelFormat((IntPtr)hdc, (int)ipfd, (UInt32)cjpfd, (PixelFormatDescriptor*)ppfd); }
}
[System.CLSCompliant(false)]
public static
unsafe int DescribePixelFormat(IntPtr hdc, int ipfd, Int32 cjpfd, API.PixelFormatDescriptor* ppfd)
unsafe int DescribePixelFormat(IntPtr hdc, int ipfd, Int32 cjpfd, PixelFormatDescriptor* ppfd)
{
unsafe
{
int retval = Delegates.wglDescribePixelFormat((IntPtr)hdc, (int)ipfd, (UInt32)cjpfd, (API.PixelFormatDescriptor*)ppfd);
int retval = Delegates.wglDescribePixelFormat((IntPtr)hdc, (int)ipfd, (UInt32)cjpfd, (PixelFormatDescriptor*)ppfd);
return retval;
}
}
[System.CLSCompliant(false)]
public static
int DescribePixelFormat(IntPtr hdc, int ipfd, UInt32 cjpfd, API.PixelFormatDescriptor[] ppfd)
int DescribePixelFormat(IntPtr hdc, int ipfd, UInt32 cjpfd, PixelFormatDescriptor[] ppfd)
{
unsafe
{
fixed (API.PixelFormatDescriptor* ppfd_ptr = ppfd)
fixed (PixelFormatDescriptor* ppfd_ptr = ppfd)
{
int retval = Delegates.wglDescribePixelFormat((IntPtr)hdc, (int)ipfd, (UInt32)cjpfd, (API.PixelFormatDescriptor*)ppfd_ptr);
int retval = Delegates.wglDescribePixelFormat((IntPtr)hdc, (int)ipfd, (UInt32)cjpfd, (PixelFormatDescriptor*)ppfd_ptr);
return retval;
}
}
}
public static
int DescribePixelFormat(IntPtr hdc, int ipfd, Int32 cjpfd, API.PixelFormatDescriptor[] ppfd)
int DescribePixelFormat(IntPtr hdc, int ipfd, Int32 cjpfd, PixelFormatDescriptor[] ppfd)
{
unsafe
{
fixed (API.PixelFormatDescriptor* ppfd_ptr = ppfd)
fixed (PixelFormatDescriptor* ppfd_ptr = ppfd)
{
int retval = Delegates.wglDescribePixelFormat((IntPtr)hdc, (int)ipfd, (UInt32)cjpfd, (API.PixelFormatDescriptor*)ppfd_ptr);
int retval = Delegates.wglDescribePixelFormat((IntPtr)hdc, (int)ipfd, (UInt32)cjpfd, (PixelFormatDescriptor*)ppfd_ptr);
return retval;
}
}
@ -123,26 +123,26 @@ namespace OpenTK.Platform.Windows
[System.CLSCompliant(false)]
public static
int DescribePixelFormat(IntPtr hdc, int ipfd, UInt32 cjpfd, ref API.PixelFormatDescriptor ppfd)
int DescribePixelFormat(IntPtr hdc, int ipfd, UInt32 cjpfd, ref PixelFormatDescriptor ppfd)
{
unsafe
{
fixed (API.PixelFormatDescriptor* ppfd_ptr = &ppfd)
fixed (PixelFormatDescriptor* ppfd_ptr = &ppfd)
{
int retval = Delegates.wglDescribePixelFormat((IntPtr)hdc, (int)ipfd, (UInt32)cjpfd, (API.PixelFormatDescriptor*)ppfd_ptr);
int retval = Delegates.wglDescribePixelFormat((IntPtr)hdc, (int)ipfd, (UInt32)cjpfd, (PixelFormatDescriptor*)ppfd_ptr);
return retval;
}
}
}
public static
int DescribePixelFormat(IntPtr hdc, int ipfd, Int32 cjpfd, ref API.PixelFormatDescriptor ppfd)
int DescribePixelFormat(IntPtr hdc, int ipfd, Int32 cjpfd, ref PixelFormatDescriptor ppfd)
{
unsafe
{
fixed (API.PixelFormatDescriptor* ppfd_ptr = &ppfd)
fixed (PixelFormatDescriptor* ppfd_ptr = &ppfd)
{
int retval = Delegates.wglDescribePixelFormat((IntPtr)hdc, (int)ipfd, (UInt32)cjpfd, (API.PixelFormatDescriptor*)ppfd_ptr);
int retval = Delegates.wglDescribePixelFormat((IntPtr)hdc, (int)ipfd, (UInt32)cjpfd, (PixelFormatDescriptor*)ppfd_ptr);
return retval;
}
}
@ -174,32 +174,32 @@ namespace OpenTK.Platform.Windows
[System.CLSCompliant(false)]
public static
unsafe Boolean SetPixelFormat(IntPtr hdc, int ipfd, API.PixelFormatDescriptor* ppfd)
unsafe Boolean SetPixelFormat(IntPtr hdc, int ipfd, PixelFormatDescriptor* ppfd)
{
unsafe { return Delegates.wglSetPixelFormat((IntPtr)hdc, (int)ipfd, (API.PixelFormatDescriptor*)ppfd); }
unsafe { return Delegates.wglSetPixelFormat((IntPtr)hdc, (int)ipfd, (PixelFormatDescriptor*)ppfd); }
}
public static
Boolean SetPixelFormat(IntPtr hdc, int ipfd, API.PixelFormatDescriptor[] ppfd)
Boolean SetPixelFormat(IntPtr hdc, int ipfd, PixelFormatDescriptor[] ppfd)
{
unsafe
{
fixed (API.PixelFormatDescriptor* ppfd_ptr = ppfd)
fixed (PixelFormatDescriptor* ppfd_ptr = ppfd)
{
Boolean retval = Delegates.wglSetPixelFormat((IntPtr)hdc, (int)ipfd, (API.PixelFormatDescriptor*)ppfd_ptr);
Boolean retval = Delegates.wglSetPixelFormat((IntPtr)hdc, (int)ipfd, (PixelFormatDescriptor*)ppfd_ptr);
return retval;
}
}
}
public static
Boolean SetPixelFormat(IntPtr hdc, int ipfd, ref API.PixelFormatDescriptor ppfd)
Boolean SetPixelFormat(IntPtr hdc, int ipfd, ref PixelFormatDescriptor ppfd)
{
unsafe
{
fixed (API.PixelFormatDescriptor* ppfd_ptr = &ppfd)
fixed (PixelFormatDescriptor* ppfd_ptr = &ppfd)
{
Boolean retval = Delegates.wglSetPixelFormat((IntPtr)hdc, (int)ipfd, (API.PixelFormatDescriptor*)ppfd_ptr);
Boolean retval = Delegates.wglSetPixelFormat((IntPtr)hdc, (int)ipfd, (PixelFormatDescriptor*)ppfd_ptr);
return retval;
}
}
@ -225,44 +225,44 @@ namespace OpenTK.Platform.Windows
[System.CLSCompliant(false)]
public static
unsafe Boolean DescribeLayerPlane(IntPtr hDc, int pixelFormat, int layerPlane, UInt32 nBytes, API.LayerPlaneDescriptor* plpd)
unsafe Boolean DescribeLayerPlane(IntPtr hDc, int pixelFormat, int layerPlane, UInt32 nBytes, LayerPlaneDescriptor* plpd)
{
unsafe { return Delegates.wglDescribeLayerPlane((IntPtr)hDc, (int)pixelFormat, (int)layerPlane, (UInt32)nBytes, (API.LayerPlaneDescriptor*)plpd); }
unsafe { return Delegates.wglDescribeLayerPlane((IntPtr)hDc, (int)pixelFormat, (int)layerPlane, (UInt32)nBytes, (LayerPlaneDescriptor*)plpd); }
}
[System.CLSCompliant(false)]
public static
unsafe Boolean DescribeLayerPlane(IntPtr hDc, int pixelFormat, int layerPlane, Int32 nBytes, API.LayerPlaneDescriptor* plpd)
unsafe Boolean DescribeLayerPlane(IntPtr hDc, int pixelFormat, int layerPlane, Int32 nBytes, LayerPlaneDescriptor* plpd)
{
unsafe
{
Boolean retval = Delegates.wglDescribeLayerPlane((IntPtr)hDc, (int)pixelFormat, (int)layerPlane, (UInt32)nBytes, (API.LayerPlaneDescriptor*)plpd);
Boolean retval = Delegates.wglDescribeLayerPlane((IntPtr)hDc, (int)pixelFormat, (int)layerPlane, (UInt32)nBytes, (LayerPlaneDescriptor*)plpd);
return retval;
}
}
[System.CLSCompliant(false)]
public static
Boolean DescribeLayerPlane(IntPtr hDc, int pixelFormat, int layerPlane, UInt32 nBytes, API.LayerPlaneDescriptor[] plpd)
Boolean DescribeLayerPlane(IntPtr hDc, int pixelFormat, int layerPlane, UInt32 nBytes, LayerPlaneDescriptor[] plpd)
{
unsafe
{
fixed (API.LayerPlaneDescriptor* plpd_ptr = plpd)
fixed (LayerPlaneDescriptor* plpd_ptr = plpd)
{
Boolean retval = Delegates.wglDescribeLayerPlane((IntPtr)hDc, (int)pixelFormat, (int)layerPlane, (UInt32)nBytes, (API.LayerPlaneDescriptor*)plpd_ptr);
Boolean retval = Delegates.wglDescribeLayerPlane((IntPtr)hDc, (int)pixelFormat, (int)layerPlane, (UInt32)nBytes, (LayerPlaneDescriptor*)plpd_ptr);
return retval;
}
}
}
public static
Boolean DescribeLayerPlane(IntPtr hDc, int pixelFormat, int layerPlane, Int32 nBytes, API.LayerPlaneDescriptor[] plpd)
Boolean DescribeLayerPlane(IntPtr hDc, int pixelFormat, int layerPlane, Int32 nBytes, LayerPlaneDescriptor[] plpd)
{
unsafe
{
fixed (API.LayerPlaneDescriptor* plpd_ptr = plpd)
fixed (LayerPlaneDescriptor* plpd_ptr = plpd)
{
Boolean retval = Delegates.wglDescribeLayerPlane((IntPtr)hDc, (int)pixelFormat, (int)layerPlane, (UInt32)nBytes, (API.LayerPlaneDescriptor*)plpd_ptr);
Boolean retval = Delegates.wglDescribeLayerPlane((IntPtr)hDc, (int)pixelFormat, (int)layerPlane, (UInt32)nBytes, (LayerPlaneDescriptor*)plpd_ptr);
return retval;
}
}
@ -270,26 +270,26 @@ namespace OpenTK.Platform.Windows
[System.CLSCompliant(false)]
public static
Boolean DescribeLayerPlane(IntPtr hDc, int pixelFormat, int layerPlane, UInt32 nBytes, ref API.LayerPlaneDescriptor plpd)
Boolean DescribeLayerPlane(IntPtr hDc, int pixelFormat, int layerPlane, UInt32 nBytes, ref LayerPlaneDescriptor plpd)
{
unsafe
{
fixed (API.LayerPlaneDescriptor* plpd_ptr = &plpd)
fixed (LayerPlaneDescriptor* plpd_ptr = &plpd)
{
Boolean retval = Delegates.wglDescribeLayerPlane((IntPtr)hDc, (int)pixelFormat, (int)layerPlane, (UInt32)nBytes, (API.LayerPlaneDescriptor*)plpd_ptr);
Boolean retval = Delegates.wglDescribeLayerPlane((IntPtr)hDc, (int)pixelFormat, (int)layerPlane, (UInt32)nBytes, (LayerPlaneDescriptor*)plpd_ptr);
return retval;
}
}
}
public static
Boolean DescribeLayerPlane(IntPtr hDc, int pixelFormat, int layerPlane, Int32 nBytes, ref API.LayerPlaneDescriptor plpd)
Boolean DescribeLayerPlane(IntPtr hDc, int pixelFormat, int layerPlane, Int32 nBytes, ref LayerPlaneDescriptor plpd)
{
unsafe
{
fixed (API.LayerPlaneDescriptor* plpd_ptr = &plpd)
fixed (LayerPlaneDescriptor* plpd_ptr = &plpd)
{
Boolean retval = Delegates.wglDescribeLayerPlane((IntPtr)hDc, (int)pixelFormat, (int)layerPlane, (UInt32)nBytes, (API.LayerPlaneDescriptor*)plpd_ptr);
Boolean retval = Delegates.wglDescribeLayerPlane((IntPtr)hDc, (int)pixelFormat, (int)layerPlane, (UInt32)nBytes, (LayerPlaneDescriptor*)plpd_ptr);
return retval;
}
}
@ -394,32 +394,32 @@ namespace OpenTK.Platform.Windows
[System.CLSCompliant(false)]
public static
unsafe Boolean UseFontOutlinesA(IntPtr hDC, Int32 first, Int32 count, Int32 listBase, float thickness, float deviation, Int32 fontMode, API.GlyphMetricsFloat* glyphMetrics)
unsafe Boolean UseFontOutlinesA(IntPtr hDC, Int32 first, Int32 count, Int32 listBase, float thickness, float deviation, Int32 fontMode, GlyphMetricsFloat* glyphMetrics)
{
unsafe { return Delegates.wglUseFontOutlinesA((IntPtr)hDC, (Int32)first, (Int32)count, (Int32)listBase, (float)thickness, (float)deviation, (Int32)fontMode, (API.GlyphMetricsFloat*)glyphMetrics); }
unsafe { return Delegates.wglUseFontOutlinesA((IntPtr)hDC, (Int32)first, (Int32)count, (Int32)listBase, (float)thickness, (float)deviation, (Int32)fontMode, (GlyphMetricsFloat*)glyphMetrics); }
}
public static
Boolean UseFontOutlinesA(IntPtr hDC, Int32 first, Int32 count, Int32 listBase, float thickness, float deviation, Int32 fontMode, API.GlyphMetricsFloat[] glyphMetrics)
Boolean UseFontOutlinesA(IntPtr hDC, Int32 first, Int32 count, Int32 listBase, float thickness, float deviation, Int32 fontMode, GlyphMetricsFloat[] glyphMetrics)
{
unsafe
{
fixed (API.GlyphMetricsFloat* glyphMetrics_ptr = glyphMetrics)
fixed (GlyphMetricsFloat* glyphMetrics_ptr = glyphMetrics)
{
Boolean retval = Delegates.wglUseFontOutlinesA((IntPtr)hDC, (Int32)first, (Int32)count, (Int32)listBase, (float)thickness, (float)deviation, (Int32)fontMode, (API.GlyphMetricsFloat*)glyphMetrics_ptr);
Boolean retval = Delegates.wglUseFontOutlinesA((IntPtr)hDC, (Int32)first, (Int32)count, (Int32)listBase, (float)thickness, (float)deviation, (Int32)fontMode, (GlyphMetricsFloat*)glyphMetrics_ptr);
return retval;
}
}
}
public static
Boolean UseFontOutlinesA(IntPtr hDC, Int32 first, Int32 count, Int32 listBase, float thickness, float deviation, Int32 fontMode, ref API.GlyphMetricsFloat glyphMetrics)
Boolean UseFontOutlinesA(IntPtr hDC, Int32 first, Int32 count, Int32 listBase, float thickness, float deviation, Int32 fontMode, ref GlyphMetricsFloat glyphMetrics)
{
unsafe
{
fixed (API.GlyphMetricsFloat* glyphMetrics_ptr = &glyphMetrics)
fixed (GlyphMetricsFloat* glyphMetrics_ptr = &glyphMetrics)
{
Boolean retval = Delegates.wglUseFontOutlinesA((IntPtr)hDC, (Int32)first, (Int32)count, (Int32)listBase, (float)thickness, (float)deviation, (Int32)fontMode, (API.GlyphMetricsFloat*)glyphMetrics_ptr);
Boolean retval = Delegates.wglUseFontOutlinesA((IntPtr)hDC, (Int32)first, (Int32)count, (Int32)listBase, (float)thickness, (float)deviation, (Int32)fontMode, (GlyphMetricsFloat*)glyphMetrics_ptr);
return retval;
}
}
@ -427,32 +427,32 @@ namespace OpenTK.Platform.Windows
[System.CLSCompliant(false)]
public static
unsafe Boolean UseFontOutlinesW(IntPtr hDC, Int32 first, Int32 count, Int32 listBase, float thickness, float deviation, Int32 fontMode, API.GlyphMetricsFloat* glyphMetrics)
unsafe Boolean UseFontOutlinesW(IntPtr hDC, Int32 first, Int32 count, Int32 listBase, float thickness, float deviation, Int32 fontMode, GlyphMetricsFloat* glyphMetrics)
{
unsafe { return Delegates.wglUseFontOutlinesW((IntPtr)hDC, (Int32)first, (Int32)count, (Int32)listBase, (float)thickness, (float)deviation, (Int32)fontMode, (API.GlyphMetricsFloat*)glyphMetrics); }
unsafe { return Delegates.wglUseFontOutlinesW((IntPtr)hDC, (Int32)first, (Int32)count, (Int32)listBase, (float)thickness, (float)deviation, (Int32)fontMode, (GlyphMetricsFloat*)glyphMetrics); }
}
public static
Boolean UseFontOutlinesW(IntPtr hDC, Int32 first, Int32 count, Int32 listBase, float thickness, float deviation, Int32 fontMode, API.GlyphMetricsFloat[] glyphMetrics)
Boolean UseFontOutlinesW(IntPtr hDC, Int32 first, Int32 count, Int32 listBase, float thickness, float deviation, Int32 fontMode, GlyphMetricsFloat[] glyphMetrics)
{
unsafe
{
fixed (API.GlyphMetricsFloat* glyphMetrics_ptr = glyphMetrics)
fixed (GlyphMetricsFloat* glyphMetrics_ptr = glyphMetrics)
{
Boolean retval = Delegates.wglUseFontOutlinesW((IntPtr)hDC, (Int32)first, (Int32)count, (Int32)listBase, (float)thickness, (float)deviation, (Int32)fontMode, (API.GlyphMetricsFloat*)glyphMetrics_ptr);
Boolean retval = Delegates.wglUseFontOutlinesW((IntPtr)hDC, (Int32)first, (Int32)count, (Int32)listBase, (float)thickness, (float)deviation, (Int32)fontMode, (GlyphMetricsFloat*)glyphMetrics_ptr);
return retval;
}
}
}
public static
Boolean UseFontOutlinesW(IntPtr hDC, Int32 first, Int32 count, Int32 listBase, float thickness, float deviation, Int32 fontMode, ref API.GlyphMetricsFloat glyphMetrics)
Boolean UseFontOutlinesW(IntPtr hDC, Int32 first, Int32 count, Int32 listBase, float thickness, float deviation, Int32 fontMode, ref GlyphMetricsFloat glyphMetrics)
{
unsafe
{
fixed (API.GlyphMetricsFloat* glyphMetrics_ptr = &glyphMetrics)
fixed (GlyphMetricsFloat* glyphMetrics_ptr = &glyphMetrics)
{
Boolean retval = Delegates.wglUseFontOutlinesW((IntPtr)hDC, (Int32)first, (Int32)count, (Int32)listBase, (float)thickness, (float)deviation, (Int32)fontMode, (API.GlyphMetricsFloat*)glyphMetrics_ptr);
Boolean retval = Delegates.wglUseFontOutlinesW((IntPtr)hDC, (Int32)first, (Int32)count, (Int32)listBase, (float)thickness, (float)deviation, (Int32)fontMode, (GlyphMetricsFloat*)glyphMetrics_ptr);
return retval;
}
}

View file

@ -27,10 +27,10 @@ namespace OpenTK.Platform.Windows
internal extern static Boolean CopyContext(IntPtr hglrcSrc, IntPtr hglrcDst, UInt32 mask);
[System.Security.SuppressUnmanagedCodeSecurity()]
[System.Runtime.InteropServices.DllImport(Wgl.Library, EntryPoint = "wglChoosePixelFormat", ExactSpelling = true)]
internal extern static unsafe int ChoosePixelFormat(IntPtr hDc, API.PixelFormatDescriptor* pPfd);
internal extern static unsafe int ChoosePixelFormat(IntPtr hDc, PixelFormatDescriptor* pPfd);
[System.Security.SuppressUnmanagedCodeSecurity()]
[System.Runtime.InteropServices.DllImport(Wgl.Library, EntryPoint = "wglDescribePixelFormat", ExactSpelling = true)]
internal extern static unsafe int DescribePixelFormat(IntPtr hdc, int ipfd, UInt32 cjpfd, API.PixelFormatDescriptor* ppfd);
internal extern static unsafe int DescribePixelFormat(IntPtr hdc, int ipfd, UInt32 cjpfd, PixelFormatDescriptor* ppfd);
[System.Security.SuppressUnmanagedCodeSecurity()]
[System.Runtime.InteropServices.DllImport(Wgl.Library, EntryPoint = "wglGetCurrentDC", ExactSpelling = true)]
internal extern static IntPtr GetCurrentDC();
@ -45,7 +45,7 @@ namespace OpenTK.Platform.Windows
internal extern static int GetPixelFormat(IntPtr hdc);
[System.Security.SuppressUnmanagedCodeSecurity()]
[System.Runtime.InteropServices.DllImport(Wgl.Library, EntryPoint = "wglSetPixelFormat", ExactSpelling = true)]
internal extern static unsafe Boolean SetPixelFormat(IntPtr hdc, int ipfd, API.PixelFormatDescriptor* ppfd);
internal extern static unsafe Boolean SetPixelFormat(IntPtr hdc, int ipfd, PixelFormatDescriptor* ppfd);
[System.Security.SuppressUnmanagedCodeSecurity()]
[System.Runtime.InteropServices.DllImport(Wgl.Library, EntryPoint = "wglSwapBuffers", ExactSpelling = true)]
internal extern static Boolean SwapBuffers(IntPtr hdc);
@ -57,7 +57,7 @@ namespace OpenTK.Platform.Windows
internal extern static IntPtr CreateLayerContext(IntPtr hDc, int level);
[System.Security.SuppressUnmanagedCodeSecurity()]
[System.Runtime.InteropServices.DllImport(Wgl.Library, EntryPoint = "wglDescribeLayerPlane", ExactSpelling = true)]
internal extern static unsafe Boolean DescribeLayerPlane(IntPtr hDc, int pixelFormat, int layerPlane, UInt32 nBytes, API.LayerPlaneDescriptor* plpd);
internal extern static unsafe Boolean DescribeLayerPlane(IntPtr hDc, int pixelFormat, int layerPlane, UInt32 nBytes, LayerPlaneDescriptor* plpd);
[System.Security.SuppressUnmanagedCodeSecurity()]
[System.Runtime.InteropServices.DllImport(Wgl.Library, EntryPoint = "wglSetLayerPaletteEntries", ExactSpelling = true)]
internal extern static unsafe int SetLayerPaletteEntries(IntPtr hdc, int iLayerPlane, int iStart, int cEntries, Int32* pcr);
@ -78,10 +78,10 @@ namespace OpenTK.Platform.Windows
internal extern static Boolean UseFontBitmapsW(IntPtr hDC, Int32 first, Int32 count, Int32 listBase);
[System.Security.SuppressUnmanagedCodeSecurity()]
[System.Runtime.InteropServices.DllImport(Wgl.Library, EntryPoint = "wglUseFontOutlinesA", CharSet = CharSet.Auto)]
internal extern static unsafe Boolean UseFontOutlinesA(IntPtr hDC, Int32 first, Int32 count, Int32 listBase, float thickness, float deviation, Int32 fontMode, API.GlyphMetricsFloat* glyphMetrics);
internal extern static unsafe Boolean UseFontOutlinesA(IntPtr hDC, Int32 first, Int32 count, Int32 listBase, float thickness, float deviation, Int32 fontMode, GlyphMetricsFloat* glyphMetrics);
[System.Security.SuppressUnmanagedCodeSecurity()]
[System.Runtime.InteropServices.DllImport(Wgl.Library, EntryPoint = "wglUseFontOutlinesW", CharSet = CharSet.Auto)]
internal extern static unsafe Boolean UseFontOutlinesW(IntPtr hDC, Int32 first, Int32 count, Int32 listBase, float thickness, float deviation, Int32 fontMode, API.GlyphMetricsFloat* glyphMetrics);
internal extern static unsafe Boolean UseFontOutlinesW(IntPtr hDC, Int32 first, Int32 count, Int32 listBase, float thickness, float deviation, Int32 fontMode, GlyphMetricsFloat* glyphMetrics);
}
}
}

View file

@ -28,10 +28,10 @@ namespace OpenTK.Platform.Windows
internal delegate Boolean CopyContext(IntPtr hglrcSrc, IntPtr hglrcDst, UInt32 mask);
internal static CopyContext wglCopyContext = null;
[System.Security.SuppressUnmanagedCodeSecurity()]
internal unsafe delegate int ChoosePixelFormat(IntPtr hDc, API.PixelFormatDescriptor* pPfd);
internal unsafe delegate int ChoosePixelFormat(IntPtr hDc, PixelFormatDescriptor* pPfd);
internal unsafe static ChoosePixelFormat wglChoosePixelFormat = null;
[System.Security.SuppressUnmanagedCodeSecurity()]
internal unsafe delegate int DescribePixelFormat(IntPtr hdc, int ipfd, UInt32 cjpfd, API.PixelFormatDescriptor* ppfd);
internal unsafe delegate int DescribePixelFormat(IntPtr hdc, int ipfd, UInt32 cjpfd, PixelFormatDescriptor* ppfd);
internal unsafe static DescribePixelFormat wglDescribePixelFormat = null;
[System.Security.SuppressUnmanagedCodeSecurity()]
internal delegate IntPtr GetCurrentDC();
@ -46,7 +46,7 @@ namespace OpenTK.Platform.Windows
internal delegate int GetPixelFormat(IntPtr hdc);
internal static GetPixelFormat wglGetPixelFormat = null;
[System.Security.SuppressUnmanagedCodeSecurity()]
internal unsafe delegate Boolean SetPixelFormat(IntPtr hdc, int ipfd, API.PixelFormatDescriptor* ppfd);
internal unsafe delegate Boolean SetPixelFormat(IntPtr hdc, int ipfd, PixelFormatDescriptor* ppfd);
internal unsafe static SetPixelFormat wglSetPixelFormat = null;
[System.Security.SuppressUnmanagedCodeSecurity()]
internal delegate Boolean SwapBuffers(IntPtr hdc);
@ -58,7 +58,7 @@ namespace OpenTK.Platform.Windows
internal delegate IntPtr CreateLayerContext(IntPtr hDc, int level);
internal static CreateLayerContext wglCreateLayerContext = null;
[System.Security.SuppressUnmanagedCodeSecurity()]
internal unsafe delegate Boolean DescribeLayerPlane(IntPtr hDc, int pixelFormat, int layerPlane, UInt32 nBytes, API.LayerPlaneDescriptor* plpd);
internal unsafe delegate Boolean DescribeLayerPlane(IntPtr hDc, int pixelFormat, int layerPlane, UInt32 nBytes, LayerPlaneDescriptor* plpd);
internal unsafe static DescribeLayerPlane wglDescribeLayerPlane = null;
[System.Security.SuppressUnmanagedCodeSecurity()]
internal unsafe delegate int SetLayerPaletteEntries(IntPtr hdc, int iLayerPlane, int iStart, int cEntries, Int32* pcr);
@ -79,10 +79,10 @@ namespace OpenTK.Platform.Windows
internal delegate Boolean UseFontBitmapsW(IntPtr hDC, Int32 first, Int32 count, Int32 listBase);
internal static UseFontBitmapsW wglUseFontBitmapsW = null;
[System.Security.SuppressUnmanagedCodeSecurity()]
internal unsafe delegate Boolean UseFontOutlinesA(IntPtr hDC, Int32 first, Int32 count, Int32 listBase, float thickness, float deviation, Int32 fontMode, API.GlyphMetricsFloat* glyphMetrics);
internal unsafe delegate Boolean UseFontOutlinesA(IntPtr hDC, Int32 first, Int32 count, Int32 listBase, float thickness, float deviation, Int32 fontMode, GlyphMetricsFloat* glyphMetrics);
internal unsafe static UseFontOutlinesA wglUseFontOutlinesA = null;
[System.Security.SuppressUnmanagedCodeSecurity()]
internal unsafe delegate Boolean UseFontOutlinesW(IntPtr hDC, Int32 first, Int32 count, Int32 listBase, float thickness, float deviation, Int32 fontMode, API.GlyphMetricsFloat* glyphMetrics);
internal unsafe delegate Boolean UseFontOutlinesW(IntPtr hDC, Int32 first, Int32 count, Int32 listBase, float thickness, float deviation, Int32 fontMode, GlyphMetricsFloat* glyphMetrics);
internal unsafe static UseFontOutlinesW wglUseFontOutlinesW = null;
[System.Security.SuppressUnmanagedCodeSecurity()]
internal delegate IntPtr CreateBufferRegionARB(IntPtr hDC, int iLayerPlane, UInt32 uType);

View file

@ -31,7 +31,7 @@ namespace OpenTK.Platform.Windows
#region --- Contructors ---
public WinGLContext()
: this(new DisplayMode(640, 480, new ColorDepth(32), 16, 0, 0, 2, false, false, false, 0.0f))
: this(new DisplayMode(640, 480, new ColorMode(32), 16, 0, 0, 2, false, false, false, 0.0f))
{
}
@ -72,20 +72,20 @@ namespace OpenTK.Platform.Windows
Debug.WriteLine(String.Format("Device context: {0}", deviceContext));
Debug.Write("Setting pixel format... ");
API.PixelFormatDescriptor pixelFormat = new API.PixelFormatDescriptor();
PixelFormatDescriptor pixelFormat = new PixelFormatDescriptor();
pixelFormat.Size = API.PixelFormatDescriptorSize;
pixelFormat.Version = API.PixelFormatDescriptorVersion;
pixelFormat.Flags =
API.PixelFormatDescriptorFlags.SUPPORT_OPENGL |
API.PixelFormatDescriptorFlags.DRAW_TO_WINDOW;
PixelFormatDescriptorFlags.SUPPORT_OPENGL |
PixelFormatDescriptorFlags.DRAW_TO_WINDOW;
pixelFormat.ColorBits = (byte)(mode.Color.Red + mode.Color.Green + mode.Color.Blue);
if (mode.Color.IsIndexed)
{
pixelFormat.PixelType = API.PixelType.INDEXED;
pixelFormat.PixelType = PixelType.INDEXED;
}
else
{
pixelFormat.PixelType = API.PixelType.RGBA;
pixelFormat.PixelType = PixelType.RGBA;
pixelFormat.RedBits = (byte)mode.Color.Red;
pixelFormat.GreenBits = (byte)mode.Color.Green;
pixelFormat.BlueBits = (byte)mode.Color.Blue;
@ -107,17 +107,17 @@ namespace OpenTK.Platform.Windows
if (mode.DepthBits <= 0)
{
pixelFormat.Flags |= API.PixelFormatDescriptorFlags.DEPTH_DONTCARE;
pixelFormat.Flags |= PixelFormatDescriptorFlags.DEPTH_DONTCARE;
}
if (mode.Stereo)
{
pixelFormat.Flags |= API.PixelFormatDescriptorFlags.STEREO;
pixelFormat.Flags |= PixelFormatDescriptorFlags.STEREO;
}
if (mode.Buffers > 1)
{
pixelFormat.Flags |= API.PixelFormatDescriptorFlags.DOUBLEBUFFER;
pixelFormat.Flags |= PixelFormatDescriptorFlags.DOUBLEBUFFER;
}
// TODO: More elaborate mode setting, using DescribePixelFormat.
@ -209,8 +209,8 @@ namespace OpenTK.Platform.Windows
while (!done)
{
API.DeviceMode currentMode = new API.DeviceMode();
IntPtr handle = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(API.DeviceMode)));
DeviceMode currentMode = new DeviceMode();
IntPtr handle = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(DeviceMode)));
Marshal.StructureToPtr(currentMode, handle, true);
done = (API.EnumDisplaySettings(null, index++, handle) != 0) ? false : true;
@ -231,7 +231,7 @@ namespace OpenTK.Platform.Windows
DisplayMode mode = new DisplayMode(
currentMode.PelsWidth,
currentMode.PelsHeight,
new ColorDepth(currentMode.BitsPerPel),
new ColorMode(currentMode.BitsPerPel),
0,
0,
0,
@ -256,7 +256,7 @@ namespace OpenTK.Platform.Windows
public void Dispose()
{
Debug.Print("Manually disposing WinGLContext {0}.", this.renderContext);
//Debug.Print("Manually disposing WinGLContext {0}.", this.renderContext);
Dispose(true);
GC.SuppressFinalize(this);
}
@ -265,7 +265,8 @@ namespace OpenTK.Platform.Windows
{
if (!disposed)
{
// Clean unmanaged resources here:
// Clean unmanaged resources here
// The following call uses the Debug and Wgl classes, making it unsafe?
ReleaseResources();
if (calledManually)
@ -290,9 +291,8 @@ namespace OpenTK.Platform.Windows
Wgl.Imports.MakeCurrent(IntPtr.Zero, IntPtr.Zero);
if (!Wgl.Imports.DeleteContext(renderContext))
{
throw new ApplicationException(
"Could not destroy the OpenGL render context. Error: " + Marshal.GetLastWin32Error()
);
//throw new ApplicationException("Could not destroy the OpenGL render context. Error: " + Marshal.GetLastWin32Error());
//Debug.Print("Could not destroy the OpenGL render context. Error: {0}", Marshal.GetLastWin32Error());
}
renderContext = IntPtr.Zero;
}
@ -301,8 +301,8 @@ namespace OpenTK.Platform.Windows
{
if (!API.ReleaseDC(windowHandle, deviceContext))
{
throw new ApplicationException(
"Could not release device context. Error: " + Marshal.GetLastWin32Error());
//throw new ApplicationException("Could not release device context. Error: " + Marshal.GetLastWin32Error());
//Debug.Print("Could not destroy the device context. Error: {0}", Marshal.GetLastWin32Error());
}
}
@ -310,9 +310,8 @@ namespace OpenTK.Platform.Windows
{
if (!API.FreeLibrary(opengl32Handle))
{
throw new ApplicationException(
"FreeLibray call failed ('opengl32.dll'), Error: " + Marshal.GetLastWin32Error()
);
//throw new ApplicationException("FreeLibray call failed ('opengl32.dll'), Error: " + Marshal.GetLastWin32Error());
//Debug.Print("Could not release {0}. Error: {1}", opengl32Name, Marshal.GetLastWin32Error());
}
opengl32Handle = IntPtr.Zero;
}

View file

@ -17,7 +17,7 @@ using System.Diagnostics;
namespace OpenTK.Platform.Windows
{
sealed class WinGLControl : OpenTK.Platform.IGLControl
sealed class WinGLControl : IGLControl, IDisposable
{
private WinGLContext glContext;
private bool fullscreen;
@ -25,7 +25,7 @@ namespace OpenTK.Platform.Windows
private DisplayMode mode;
private bool disposed;
private Message msg; // Used only by the IsIdle event.
private MSG msg; // Used only by the IsIdle event.
#region --- Constructors ---
@ -39,6 +39,8 @@ namespace OpenTK.Platform.Windows
glContext = new WinGLContext(mode);
}
#endregion
void c_HandleCreated(object sender, EventArgs e)
{
Debug.Print("GLControl handle created, creating WinGLContext.");
@ -66,9 +68,7 @@ namespace OpenTK.Platform.Windows
glContext.Dispose();
}
#endregion
#region --- IGLControl membmers ---
#region --- IGLControl members ---
#region public bool IsIdle
@ -76,7 +76,7 @@ namespace OpenTK.Platform.Windows
{
get
{
return !API.PeekMessage(out msg, IntPtr.Zero, 0, 0, 0);
return !API.PeekMessage(ref msg, IntPtr.Zero, 0, 0, 0);
}
}
@ -115,7 +115,7 @@ namespace OpenTK.Platform.Windows
public void Dispose()
{
this.Dispose(true);
GC.SuppressFinalize(this);
//GC.SuppressFinalize(this);
}
private void Dispose(bool calledManually)
@ -132,12 +132,12 @@ namespace OpenTK.Platform.Windows
disposed = true;
}
}
/*
~WinGLControl()
{
Dispose(false);
}
*/
#endregion
}
}

View file

@ -21,7 +21,7 @@ namespace OpenTK.Platform.Windows
/// Drives GameWindow on Windows.
/// This class supports OpenTK, and is not intended for use by OpenTK programs.
/// </summary>
sealed class WinGLNative : NativeWindow, INativeGLWindow, IDisposable
sealed class WinGLNative : NativeWindow, INativeGLWindow
{
#region --- Fields ---
@ -35,6 +35,11 @@ namespace OpenTK.Platform.Windows
private WindowInfo window;
private int top, bottom, left, right;
/// <summary>
/// For use in PeekMessage. System.Windows.Forms.Message causes deadlock there.
/// </summary>
private MSG myGoodMsg = new MSG();
/// <summary>
/// For use in WndProc only.
/// </summary>
@ -65,12 +70,12 @@ namespace OpenTK.Platform.Windows
/// <param name="m">Reference to the incoming Windows Message.</param>
protected override void WndProc(ref Message m)
{
switch (m.Msg)
switch ((WindowMessage)m.Msg)
{
case API.Constants.WM_WINDOWPOSCHANGED:
case WindowMessage.WINDOWPOSCHANGED:
// Get window size
width = Marshal.ReadInt32(m.LParam, (int)Marshal.OffsetOf(typeof(API.WindowPosition), "cx"));
height = Marshal.ReadInt32(m.LParam, (int)Marshal.OffsetOf(typeof(API.WindowPosition), "cy"));
width = Marshal.ReadInt32(m.LParam, (int)Marshal.OffsetOf(typeof(WindowPosition), "cx"));
height = Marshal.ReadInt32(m.LParam, (int)Marshal.OffsetOf(typeof(WindowPosition), "cy"));
width -= (left_border + right_border);
height -= (top_border + bottom_border);
//if (resizeEventArgs.Width != width || resizeEventArgs.Height != height)
@ -86,10 +91,10 @@ namespace OpenTK.Platform.Windows
// If the message was not a resize notification, send it to the default WndProc.
break;
case API.Constants.WM_CREATE:
case WindowMessage.CREATE:
// Set the window width and height:
this.mode.Width = Marshal.ReadInt32(m.LParam, (int)Marshal.OffsetOf(typeof(API.CreateStruct), "cx"));
this.mode.Height = Marshal.ReadInt32(m.LParam, (int)Marshal.OffsetOf(typeof(API.CreateStruct), "cy"));
this.mode.Width = Marshal.ReadInt32(m.LParam, (int)Marshal.OffsetOf(typeof(CreateStruct), "cx"));
this.mode.Height = Marshal.ReadInt32(m.LParam, (int)Marshal.OffsetOf(typeof(CreateStruct), "cy"));
this.mode.Width -= (left_border + right_border);
this.mode.Height -= (top_border + bottom_border);
@ -97,21 +102,23 @@ namespace OpenTK.Platform.Windows
this.OnCreate(EventArgs.Empty);
return;
case API.Constants.WM_CLOSE:
case WindowMessage.CLOSE:
this.DestroyWindow();
return;
case API.Constants.WM_DESTROY:
case WindowMessage.DESTROY:
this.OnDestroy(EventArgs.Empty);
break;
case API.Constants.WM_QUIT:
case WindowMessage.QUIT:
isExiting = true;
//this.Dispose();
//Debug.WriteLine("Application quit.");
return;
}
DefWndProc(ref m);
//DefWndProc(ref m);
base.WndProc(ref m);
}
#endregion
@ -121,12 +128,12 @@ namespace OpenTK.Platform.Windows
#region public void ProcessEvents()
private int ret;
System.Windows.Forms.Message msg;
MSG msg;
public void ProcessEvents()
{
while (!IsIdle)
{
ret = API.GetMessage(out msg, Handle, 0, 0);
ret = API.GetMessage(ref msg, Handle, 0, 0);
if (ret == -1)
{
throw new ApplicationException(String.Format(
@ -195,7 +202,7 @@ namespace OpenTK.Platform.Windows
get
{
//return !API.PeekMessage(out msg, IntPtr.Zero, 0, 0, 0);
return !API.PeekMessage(out msg, this.Handle, 0, 0, 0);
return !API.PeekMessage(ref myGoodMsg, this.Handle, 0, 0, 0);
//return API.GetQueueStatus(API.QueueStatusFlags.ALLEVENTS) == 0;
}
}
@ -220,21 +227,21 @@ namespace OpenTK.Platform.Windows
CreateParams cp = new CreateParams();
cp.ClassStyle =
(int)API.WindowClassStyle.OwnDC |
(int)API.WindowClassStyle.VRedraw |
(int)API.WindowClassStyle.HRedraw |
(int)API.WindowClassStyle.Ime;
(int)WindowClassStyle.OwnDC |
(int)WindowClassStyle.VRedraw |
(int)WindowClassStyle.HRedraw |
(int)WindowClassStyle.Ime;
cp.Style =
(int)API.WindowStyle.Visible |
(int)API.WindowStyle.ClipChildren |
(int)API.WindowStyle.ClipSiblings |
(int)API.WindowStyle.OverlappedWindow;
(int)WindowStyle.Visible |
(int)WindowStyle.ClipChildren |
(int)WindowStyle.ClipSiblings |
(int)WindowStyle.OverlappedWindow;
API.Rectangle rect = new API.Rectangle();
Rectangle rect = new Rectangle();
rect.top = rect.left = 0;
rect.bottom = windowMode.Height;
rect.right = windowMode.Width;
API.AdjustWindowRect(ref rect, API.WindowStyle.OverlappedWindow, false);
API.AdjustWindowRect(ref rect, WindowStyle.OverlappedWindow, false);
// Not used
Top = 0;
@ -315,7 +322,7 @@ namespace OpenTK.Platform.Windows
public void DestroyWindow()
{
Debug.Print("Destroying window: {0}", window.ToString());
API.PostMessage(this.Handle, API.Constants.WM_DESTROY, IntPtr.Zero, IntPtr.Zero);
API.PostMessage(this.Handle, WindowMessage.DESTROY, IntPtr.Zero, IntPtr.Zero);
}
#endregion
@ -428,7 +435,7 @@ namespace OpenTK.Platform.Windows
public void Dispose()
{
this.Dispose(true);
GC.SuppressFinalize(this);
//GC.SuppressFinalize(this);
}
private void Dispose(bool calledManually)
@ -441,17 +448,17 @@ namespace OpenTK.Platform.Windows
{
// Safe to clean managed resources
glContext.Dispose();
base.DestroyHandle();
//base.DestroyHandle();
}
disposed = true;
}
}
/*
~WinGLNative()
{
Dispose(false);
}
*/
#endregion
}

View file

@ -23,7 +23,7 @@ namespace OpenTK.Platform.Windows
/// <summary>
/// Input event data.
/// </summary>
private API.RawInput data = new API.RawInput();
private RawInput data = new RawInput();
/// <summary>
/// The total number of input devices connected to this system.
/// </summary>
@ -70,12 +70,12 @@ namespace OpenTK.Platform.Windows
/// <param name="msg">The WM_INPUT message, containing the data on the input event.</param>
protected override void WndProc(ref Message msg)
{
switch (msg.Msg)
switch ((WindowMessage)msg.Msg)
{
case API.Constants.WM_INPUT:
case WindowMessage.INPUT:
size = 0;
// Get the size of the input data
API.GetRawInputData(msg.LParam, API.GetRawInputDataEnum.INPUT,
API.GetRawInputData(msg.LParam, GetRawInputDataEnum.INPUT,
IntPtr.Zero, ref size, API.RawInputHeaderSize);
//if (data == null || API.RawInputSize < size)
@ -83,21 +83,21 @@ namespace OpenTK.Platform.Windows
// throw new ApplicationException("Critical error when processing raw windows input.");
//}
if (size == API.GetRawInputData(msg.LParam, API.GetRawInputDataEnum.INPUT,
if (size == API.GetRawInputData(msg.LParam, GetRawInputDataEnum.INPUT,
data, ref size, API.RawInputHeaderSize))
{
switch (data.Header.Type)
{
case API.RawInputDeviceType.KEYBOARD:
case RawInputDeviceType.KEYBOARD:
if (!keyboardDriver.ProcessKeyboardEvent(data))
API.DefRawInputProc(ref data, 1, (uint)API.RawInputHeaderSize);
return;
case API.RawInputDeviceType.MOUSE:
case RawInputDeviceType.MOUSE:
API.DefRawInputProc(ref data, 1, (uint)API.RawInputHeaderSize);
return;
case API.RawInputDeviceType.HID:
case RawInputDeviceType.HID:
API.DefRawInputProc(ref data, 1, (uint)API.RawInputHeaderSize);
return;
}
@ -110,13 +110,13 @@ namespace OpenTK.Platform.Windows
}
break;
case API.Constants.WM_CLOSE:
case API.Constants.WM_DESTROY:
case WindowMessage.CLOSE:
case WindowMessage.DESTROY:
Debug.Print("Input window detached from parent {0}.", Handle);
ReleaseHandle();
break;
case API.Constants.WM_QUIT:
case WindowMessage.QUIT:
Debug.WriteLine("Input window quit.");
this.Dispose();
break;
@ -168,6 +168,7 @@ namespace OpenTK.Platform.Windows
if (manual)
{
keyboardDriver.Dispose();
this.ReleaseHandle();
}
disposed = true;

View file

@ -23,10 +23,10 @@ namespace OpenTK.Platform.Windows
private List<Keyboard> keyboards = new List<Keyboard>();
private IntPtr windowHandle;
#region internal static Dictionary<API.VirtualKeys, Input.Key> KeyMap
#region internal static Dictionary<VirtualKeys, Input.Key> KeyMap
internal static Dictionary<API.VirtualKeys, Input.Key> KeyMap =
new Dictionary<API.VirtualKeys, Input.Key>((int)API.VirtualKeys.Last);
internal static Dictionary<VirtualKeys, Input.Key> KeyMap =
new Dictionary<VirtualKeys, Input.Key>((int)VirtualKeys.Last);
private static bool keyMapExists;
/// <summary>
@ -38,81 +38,81 @@ namespace OpenTK.Platform.Windows
{
try
{
KeyMap.Add(API.VirtualKeys.ESCAPE, Input.Key.Escape);
KeyMap.Add(VirtualKeys.ESCAPE, Input.Key.Escape);
// Function keys
for (int i = 0; i < 24; i++)
{
KeyMap.Add((API.VirtualKeys)((int)API.VirtualKeys.F1 + i), Input.Key.F1 + i);
KeyMap.Add((VirtualKeys)((int)VirtualKeys.F1 + i), Input.Key.F1 + i);
}
// Number keys (0-9)
for (int i = 0; i <= 9; i++)
{
KeyMap.Add((API.VirtualKeys)(0x30 + i), Input.Key.Number0 + i);
KeyMap.Add((VirtualKeys)(0x30 + i), Input.Key.Number0 + i);
}
// Letters (A-Z)
for (int i = 0; i < 26; i++)
{
KeyMap.Add((API.VirtualKeys)(0x41 + i), Input.Key.A + i);
KeyMap.Add((VirtualKeys)(0x41 + i), Input.Key.A + i);
}
KeyMap.Add(API.VirtualKeys.TAB, Input.Key.Tab);
KeyMap.Add(API.VirtualKeys.CAPITAL, Input.Key.CapsLock);
KeyMap.Add(API.VirtualKeys.LCONTROL, Input.Key.ControlLeft);
KeyMap.Add(API.VirtualKeys.LSHIFT, Input.Key.ShiftLeft);
KeyMap.Add(API.VirtualKeys.LWIN, Input.Key.WinLeft);
KeyMap.Add(API.VirtualKeys.LMENU, Input.Key.AltLeft);
KeyMap.Add(API.VirtualKeys.SPACE, Input.Key.Space);
KeyMap.Add(API.VirtualKeys.RMENU, Input.Key.AltRight);
KeyMap.Add(API.VirtualKeys.RWIN, Input.Key.WinRight);
KeyMap.Add(API.VirtualKeys.APPS, Input.Key.Menu);
KeyMap.Add(API.VirtualKeys.RCONTROL, Input.Key.ControlRight);
KeyMap.Add(API.VirtualKeys.RSHIFT, Input.Key.ShiftRight);
KeyMap.Add(API.VirtualKeys.RETURN, Input.Key.Enter);
KeyMap.Add(API.VirtualKeys.BACK, Input.Key.BackSpace);
KeyMap.Add(VirtualKeys.TAB, Input.Key.Tab);
KeyMap.Add(VirtualKeys.CAPITAL, Input.Key.CapsLock);
KeyMap.Add(VirtualKeys.LCONTROL, Input.Key.ControlLeft);
KeyMap.Add(VirtualKeys.LSHIFT, Input.Key.ShiftLeft);
KeyMap.Add(VirtualKeys.LWIN, Input.Key.WinLeft);
KeyMap.Add(VirtualKeys.LMENU, Input.Key.AltLeft);
KeyMap.Add(VirtualKeys.SPACE, Input.Key.Space);
KeyMap.Add(VirtualKeys.RMENU, Input.Key.AltRight);
KeyMap.Add(VirtualKeys.RWIN, Input.Key.WinRight);
KeyMap.Add(VirtualKeys.APPS, Input.Key.Menu);
KeyMap.Add(VirtualKeys.RCONTROL, Input.Key.ControlRight);
KeyMap.Add(VirtualKeys.RSHIFT, Input.Key.ShiftRight);
KeyMap.Add(VirtualKeys.RETURN, Input.Key.Enter);
KeyMap.Add(VirtualKeys.BACK, Input.Key.BackSpace);
KeyMap.Add(API.VirtualKeys.OEM_1, Input.Key.Semicolon); // Varies by keyboard, ;: on Win2K/US
KeyMap.Add(API.VirtualKeys.OEM_2, Input.Key.Slash); // Varies by keyboard, /? on Win2K/US
KeyMap.Add(API.VirtualKeys.OEM_3, Input.Key.Tilde); // Varies by keyboard, `~ on Win2K/US
KeyMap.Add(API.VirtualKeys.OEM_4, Input.Key.BracketLeft); // Varies by keyboard, [{ on Win2K/US
KeyMap.Add(API.VirtualKeys.OEM_5, Input.Key.BackSlash); // Varies by keyboard, \| on Win2K/US
KeyMap.Add(API.VirtualKeys.OEM_6, Input.Key.BracketRight); // Varies by keyboard, ]} on Win2K/US
KeyMap.Add(API.VirtualKeys.OEM_7, Input.Key.Quote); // Varies by keyboard, '" on Win2K/US
KeyMap.Add(API.VirtualKeys.OEM_PLUS, Input.Key.Plus); // Invariant: +
KeyMap.Add(API.VirtualKeys.OEM_COMMA, Input.Key.Comma); // Invariant: ,
KeyMap.Add(API.VirtualKeys.OEM_MINUS, Input.Key.Minus); // Invariant: -
KeyMap.Add(API.VirtualKeys.OEM_PERIOD, Input.Key.Period); // Invariant: .
KeyMap.Add(VirtualKeys.OEM_1, Input.Key.Semicolon); // Varies by keyboard, ;: on Win2K/US
KeyMap.Add(VirtualKeys.OEM_2, Input.Key.Slash); // Varies by keyboard, /? on Win2K/US
KeyMap.Add(VirtualKeys.OEM_3, Input.Key.Tilde); // Varies by keyboard, `~ on Win2K/US
KeyMap.Add(VirtualKeys.OEM_4, Input.Key.BracketLeft); // Varies by keyboard, [{ on Win2K/US
KeyMap.Add(VirtualKeys.OEM_5, Input.Key.BackSlash); // Varies by keyboard, \| on Win2K/US
KeyMap.Add(VirtualKeys.OEM_6, Input.Key.BracketRight); // Varies by keyboard, ]} on Win2K/US
KeyMap.Add(VirtualKeys.OEM_7, Input.Key.Quote); // Varies by keyboard, '" on Win2K/US
KeyMap.Add(VirtualKeys.OEM_PLUS, Input.Key.Plus); // Invariant: +
KeyMap.Add(VirtualKeys.OEM_COMMA, Input.Key.Comma); // Invariant: ,
KeyMap.Add(VirtualKeys.OEM_MINUS, Input.Key.Minus); // Invariant: -
KeyMap.Add(VirtualKeys.OEM_PERIOD, Input.Key.Period); // Invariant: .
KeyMap.Add(API.VirtualKeys.HOME, Input.Key.Home);
KeyMap.Add(API.VirtualKeys.END, Input.Key.End);
KeyMap.Add(API.VirtualKeys.DELETE, Input.Key.Delete);
KeyMap.Add(API.VirtualKeys.PRIOR, Input.Key.PageUp);
KeyMap.Add(API.VirtualKeys.NEXT, Input.Key.PageDown);
KeyMap.Add(API.VirtualKeys.PRINT, Input.Key.PrintScreen);
KeyMap.Add(API.VirtualKeys.PAUSE, Input.Key.Pause);
KeyMap.Add(API.VirtualKeys.NUMLOCK, Input.Key.NumLock);
KeyMap.Add(VirtualKeys.HOME, Input.Key.Home);
KeyMap.Add(VirtualKeys.END, Input.Key.End);
KeyMap.Add(VirtualKeys.DELETE, Input.Key.Delete);
KeyMap.Add(VirtualKeys.PRIOR, Input.Key.PageUp);
KeyMap.Add(VirtualKeys.NEXT, Input.Key.PageDown);
KeyMap.Add(VirtualKeys.PRINT, Input.Key.PrintScreen);
KeyMap.Add(VirtualKeys.PAUSE, Input.Key.Pause);
KeyMap.Add(VirtualKeys.NUMLOCK, Input.Key.NumLock);
KeyMap.Add(API.VirtualKeys.SLEEP, Input.Key.Sleep);
KeyMap.Add(VirtualKeys.SLEEP, Input.Key.Sleep);
// Keypad
for (int i = 0; i <= 9; i++)
{
KeyMap.Add((API.VirtualKeys)((int)API.VirtualKeys.NUMPAD0 + i), Input.Key.Keypad0 + i);
KeyMap.Add((VirtualKeys)((int)VirtualKeys.NUMPAD0 + i), Input.Key.Keypad0 + i);
}
KeyMap.Add(API.VirtualKeys.DECIMAL, Input.Key.KeypadDecimal);
KeyMap.Add(API.VirtualKeys.ADD, Input.Key.KeypadAdd);
KeyMap.Add(API.VirtualKeys.SUBTRACT, Input.Key.KeypadSubtract);
KeyMap.Add(API.VirtualKeys.DIVIDE, Input.Key.KeypadDivide);
KeyMap.Add(API.VirtualKeys.MULTIPLY, Input.Key.KeypadMultiply);
KeyMap.Add(VirtualKeys.DECIMAL, Input.Key.KeypadDecimal);
KeyMap.Add(VirtualKeys.ADD, Input.Key.KeypadAdd);
KeyMap.Add(VirtualKeys.SUBTRACT, Input.Key.KeypadSubtract);
KeyMap.Add(VirtualKeys.DIVIDE, Input.Key.KeypadDivide);
KeyMap.Add(VirtualKeys.MULTIPLY, Input.Key.KeypadMultiply);
// Navigation
KeyMap.Add(API.VirtualKeys.UP, Input.Key.Up);
KeyMap.Add(API.VirtualKeys.DOWN, Input.Key.Down);
KeyMap.Add(API.VirtualKeys.LEFT, Input.Key.Left);
KeyMap.Add(API.VirtualKeys.RIGHT, Input.Key.Right);
KeyMap.Add(VirtualKeys.UP, Input.Key.Up);
KeyMap.Add(VirtualKeys.DOWN, Input.Key.Down);
KeyMap.Add(VirtualKeys.LEFT, Input.Key.Left);
KeyMap.Add(VirtualKeys.RIGHT, Input.Key.Right);
}
catch (ArgumentException e)
{
@ -156,18 +156,18 @@ namespace OpenTK.Platform.Windows
internal void UpdateKeyboardList()
{
int count = WinRawInput.DeviceCount;
API.RawInputDeviceList[] ridl = new API.RawInputDeviceList[count];
RawInputDeviceList[] ridl = new RawInputDeviceList[count];
for (int i = 0; i < count; i++)
ridl[i] = new API.RawInputDeviceList();
ridl[i] = new RawInputDeviceList();
API.GetRawInputDeviceList(ridl, ref count, API.RawInputDeviceListSize);
// Discover keyboard devices:
for (int i = 0; i < count; i++)
{
uint size = 0;
API.GetRawInputDeviceInfo(ridl[i].Device, API.RawInputDeviceInfoEnum.DEVICENAME, IntPtr.Zero, ref size);
API.GetRawInputDeviceInfo(ridl[i].Device, RawInputDeviceInfoEnum.DEVICENAME, IntPtr.Zero, ref size);
IntPtr name_ptr = Marshal.AllocHGlobal((IntPtr)size);
API.GetRawInputDeviceInfo(ridl[i].Device, API.RawInputDeviceInfoEnum.DEVICENAME, name_ptr, ref size);
API.GetRawInputDeviceInfo(ridl[i].Device, RawInputDeviceInfoEnum.DEVICENAME, name_ptr, ref size);
string name = Marshal.PtrToStringAnsi(name_ptr);
Marshal.FreeHGlobal(name_ptr);
if (name.ToLower().Contains("root"))
@ -175,7 +175,7 @@ namespace OpenTK.Platform.Windows
// This is a terminal services devices, skip it.
continue;
}
else if (ridl[i].Type == API.RawInputDeviceType.KEYBOARD || ridl[i].Type == API.RawInputDeviceType.HID)
else if (ridl[i].Type == RawInputDeviceType.KEYBOARD || ridl[i].Type == RawInputDeviceType.HID)
{
//It's a keyboard or a USB device that could be a keyboard
@ -206,9 +206,9 @@ namespace OpenTK.Platform.Windows
kb.Description = deviceDesc;
// Register the keyboard:
API.RawInputDeviceInfo info = new API.RawInputDeviceInfo();
RawInputDeviceInfo info = new RawInputDeviceInfo();
int devInfoSize = API.RawInputDeviceInfoSize;
API.GetRawInputDeviceInfo(ridl[i].Device, API.RawInputDeviceInfoEnum.DEVICEINFO,
API.GetRawInputDeviceInfo(ridl[i].Device, RawInputDeviceInfoEnum.DEVICEINFO,
info, ref devInfoSize);
kb.NumberOfLeds = info.Device.Keyboard.NumberOfIndicators;
@ -232,12 +232,12 @@ namespace OpenTK.Platform.Windows
internal void RegisterKeyboardDevice(Keyboard kb)
{
API.RawInputDevice[] rid = new API.RawInputDevice[1];
RawInputDevice[] rid = new RawInputDevice[1];
// Keyboard is 1/6 (page/id). See http://www.microsoft.com/whdc/device/input/HID_HWID.mspx
rid[0] = new API.RawInputDevice();
rid[0] = new RawInputDevice();
rid[0].UsagePage = 1;
rid[0].Usage = 6;
rid[0].Flags = API.RawInputDeviceFlags.INPUTSINK;
rid[0].Flags = RawInputDeviceFlags.INPUTSINK;
rid[0].Target = windowHandle;
if (!API.RegisterRawInputDevices(rid, 1, API.RawInputDeviceSize))
@ -264,30 +264,30 @@ namespace OpenTK.Platform.Windows
/// </summary>
/// <param name="rin"></param>
/// <returns></returns>
internal bool ProcessKeyboardEvent(API.RawInput rin)
internal bool ProcessKeyboardEvent(RawInput rin)
{
//Keyboard key = keyboards[0];
//rin.Header.Device;
switch (rin.Header.Type)
{
case API.RawInputDeviceType.KEYBOARD:
case RawInputDeviceType.KEYBOARD:
bool pressed =
rin.Data.Keyboard.Message == API.Constants.WM_KEYDOWN ||
rin.Data.Keyboard.Message == API.Constants.WM_SYSKEYDOWN;
rin.Data.Keyboard.Message == (int)WindowMessage.KEYDOWN ||
rin.Data.Keyboard.Message == (int)WindowMessage.SYSKEYDOWN;
// Generic control, shift, alt keys may be sent instead of left/right.
// It seems you have to explicitly register left/right events.
switch (rin.Data.Keyboard.VKey)
{
case API.VirtualKeys.SHIFT:
case VirtualKeys.SHIFT:
keyboards[0][Input.Key.ShiftLeft] = keyboards[0][Input.Key.ShiftRight] = pressed;
return true;
case API.VirtualKeys.CONTROL:
case VirtualKeys.CONTROL:
keyboards[0][Input.Key.ControlLeft] = keyboards[0][Input.Key.ControlRight] = pressed;
return true;
case API.VirtualKeys.MENU:
case VirtualKeys.MENU:
keyboards[0][Input.Key.AltLeft] = keyboards[0][Input.Key.AltRight] = pressed;
return true;
@ -349,9 +349,8 @@ namespace OpenTK.Platform.Windows
{
if (manual)
{
//keyboards.Clear();
keyboards.Clear();
}
disposed = true;
}
}