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 1d72cb7ab9
commit 5144535b8e
9 changed files with 1292 additions and 1041 deletions

View file

@ -46,7 +46,7 @@ namespace OpenTK.Platform.Windows
using LONG_PTR = System.IntPtr; using LONG_PTR = System.IntPtr;
using COLORREF = System.Int32; using COLORREF = System.Int32;
using RECT = OpenTK.Platform.Windows.API.Rectangle; using RECT = OpenTK.Platform.Windows.Rectangle;
using WNDPROC = System.IntPtr; using WNDPROC = System.IntPtr;
@ -70,109 +70,13 @@ namespace OpenTK.Platform.Windows
PixelFormatDescriptorSize = (short)Marshal.SizeOf(typeof(PixelFormatDescriptor)); PixelFormatDescriptorSize = (short)Marshal.SizeOf(typeof(PixelFormatDescriptor));
} }
#region --- Constants --- internal static readonly short PixelFormatDescriptorSize;
internal static readonly short PixelFormatDescriptorVersion;
public struct Constants internal static int RawInputSize;
{ internal static readonly int RawInputDeviceSize;
// Mouse indicator flags (found in winuser.h) internal static readonly int RawInputHeaderSize;
public const int MOUSE_MOVE_RELATIVE = 0; internal static readonly int RawInputDeviceListSize;
public const int MOUSE_MOVE_ABSOLUTE = 1; internal static readonly int RawInputDeviceInfoSize;
public const int MOUSE_VIRTUAL_DESKTOP = 0x02; // the coordinates are mapped to the virtual desktop
public const int MOUSE_ATTRIBUTES_CHANGED = 0x04; // requery for mouse attributes
// Found in winuser.h
public const int KEYBOARD_OVERRUN_MAKE_CODE = 0xFF;
// WM_ACTIVATE state values (found in winuser.h)
public const int WA_INACTIVE = 0;
public const int WA_ACTIVE = 1;
public const int WA_CLICKACTIVE = 2;
// Window Messages (found in winuser.h)
public const int WM_NULL = 0x0000;
public const int WM_CREATE = 0x0001;
public const int WM_DESTROY = 0x0002;
public const int WM_MOVE = 0x0003;
public const int WM_SIZE = 0x0005;
public const int WM_ACTIVATE = 0x0006;
public const int WM_SETFOCUS = 0x0007;
public const int WM_KILLFOCUS = 0x0008;
public const int WM_ENABLE = 0x000A;
public const int WM_SETREDRAW = 0x000B;
public const int WM_SETTEXT = 0x000C;
public const int WM_GETTEXT = 0x000D;
public const int WM_GETTEXTLENGTH = 0x000E;
public const int WM_PAINT = 0x000F;
public const int WM_CLOSE = 0x0010;
// _WIN32_WCE
public const int WM_QUERYENDSESSION = 0x0011;
public const int WM_QUERYOPEN = 0x0013;
public const int WM_ENDSESSION = 0x0016;
public const int WM_QUIT = 0x0012;
public const int WM_ERASEBKGND = 0x0014;
public const int WM_SYSCOLORCHANGE = 0x0015;
public const int WM_SHOWWINDOW = 0x0018;
public const int WM_WININICHANGE = 0x001A;
// WINVER >= 0x400
public const int WM_SETTINGCHANGE = WM_WININICHANGE;
public const int WM_DEVMODECHANGE = 0x001B;
public const int WM_ACTIVATEAPP = 0x001C;
public const int WM_FONTCHANGE = 0x001D;
public const int WM_TIMECHANGE = 0x001E;
public const int WM_CANCELMODE = 0x001F;
public const int WM_SETCURSOR = 0x0020;
public const int WM_MOUSEACTIVATE = 0x0021;
public const int WM_CHILDACTIVATE = 0x0022;
public const int WM_QUEUESYNC = 0x0023;
public const int WM_GETMINMAXINFO = 0x0024;
public const int WM_WINDOWPOSCHANGING = 0x0046;
public const int WM_WINDOWPOSCHANGED = 0x0047;
// Keyboard events (found in winuser.h)
public const int WM_INPUT = 0x00FF; // Raw input. XP and higher only.
public const int WM_KEYDOWN = 0x0100;
public const int WM_KEYUP = 0x101;
public const int WM_SYSKEYDOWN = 0x0104;
public const int WM_SYSKEYUP = 0x0105;
public const int WM_COMMAND = 0x0111;
public const int WM_SYSCOMMAND = 0x0112;
public const int WM_ENTERIDLE = 0x121;
// Pixel types (found in wingdi.h)
public const byte PFD_TYPE_RGBA = 0;
public const byte PFD_TYPE_COLORINDEX = 1;
// Layer types (found in wingdi.h)
public const byte PFD_MAIN_PLANE = 0;
public const byte PFD_OVERLAY_PLANE = 1;
public const byte PFD_UNDERLAY_PLANE = unchecked((byte)-1);
// Device mode types (found in wingdi.h)
public const int DM_BITSPERPEL = 0x00040000;
public const int DM_PELSWIDTH = 0x00080000;
public const int DM_PELSHEIGHT = 0x00100000;
public const int DM_DISPLAYFLAGS = 0x00200000;
public const int DM_DISPLAYFREQUENCY = 0x00400000;
// ChangeDisplaySettings types (found in winuser.h)
public const int CDS_UPDATEREGISTRY = 0x00000001;
public const int CDS_TEST = 0x00000002;
public const int CDS_FULLSCREEN = 0x00000004;
// ChangeDisplaySettings results (found in winuser.h)
public const int DISP_CHANGE_SUCCESSFUL = 0;
public const int DISP_CHANGE_RESTART = 1;
public const int DISP_CHANGE_FAILED = -1;
// (found in winuser.h)
public const int ENUM_REGISTRY_SETTINGS = -2;
public const int ENUM_CURRENT_SETTINGS = -1;
}
#endregion
#region --- Functions --- #region --- Functions ---
@ -258,94 +162,6 @@ namespace OpenTK.Platform.Windows
IntPtr Instance, IntPtr Instance,
IntPtr Param); IntPtr Param);
public enum WindowStyle : int
{
Overlapped = 0x00000000,
Popup = unchecked((int)0x80000000),
Child = 0x40000000,
Minimize = 0x20000000,
Visible = 0x10000000,
Disabled = 0x08000000,
ClipSiblings = 0x04000000,
ClipChildren = 0x02000000,
Maximize = 0x01000000,
Caption = 0x00C00000, // Border | DialogFrame
Border = 0x00800000,
DialogFrame = 0x00400000,
VScroll = 0x00200000,
HScreen = 0x00100000,
SystemMenu = 0x00080000,
ThickFrame = 0x00040000,
Group = 0x00020000,
TabStop = 0x00010000,
MinimizeBox = 0x00020000,
MaximizeBox = 0x00010000,
Tiled = Overlapped,
Iconic = Minimize,
SizeBox = ThickFrame,
TiledWindow = OverlappedWindow,
// Common window styles:
OverlappedWindow = Overlapped | Caption | SystemMenu | ThickFrame | MinimizeBox | MaximizeBox,
PopupWindow = Popup | Border | SystemMenu,
ChildWindow = Child
}
[Flags]
public enum ExtendedWindowStyle : int
{
DialogModalFrame = 0x00000001,
NoParentNotify = 0x00000004,
Topmost = 0x00000008,
AcceptFiles = 0x00000010,
Transparent = 0x00000020,
// #if(WINVER >= 0x0400)
MdiChild = 0x00000040,
ToolWindow = 0x00000080,
WindowEdge = 0x00000100,
ClientEdge = 0x00000200,
ContextHelp = 0x00000400,
// #endif
// #if(WINVER >= 0x0400)
Right = 0x00001000,
Left = 0x00000000,
RightToLeftReading = 0x00002000,
LeftToRightReading = 0x00000000,
LeftScrollbar = 0x00004000,
RightScrollbar = 0x00000000,
ControlParent = 0x00010000,
StaticEdge = 0x00020000,
ApplicationWindow = 0x00040000,
OverlappedWindow = WindowEdge | ClientEdge,
PaletteWindow = WindowEdge | ToolWindow | Topmost,
// #endif
// #if(_WIN32_WINNT >= 0x0500)
Layered = 0x00080000,
// #endif
// #if(WINVER >= 0x0500)
NoInheritLayout = 0x00100000, // Disable inheritence of mirroring by children
RightToLeftLayout = 0x00400000, // Right to left mirroring
// #endif /* WINVER >= 0x0500 */
// #if(_WIN32_WINNT >= 0x0501)
Composited = 0x02000000,
// #endif /* _WIN32_WINNT >= 0x0501 */
// #if(_WIN32_WINNT >= 0x0500)
NoActivate = 0x08000000
// #endif /* _WIN32_WINNT >= 0x0500 */
}
#endregion
#region DestroyWindow #region DestroyWindow
[DllImport("user32.dll", SetLastError = true)] [DllImport("user32.dll", SetLastError = true)]
@ -423,35 +239,9 @@ namespace OpenTK.Platform.Windows
/// <param name="flags">Not used</param> /// <param name="flags">Not used</param>
/// <returns>True if there is a message pending.</returns> /// <returns>True if there is a message pending.</returns>
[System.Security.SuppressUnmanagedCodeSecurity] [System.Security.SuppressUnmanagedCodeSecurity]
[DllImport("User32.dll", CharSet = CharSet.Auto)] [DllImport("User32.dll"), CLSCompliant(false)]
[return: MarshalAs(UnmanagedType.Bool)] [return: MarshalAs(UnmanagedType.Bool)]
public static extern bool PeekMessage( public static extern bool PeekMessage(ref MSG msg, IntPtr hWnd, int messageFilterMin, int messageFilterMax, int flags);
out Message msg,
IntPtr hWnd,
int messageFilterMin,
int messageFilterMax,
int flags
);
/// <summary>
/// Low-level WINAPI function that checks the next message in the queue.
/// </summary>
/// <param name="msg">The pending message (if any) is stored here.</param>
/// <param name="hWnd">Not used</param>
/// <param name="messageFilterMin">Not used</param>
/// <param name="messageFilterMax">Not used</param>
/// <param name="flags">Not used</param>
/// <returns>True if there is a message pending.</returns>
[System.Security.SuppressUnmanagedCodeSecurity]
[DllImport("User32.dll", CharSet = CharSet.Auto)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool PeekMessage(
out System.Windows.Forms.Message msg,
IntPtr hWnd,
int messageFilterMin,
int messageFilterMax,
int flags
);
#endregion #endregion
@ -472,14 +262,10 @@ namespace OpenTK.Platform.Windows
/// To get extended error information, call GetLastError. /// To get extended error information, call GetLastError.
/// </returns> /// </returns>
[System.Security.SuppressUnmanagedCodeSecurity] [System.Security.SuppressUnmanagedCodeSecurity]
[DllImport("User32.dll", CharSet = CharSet.Auto)] [DllImport("User32.dll"), CLSCompliant(false)]
//[return: MarshalAs(UnmanagedType.Bool)] //[return: MarshalAs(UnmanagedType.Bool)]
public static extern INT GetMessage( public static extern INT GetMessage(ref MSG msg,
out System.Windows.Forms.Message msg, IntPtr windowHandle, int messageFilterMin, int messageFilterMax);
IntPtr windowHandle,
int messageFilterMin,
int messageFilterMax
);
#endregion #endregion
@ -491,17 +277,7 @@ namespace OpenTK.Platform.Windows
[return: MarshalAs(UnmanagedType.Bool)] [return: MarshalAs(UnmanagedType.Bool)]
public static extern BOOL PostMessage( public static extern BOOL PostMessage(
HWND hWnd, HWND hWnd,
UINT Msg, WindowMessage Msg,
WPARAM wParam,
LPARAM lParam
);
[System.Security.SuppressUnmanagedCodeSecurity]
[DllImport("User32.dll", CharSet = CharSet.Auto)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern BOOL PostMessage(
HWND hWnd,
INT Msg,
WPARAM wParam, WPARAM wParam,
LPARAM lParam LPARAM lParam
); );
@ -518,8 +294,8 @@ namespace OpenTK.Platform.Windows
#region DispatchMessage #region DispatchMessage
[System.Security.SuppressUnmanagedCodeSecurity] [System.Security.SuppressUnmanagedCodeSecurity]
[DllImport("User32.dll", CharSet = CharSet.Auto)] [DllImport("User32.dll"), CLSCompliant(false)]
public static extern LRESULT DispatchMessage(ref System.Windows.Forms.Message lpmsg); public static extern LRESULT DispatchMessage(ref MSG msg);
#endregion #endregion
@ -1195,26 +971,115 @@ namespace OpenTK.Platform.Windows
#endregion #endregion
#region --- Structures --- #endregion
}
#region Message #region --- Constants ---
[StructLayout(LayoutKind.Sequential)] public struct Constants
public struct Message
{ {
public IntPtr HWnd; // Mouse indicator flags (found in winuser.h)
public int Msg; public const int MOUSE_MOVE_RELATIVE = 0;
public IntPtr WParam; public const int MOUSE_MOVE_ABSOLUTE = 1;
public IntPtr LParam; public const int MOUSE_VIRTUAL_DESKTOP = 0x02; // the coordinates are mapped to the virtual desktop
public IntPtr Result; public const int MOUSE_ATTRIBUTES_CHANGED = 0x04; // requery for mouse attributes
//public int Time; // Found in winuser.h
//public System.Drawing.Point p; public const int KEYBOARD_OVERRUN_MAKE_CODE = 0xFF;
//System.Drawing.
// WM_ACTIVATE state values (found in winuser.h)
public const int WA_INACTIVE = 0;
public const int WA_ACTIVE = 1;
public const int WA_CLICKACTIVE = 2;
// Window Messages (found in winuser.h)
public const int WM_NULL = 0x0000;
public const int WM_CREATE = 0x0001;
public const int WM_DESTROY = 0x0002;
public const int WM_MOVE = 0x0003;
public const int WM_SIZE = 0x0005;
public const int WM_ACTIVATE = 0x0006;
public const int WM_SETFOCUS = 0x0007;
public const int WM_KILLFOCUS = 0x0008;
public const int WM_ENABLE = 0x000A;
public const int WM_SETREDRAW = 0x000B;
public const int WM_SETTEXT = 0x000C;
public const int WM_GETTEXT = 0x000D;
public const int WM_GETTEXTLENGTH = 0x000E;
public const int WM_PAINT = 0x000F;
public const int WM_CLOSE = 0x0010;
// _WIN32_WCE
public const int WM_QUERYENDSESSION = 0x0011;
public const int WM_QUERYOPEN = 0x0013;
public const int WM_ENDSESSION = 0x0016;
public const int WM_QUIT = 0x0012;
public const int WM_ERASEBKGND = 0x0014;
public const int WM_SYSCOLORCHANGE = 0x0015;
public const int WM_SHOWWINDOW = 0x0018;
public const int WM_WININICHANGE = 0x001A;
// WINVER >= 0x400
public const int WM_SETTINGCHANGE = WM_WININICHANGE;
public const int WM_DEVMODECHANGE = 0x001B;
public const int WM_ACTIVATEAPP = 0x001C;
public const int WM_FONTCHANGE = 0x001D;
public const int WM_TIMECHANGE = 0x001E;
public const int WM_CANCELMODE = 0x001F;
public const int WM_SETCURSOR = 0x0020;
public const int WM_MOUSEACTIVATE = 0x0021;
public const int WM_CHILDACTIVATE = 0x0022;
public const int WM_QUEUESYNC = 0x0023;
public const int WM_GETMINMAXINFO = 0x0024;
public const int WM_WINDOWPOSCHANGING = 0x0046;
public const int WM_WINDOWPOSCHANGED = 0x0047;
// Keyboard events (found in winuser.h)
public const int WM_INPUT = 0x00FF; // Raw input. XP and higher only.
public const int WM_KEYDOWN = 0x0100;
public const int WM_KEYUP = 0x101;
public const int WM_SYSKEYDOWN = 0x0104;
public const int WM_SYSKEYUP = 0x0105;
public const int WM_COMMAND = 0x0111;
public const int WM_SYSCOMMAND = 0x0112;
public const int WM_ENTERIDLE = 0x121;
// Pixel types (found in wingdi.h)
public const byte PFD_TYPE_RGBA = 0;
public const byte PFD_TYPE_COLORINDEX = 1;
// Layer types (found in wingdi.h)
public const byte PFD_MAIN_PLANE = 0;
public const byte PFD_OVERLAY_PLANE = 1;
public const byte PFD_UNDERLAY_PLANE = unchecked((byte)-1);
// Device mode types (found in wingdi.h)
public const int DM_BITSPERPEL = 0x00040000;
public const int DM_PELSWIDTH = 0x00080000;
public const int DM_PELSHEIGHT = 0x00100000;
public const int DM_DISPLAYFLAGS = 0x00200000;
public const int DM_DISPLAYFREQUENCY = 0x00400000;
// ChangeDisplaySettings types (found in winuser.h)
public const int CDS_UPDATEREGISTRY = 0x00000001;
public const int CDS_TEST = 0x00000002;
public const int CDS_FULLSCREEN = 0x00000004;
// ChangeDisplaySettings results (found in winuser.h)
public const int DISP_CHANGE_SUCCESSFUL = 0;
public const int DISP_CHANGE_RESTART = 1;
public const int DISP_CHANGE_FAILED = -1;
// (found in winuser.h)
public const int ENUM_REGISTRY_SETTINGS = -2;
public const int ENUM_CURRENT_SETTINGS = -1;
} }
#endregion #endregion
#region --- Structures ---
#region CreateStruct #region CreateStruct
public struct CreateStruct public struct CreateStruct
@ -1307,9 +1172,6 @@ namespace OpenTK.Platform.Windows
#region PixelFormatDescriptor #region PixelFormatDescriptor
internal static short PixelFormatDescriptorSize;
internal static short PixelFormatDescriptorVersion;
/// <summary> /// <summary>
/// Describes a pixel format. It is used when interfacing with the WINAPI to create a new Context. /// Describes a pixel format. It is used when interfacing with the WINAPI to create a new Context.
/// Found in WinGDI.h /// Found in WinGDI.h
@ -1708,8 +1570,6 @@ namespace OpenTK.Platform.Windows
#region RawInputDevice #region RawInputDevice
public static readonly int RawInputDeviceSize;
/// <summary> /// <summary>
/// Defines information for the raw input devices. /// Defines information for the raw input devices.
/// </summary> /// </summary>
@ -1751,8 +1611,6 @@ namespace OpenTK.Platform.Windows
#region RawInputDeviceList #region RawInputDeviceList
public static readonly int RawInputDeviceListSize;
/// <summary> /// <summary>
/// Contains information about a raw input device. /// Contains information about a raw input device.
/// </summary> /// </summary>
@ -1778,8 +1636,6 @@ namespace OpenTK.Platform.Windows
#region RawInput #region RawInput
public static int RawInputSize;
/// <summary> /// <summary>
/// Contains the raw input from a device. /// Contains the raw input from a device.
/// </summary> /// </summary>
@ -1811,8 +1667,6 @@ namespace OpenTK.Platform.Windows
#region RawInputHeader #region RawInputHeader
public static readonly int RawInputHeaderSize;
/// <summary> /// <summary>
/// Contains the header information that is part of the raw input data. /// Contains the header information that is part of the raw input data.
/// </summary> /// </summary>
@ -1984,8 +1838,6 @@ namespace OpenTK.Platform.Windows
#region RawInputDeviceInfo #region RawInputDeviceInfo
public static readonly int RawInputDeviceInfoSize;
/// <summary> /// <summary>
/// Defines the raw input data coming from any device. /// Defines the raw input data coming from any device.
/// </summary> /// </summary>
@ -2192,6 +2044,92 @@ namespace OpenTK.Platform.Windows
#region --- Enums --- #region --- Enums ---
public enum WindowStyle : int
{
Overlapped = 0x00000000,
Popup = unchecked((int)0x80000000),
Child = 0x40000000,
Minimize = 0x20000000,
Visible = 0x10000000,
Disabled = 0x08000000,
ClipSiblings = 0x04000000,
ClipChildren = 0x02000000,
Maximize = 0x01000000,
Caption = 0x00C00000, // Border | DialogFrame
Border = 0x00800000,
DialogFrame = 0x00400000,
VScroll = 0x00200000,
HScreen = 0x00100000,
SystemMenu = 0x00080000,
ThickFrame = 0x00040000,
Group = 0x00020000,
TabStop = 0x00010000,
MinimizeBox = 0x00020000,
MaximizeBox = 0x00010000,
Tiled = Overlapped,
Iconic = Minimize,
SizeBox = ThickFrame,
TiledWindow = OverlappedWindow,
// Common window styles:
OverlappedWindow = Overlapped | Caption | SystemMenu | ThickFrame | MinimizeBox | MaximizeBox,
PopupWindow = Popup | Border | SystemMenu,
ChildWindow = Child
}
[Flags]
public enum ExtendedWindowStyle : int
{
DialogModalFrame = 0x00000001,
NoParentNotify = 0x00000004,
Topmost = 0x00000008,
AcceptFiles = 0x00000010,
Transparent = 0x00000020,
// #if(WINVER >= 0x0400)
MdiChild = 0x00000040,
ToolWindow = 0x00000080,
WindowEdge = 0x00000100,
ClientEdge = 0x00000200,
ContextHelp = 0x00000400,
// #endif
// #if(WINVER >= 0x0400)
Right = 0x00001000,
Left = 0x00000000,
RightToLeftReading = 0x00002000,
LeftToRightReading = 0x00000000,
LeftScrollbar = 0x00004000,
RightScrollbar = 0x00000000,
ControlParent = 0x00010000,
StaticEdge = 0x00020000,
ApplicationWindow = 0x00040000,
OverlappedWindow = WindowEdge | ClientEdge,
PaletteWindow = WindowEdge | ToolWindow | Topmost,
// #endif
// #if(_WIN32_WINNT >= 0x0500)
Layered = 0x00080000,
// #endif
// #if(WINVER >= 0x0500)
NoInheritLayout = 0x00100000, // Disable inheritence of mirroring by children
RightToLeftLayout = 0x00400000, // Right to left mirroring
// #endif /* WINVER >= 0x0500 */
// #if(_WIN32_WINNT >= 0x0501)
Composited = 0x02000000,
// #endif /* _WIN32_WINNT >= 0x0501 */
// #if(_WIN32_WINNT >= 0x0500)
NoActivate = 0x08000000
// #endif /* _WIN32_WINNT >= 0x0500 */
}
#region GetWindowLongOffsets enum #region GetWindowLongOffsets enum
public enum GetWindowLongOffsets : int public enum GetWindowLongOffsets : int
@ -2749,6 +2687,266 @@ namespace OpenTK.Platform.Windows
#endregion #endregion
#region WindowMessage
public enum WindowMessage
{
NULL = 0x0000,
CREATE = 0x0001,
DESTROY = 0x0002,
MOVE = 0x0003,
SIZE = 0x0005,
ACTIVATE = 0x0006,
SETFOCUS = 0x0007,
KILLFOCUS = 0x0008,
// public const uint SETVISIBLE = 0x0009;
ENABLE = 0x000A,
SETREDRAW = 0x000B,
SETTEXT = 0x000C,
GETTEXT = 0x000D,
GETTEXTLENGTH = 0x000E,
PAINT = 0x000F,
CLOSE = 0x0010,
QUERYENDSESSION = 0x0011,
QUIT = 0x0012,
QUERYOPEN = 0x0013,
ERASEBKGND = 0x0014,
SYSCOLORCHANGE = 0x0015,
ENDSESSION = 0x0016,
// public const uint SYSTEMERROR = 0x0017;
SHOWWINDOW = 0x0018,
CTLCOLOR = 0x0019,
WININICHANGE = 0x001A,
SETTINGCHANGE = 0x001A,
DEVMODECHANGE = 0x001B,
ACTIVATEAPP = 0x001C,
FONTCHANGE = 0x001D,
TIMECHANGE = 0x001E,
CANCELMODE = 0x001F,
SETCURSOR = 0x0020,
MOUSEACTIVATE = 0x0021,
CHILDACTIVATE = 0x0022,
QUEUESYNC = 0x0023,
GETMINMAXINFO = 0x0024,
PAINTICON = 0x0026,
ICONERASEBKGND = 0x0027,
NEXTDLGCTL = 0x0028,
// public const uint ALTTABACTIVE = 0x0029;
SPOOLERSTATUS = 0x002A,
DRAWITEM = 0x002B,
MEASUREITEM = 0x002C,
DELETEITEM = 0x002D,
VKEYTOITEM = 0x002E,
CHARTOITEM = 0x002F,
SETFONT = 0x0030,
GETFONT = 0x0031,
SETHOTKEY = 0x0032,
GETHOTKEY = 0x0033,
// public const uint FILESYSCHANGE = 0x0034;
// public const uint ISACTIVEICON = 0x0035;
// public const uint QUERYPARKICON = 0x0036;
QUERYDRAGICON = 0x0037,
COMPAREITEM = 0x0039,
// public const uint TESTING = 0x003a;
// public const uint OTHERWINDOWCREATED = 0x003c;
GETOBJECT = 0x003D,
// public const uint ACTIVATESHELLWINDOW = 0x003e;
COMPACTING = 0x0041,
COMMNOTIFY = 0x0044,
WINDOWPOSCHANGING = 0x0046,
WINDOWPOSCHANGED = 0x0047,
POWER = 0x0048,
COPYDATA = 0x004A,
CANCELJOURNAL = 0x004B,
NOTIFY = 0x004E,
INPUTLANGCHANGEREQUEST = 0x0050,
INPUTLANGCHANGE = 0x0051,
TCARD = 0x0052,
HELP = 0x0053,
USERCHANGED = 0x0054,
NOTIFYFORMAT = 0x0055,
CONTEXTMENU = 0x007B,
STYLECHANGING = 0x007C,
STYLECHANGED = 0x007D,
DISPLAYCHANGE = 0x007E,
GETICON = 0x007F,
// Non-Client messages
SETICON = 0x0080,
NCCREATE = 0x0081,
NCDESTROY = 0x0082,
NCCALCSIZE = 0x0083,
NCHITTEST = 0x0084,
NCPAINT = 0x0085,
NCACTIVATE = 0x0086,
GETDLGCODE = 0x0087,
SYNCPAINT = 0x0088,
// public const uint SYNCTASK = 0x0089;
NCMOUSEMOVE = 0x00A0,
NCLBUTTONDOWN = 0x00A1,
NCLBUTTONUP = 0x00A2,
NCLBUTTONDBLCLK = 0x00A3,
NCRBUTTONDOWN = 0x00A4,
NCRBUTTONUP = 0x00A5,
NCRBUTTONDBLCLK = 0x00A6,
NCMBUTTONDOWN = 0x00A7,
NCMBUTTONUP = 0x00A8,
NCMBUTTONDBLCLK = 0x00A9,
// public const uint NCXBUTTONDOWN = 0x00ab;
// public const uint NCXBUTTONUP = 0x00ac;
// public const uint NCXBUTTONDBLCLK = 0x00ad;
INPUT = 0x00FF,
KEYDOWN = 0x0100,
KEYFIRST = 0x0100,
KEYUP = 0x0101,
CHAR = 0x0102,
DEADCHAR = 0x0103,
SYSKEYDOWN = 0x0104,
SYSKEYUP = 0x0105,
SYSCHAR = 0x0106,
SYSDEADCHAR = 0x0107,
KEYLAST = 0x0108,
IME_STARTCOMPOSITION = 0x010D,
IME_ENDCOMPOSITION = 0x010E,
IME_COMPOSITION = 0x010F,
IME_KEYLAST = 0x010F,
INITDIALOG = 0x0110,
COMMAND = 0x0111,
SYSCOMMAND = 0x0112,
TIMER = 0x0113,
HSCROLL = 0x0114,
VSCROLL = 0x0115,
INITMENU = 0x0116,
INITMENUPOPUP = 0x0117,
// public const uint SYSTIMER = 0x0118;
MENUSELECT = 0x011F,
MENUCHAR = 0x0120,
ENTERIDLE = 0x0121,
MENURBUTTONUP = 0x0122,
MENUDRAG = 0x0123,
MENUGETOBJECT = 0x0124,
UNINITMENUPOPUP = 0x0125,
MENUCOMMAND = 0x0126,
CHANGEUISTATE = 0x0127,
UPDATEUISTATE = 0x0128,
QUERYUISTATE = 0x0129,
// public const uint LBTRACKPOINT = 0x0131;
CTLCOLORMSGBOX = 0x0132,
CTLCOLOREDIT = 0x0133,
CTLCOLORLISTBOX = 0x0134,
CTLCOLORBTN = 0x0135,
CTLCOLORDLG = 0x0136,
CTLCOLORSCROLLBAR = 0x0137,
CTLCOLORSTATIC = 0x0138,
MOUSEMOVE = 0x0200,
MOUSEFIRST = 0x0200,
LBUTTONDOWN = 0x0201,
LBUTTONUP = 0x0202,
LBUTTONDBLCLK = 0x0203,
RBUTTONDOWN = 0x0204,
RBUTTONUP = 0x0205,
RBUTTONDBLCLK = 0x0206,
MBUTTONDOWN = 0x0207,
MBUTTONUP = 0x0208,
MBUTTONDBLCLK = 0x0209,
MOUSEWHEEL = 0x020A,
MOUSELAST = 0x020D,
// public const uint XBUTTONDOWN = 0x020B;
// public const uint XBUTTONUP = 0x020C;
// public const uint XBUTTONDBLCLK = 0x020D;
PARENTNOTIFY = 0x0210,
ENTERMENULOOP = 0x0211,
EXITMENULOOP = 0x0212,
NEXTMENU = 0x0213,
SIZING = 0x0214,
CAPTURECHANGED = 0x0215,
MOVING = 0x0216,
// public const uint POWERBROADCAST = 0x0218;
DEVICECHANGE = 0x0219,
MDICREATE = 0x0220,
MDIDESTROY = 0x0221,
MDIACTIVATE = 0x0222,
MDIRESTORE = 0x0223,
MDINEXT = 0x0224,
MDIMAXIMIZE = 0x0225,
MDITILE = 0x0226,
MDICASCADE = 0x0227,
MDIICONARRANGE = 0x0228,
MDIGETACTIVE = 0x0229,
/* D&D messages */
// public const uint DROPOBJECT = 0x022A;
// public const uint QUERYDROPOBJECT = 0x022B;
// public const uint BEGINDRAG = 0x022C;
// public const uint DRAGLOOP = 0x022D;
// public const uint DRAGSELECT = 0x022E;
// public const uint DRAGMOVE = 0x022F;
MDISETMENU = 0x0230,
ENTERSIZEMOVE = 0x0231,
EXITSIZEMOVE = 0x0232,
DROPFILES = 0x0233,
MDIREFRESHMENU = 0x0234,
IME_SETCONTEXT = 0x0281,
IME_NOTIFY = 0x0282,
IME_CONTROL = 0x0283,
IME_COMPOSITIONFULL = 0x0284,
IME_SELECT = 0x0285,
IME_CHAR = 0x0286,
IME_REQUEST = 0x0288,
IME_KEYDOWN = 0x0290,
IME_KEYUP = 0x0291,
NCMOUSEHOVER = 0x02A0,
MOUSEHOVER = 0x02A1,
NCMOUSELEAVE = 0x02A2,
MOUSELEAVE = 0x02A3,
CUT = 0x0300,
COPY = 0x0301,
PASTE = 0x0302,
CLEAR = 0x0303,
UNDO = 0x0304,
RENDERFORMAT = 0x0305,
RENDERALLFORMATS = 0x0306,
DESTROYCLIPBOARD = 0x0307,
DRAWCLIPBOARD = 0x0308,
PAINTCLIPBOARD = 0x0309,
VSCROLLCLIPBOARD = 0x030A,
SIZECLIPBOARD = 0x030B,
ASKCBFORMATNAME = 0x030C,
CHANGECBCHAIN = 0x030D,
HSCROLLCLIPBOARD = 0x030E,
QUERYNEWPALETTE = 0x030F,
PALETTEISCHANGING = 0x0310,
PALETTECHANGED = 0x0311,
HOTKEY = 0x0312,
PRINT = 0x0317,
PRINTCLIENT = 0x0318,
HANDHELDFIRST = 0x0358,
HANDHELDLAST = 0x035F,
AFXFIRST = 0x0360,
AFXLAST = 0x037F,
PENWINFIRST = 0x0380,
PENWINLAST = 0x038F,
APP = 0x8000,
USER = 0x0400,
// Our "private" ones
MOUSE_ENTER = 0x0401,
ASYNC_MESSAGE = 0x0403,
REFLECT = USER + 0x1c00,
CLOSE_INTERNAL = USER + 0x1c01,
// NotifyIcon (Systray) Balloon messages
BALLOONSHOW = USER + 0x0002,
BALLOONHIDE = USER + 0x0003,
BALLOONTIMEOUT = USER + 0x0004,
BALLOONUSERCLICK = USER + 0x0005
}
#endregion
#endregion #endregion
#region --- Callbacks --- #region --- Callbacks ---
@ -2768,6 +2966,53 @@ namespace OpenTK.Platform.Windows
} }
} }
#endregion #region Message
[StructLayout(LayoutKind.Sequential), CLSCompliant(false)]
public struct MSG
{
public IntPtr HWnd;
public WindowMessage Message;
public IntPtr WParam;
public IntPtr LParam;
public uint Time;
public POINT Point;
public object RefObject;
public override string ToString()
{
return String.Format("msg=0x{0:x} ({1}) hwnd=0x{2:x} wparam=0x{3:x} lparam=0x{4:x} pt=0x{5:x}", (int)Message, Message.ToString(), HWnd.ToInt32(), WParam.ToInt32(), LParam.ToInt32(), Point);
} }
}
#endregion
#region Point
[StructLayout(LayoutKind.Sequential)]
public struct POINT
{
public int X;
public int Y;
public POINT(int x, int y)
{
this.X = x;
this.Y = y;
}
public System.Drawing.Point ToPoint()
{
return new System.Drawing.Point(X, Y);
}
public override string ToString()
{
return "Point {" + X.ToString() + ", " + Y.ToString() + ")";
}
}
#endregion
#endregion
} }

View file

@ -45,32 +45,32 @@ namespace OpenTK.Platform.Windows
[System.CLSCompliant(false)] [System.CLSCompliant(false)]
public static 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 public static
int ChoosePixelFormat(IntPtr hDc, API.PixelFormatDescriptor[] pPfd) int ChoosePixelFormat(IntPtr hDc, PixelFormatDescriptor[] pPfd)
{ {
unsafe 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; return retval;
} }
} }
} }
public static public static
int ChoosePixelFormat(IntPtr hDc, ref API.PixelFormatDescriptor pPfd) int ChoosePixelFormat(IntPtr hDc, ref PixelFormatDescriptor pPfd)
{ {
unsafe 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; return retval;
} }
} }
@ -78,44 +78,44 @@ namespace OpenTK.Platform.Windows
[System.CLSCompliant(false)] [System.CLSCompliant(false)]
public static 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)] [System.CLSCompliant(false)]
public static 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 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; return retval;
} }
} }
[System.CLSCompliant(false)] [System.CLSCompliant(false)]
public static public static
int DescribePixelFormat(IntPtr hdc, int ipfd, UInt32 cjpfd, API.PixelFormatDescriptor[] ppfd) int DescribePixelFormat(IntPtr hdc, int ipfd, UInt32 cjpfd, PixelFormatDescriptor[] ppfd)
{ {
unsafe 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; return retval;
} }
} }
} }
public static public static
int DescribePixelFormat(IntPtr hdc, int ipfd, Int32 cjpfd, API.PixelFormatDescriptor[] ppfd) int DescribePixelFormat(IntPtr hdc, int ipfd, Int32 cjpfd, PixelFormatDescriptor[] ppfd)
{ {
unsafe 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; return retval;
} }
} }
@ -123,26 +123,26 @@ namespace OpenTK.Platform.Windows
[System.CLSCompliant(false)] [System.CLSCompliant(false)]
public static 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 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; return retval;
} }
} }
} }
public static 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 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; return retval;
} }
} }
@ -174,32 +174,32 @@ namespace OpenTK.Platform.Windows
[System.CLSCompliant(false)] [System.CLSCompliant(false)]
public static 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 public static
Boolean SetPixelFormat(IntPtr hdc, int ipfd, API.PixelFormatDescriptor[] ppfd) Boolean SetPixelFormat(IntPtr hdc, int ipfd, PixelFormatDescriptor[] ppfd)
{ {
unsafe 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; return retval;
} }
} }
} }
public static public static
Boolean SetPixelFormat(IntPtr hdc, int ipfd, ref API.PixelFormatDescriptor ppfd) Boolean SetPixelFormat(IntPtr hdc, int ipfd, ref PixelFormatDescriptor ppfd)
{ {
unsafe 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; return retval;
} }
} }
@ -225,44 +225,44 @@ namespace OpenTK.Platform.Windows
[System.CLSCompliant(false)] [System.CLSCompliant(false)]
public static 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)] [System.CLSCompliant(false)]
public static 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 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; return retval;
} }
} }
[System.CLSCompliant(false)] [System.CLSCompliant(false)]
public static 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 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; return retval;
} }
} }
} }
public static 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 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; return retval;
} }
} }
@ -270,26 +270,26 @@ namespace OpenTK.Platform.Windows
[System.CLSCompliant(false)] [System.CLSCompliant(false)]
public static 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 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; return retval;
} }
} }
} }
public static 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 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; return retval;
} }
} }
@ -394,32 +394,32 @@ namespace OpenTK.Platform.Windows
[System.CLSCompliant(false)] [System.CLSCompliant(false)]
public static 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 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 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; return retval;
} }
} }
} }
public static 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 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; return retval;
} }
} }
@ -427,32 +427,32 @@ namespace OpenTK.Platform.Windows
[System.CLSCompliant(false)] [System.CLSCompliant(false)]
public static 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 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 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; return retval;
} }
} }
} }
public static 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 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; return retval;
} }
} }

View file

@ -27,10 +27,10 @@ namespace OpenTK.Platform.Windows
internal extern static Boolean CopyContext(IntPtr hglrcSrc, IntPtr hglrcDst, UInt32 mask); internal extern static Boolean CopyContext(IntPtr hglrcSrc, IntPtr hglrcDst, UInt32 mask);
[System.Security.SuppressUnmanagedCodeSecurity()] [System.Security.SuppressUnmanagedCodeSecurity()]
[System.Runtime.InteropServices.DllImport(Wgl.Library, EntryPoint = "wglChoosePixelFormat", ExactSpelling = true)] [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.Security.SuppressUnmanagedCodeSecurity()]
[System.Runtime.InteropServices.DllImport(Wgl.Library, EntryPoint = "wglDescribePixelFormat", ExactSpelling = true)] [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.Security.SuppressUnmanagedCodeSecurity()]
[System.Runtime.InteropServices.DllImport(Wgl.Library, EntryPoint = "wglGetCurrentDC", ExactSpelling = true)] [System.Runtime.InteropServices.DllImport(Wgl.Library, EntryPoint = "wglGetCurrentDC", ExactSpelling = true)]
internal extern static IntPtr GetCurrentDC(); internal extern static IntPtr GetCurrentDC();
@ -45,7 +45,7 @@ namespace OpenTK.Platform.Windows
internal extern static int GetPixelFormat(IntPtr hdc); internal extern static int GetPixelFormat(IntPtr hdc);
[System.Security.SuppressUnmanagedCodeSecurity()] [System.Security.SuppressUnmanagedCodeSecurity()]
[System.Runtime.InteropServices.DllImport(Wgl.Library, EntryPoint = "wglSetPixelFormat", ExactSpelling = true)] [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.Security.SuppressUnmanagedCodeSecurity()]
[System.Runtime.InteropServices.DllImport(Wgl.Library, EntryPoint = "wglSwapBuffers", ExactSpelling = true)] [System.Runtime.InteropServices.DllImport(Wgl.Library, EntryPoint = "wglSwapBuffers", ExactSpelling = true)]
internal extern static Boolean SwapBuffers(IntPtr hdc); internal extern static Boolean SwapBuffers(IntPtr hdc);
@ -57,7 +57,7 @@ namespace OpenTK.Platform.Windows
internal extern static IntPtr CreateLayerContext(IntPtr hDc, int level); internal extern static IntPtr CreateLayerContext(IntPtr hDc, int level);
[System.Security.SuppressUnmanagedCodeSecurity()] [System.Security.SuppressUnmanagedCodeSecurity()]
[System.Runtime.InteropServices.DllImport(Wgl.Library, EntryPoint = "wglDescribeLayerPlane", ExactSpelling = true)] [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.Security.SuppressUnmanagedCodeSecurity()]
[System.Runtime.InteropServices.DllImport(Wgl.Library, EntryPoint = "wglSetLayerPaletteEntries", ExactSpelling = true)] [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); 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); internal extern static Boolean UseFontBitmapsW(IntPtr hDC, Int32 first, Int32 count, Int32 listBase);
[System.Security.SuppressUnmanagedCodeSecurity()] [System.Security.SuppressUnmanagedCodeSecurity()]
[System.Runtime.InteropServices.DllImport(Wgl.Library, EntryPoint = "wglUseFontOutlinesA", CharSet = CharSet.Auto)] [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.Security.SuppressUnmanagedCodeSecurity()]
[System.Runtime.InteropServices.DllImport(Wgl.Library, EntryPoint = "wglUseFontOutlinesW", CharSet = CharSet.Auto)] [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 delegate Boolean CopyContext(IntPtr hglrcSrc, IntPtr hglrcDst, UInt32 mask);
internal static CopyContext wglCopyContext = null; internal static CopyContext wglCopyContext = null;
[System.Security.SuppressUnmanagedCodeSecurity()] [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; internal unsafe static ChoosePixelFormat wglChoosePixelFormat = null;
[System.Security.SuppressUnmanagedCodeSecurity()] [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; internal unsafe static DescribePixelFormat wglDescribePixelFormat = null;
[System.Security.SuppressUnmanagedCodeSecurity()] [System.Security.SuppressUnmanagedCodeSecurity()]
internal delegate IntPtr GetCurrentDC(); internal delegate IntPtr GetCurrentDC();
@ -46,7 +46,7 @@ namespace OpenTK.Platform.Windows
internal delegate int GetPixelFormat(IntPtr hdc); internal delegate int GetPixelFormat(IntPtr hdc);
internal static GetPixelFormat wglGetPixelFormat = null; internal static GetPixelFormat wglGetPixelFormat = null;
[System.Security.SuppressUnmanagedCodeSecurity()] [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; internal unsafe static SetPixelFormat wglSetPixelFormat = null;
[System.Security.SuppressUnmanagedCodeSecurity()] [System.Security.SuppressUnmanagedCodeSecurity()]
internal delegate Boolean SwapBuffers(IntPtr hdc); internal delegate Boolean SwapBuffers(IntPtr hdc);
@ -58,7 +58,7 @@ namespace OpenTK.Platform.Windows
internal delegate IntPtr CreateLayerContext(IntPtr hDc, int level); internal delegate IntPtr CreateLayerContext(IntPtr hDc, int level);
internal static CreateLayerContext wglCreateLayerContext = null; internal static CreateLayerContext wglCreateLayerContext = null;
[System.Security.SuppressUnmanagedCodeSecurity()] [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; internal unsafe static DescribeLayerPlane wglDescribeLayerPlane = null;
[System.Security.SuppressUnmanagedCodeSecurity()] [System.Security.SuppressUnmanagedCodeSecurity()]
internal unsafe delegate int SetLayerPaletteEntries(IntPtr hdc, int iLayerPlane, int iStart, int cEntries, Int32* pcr); 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 delegate Boolean UseFontBitmapsW(IntPtr hDC, Int32 first, Int32 count, Int32 listBase);
internal static UseFontBitmapsW wglUseFontBitmapsW = null; internal static UseFontBitmapsW wglUseFontBitmapsW = null;
[System.Security.SuppressUnmanagedCodeSecurity()] [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; internal unsafe static UseFontOutlinesA wglUseFontOutlinesA = null;
[System.Security.SuppressUnmanagedCodeSecurity()] [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; internal unsafe static UseFontOutlinesW wglUseFontOutlinesW = null;
[System.Security.SuppressUnmanagedCodeSecurity()] [System.Security.SuppressUnmanagedCodeSecurity()]
internal delegate IntPtr CreateBufferRegionARB(IntPtr hDC, int iLayerPlane, UInt32 uType); internal delegate IntPtr CreateBufferRegionARB(IntPtr hDC, int iLayerPlane, UInt32 uType);

View file

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

View file

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

View file

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

View file

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

View file

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