[Win] Only set MouseCursor in client area
This is required according to the windows documentation.
This commit is contained in:
parent
9988a2ba9c
commit
9ee728d4fc
1 changed files with 15 additions and 8 deletions
|
@ -102,7 +102,7 @@ namespace OpenTK.Platform.Windows
|
||||||
KeyPressEventArgs key_press = new KeyPressEventArgs((char)0);
|
KeyPressEventArgs key_press = new KeyPressEventArgs((char)0);
|
||||||
|
|
||||||
MouseCursor cursor = MouseCursor.Default;
|
MouseCursor cursor = MouseCursor.Default;
|
||||||
IntPtr curson_handle = IntPtr.Zero;
|
IntPtr cursor_handle = Functions.LoadCursor(CursorName.Arrow);
|
||||||
int cursor_visible_count = 0;
|
int cursor_visible_count = 0;
|
||||||
|
|
||||||
static readonly object SyncRoot = new object();
|
static readonly object SyncRoot = new object();
|
||||||
|
@ -392,8 +392,14 @@ namespace OpenTK.Platform.Windows
|
||||||
{
|
{
|
||||||
if (cursor != MouseCursor.Default)
|
if (cursor != MouseCursor.Default)
|
||||||
{
|
{
|
||||||
Functions.SetCursor(curson_handle);
|
// Only set the mouse cursor inside the client rectangle
|
||||||
return new IntPtr(1);
|
// See MSDN "Setting the Cursor Image"
|
||||||
|
const int ht_client = 1;
|
||||||
|
if ((lParam.ToInt64() & 0xffff) == ht_client)
|
||||||
|
{
|
||||||
|
Functions.SetCursor(cursor_handle);
|
||||||
|
return new IntPtr(1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
@ -1208,7 +1214,8 @@ namespace OpenTK.Platform.Windows
|
||||||
|
|
||||||
if (value == MouseCursor.Default)
|
if (value == MouseCursor.Default)
|
||||||
{
|
{
|
||||||
oldCursor = Functions.SetCursor(Functions.LoadCursor(CursorName.Arrow));
|
cursor_handle = Functions.LoadCursor(CursorName.Arrow);
|
||||||
|
oldCursor = Functions.SetCursor(cursor_handle);
|
||||||
cursor = value;
|
cursor = value;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1245,7 +1252,7 @@ namespace OpenTK.Platform.Windows
|
||||||
// Currently using a custom cursor so destroy it
|
// Currently using a custom cursor so destroy it
|
||||||
// once replaced
|
// once replaced
|
||||||
cursor = value;
|
cursor = value;
|
||||||
curson_handle = icon;
|
cursor_handle = icon;
|
||||||
oldCursor = Functions.SetCursor(icon);
|
oldCursor = Functions.SetCursor(icon);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1639,10 +1646,10 @@ namespace OpenTK.Platform.Windows
|
||||||
{
|
{
|
||||||
if (calledManually)
|
if (calledManually)
|
||||||
{
|
{
|
||||||
if (Cursor != MouseCursor.Default && curson_handle != IntPtr.Zero)
|
if (Cursor != MouseCursor.Default && cursor_handle != IntPtr.Zero)
|
||||||
{
|
{
|
||||||
Functions.DestroyIcon(curson_handle);
|
Functions.DestroyIcon(cursor_handle);
|
||||||
curson_handle = IntPtr.Zero;
|
cursor_handle = IntPtr.Zero;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Safe to clean managed resources
|
// Safe to clean managed resources
|
||||||
|
|
Loading…
Reference in a new issue