Browse Source

Merge pull request #653 from donandren/issues/weirdon64bit

fixed some weird issues with 64 bit application
pull/650/merge
Steven Kirk 10 years ago
committed by GitHub
parent
commit
d078a4dc05
  1. 31
      src/Windows/Avalonia.Win32/WindowImpl.cs

31
src/Windows/Avalonia.Win32/WindowImpl.cs

@ -376,7 +376,7 @@ namespace Avalonia.Win32
switch ((UnmanagedMethods.WindowsMessage)msg) switch ((UnmanagedMethods.WindowsMessage)msg)
{ {
case UnmanagedMethods.WindowsMessage.WM_ACTIVATE: case UnmanagedMethods.WindowsMessage.WM_ACTIVATE:
var wa = (UnmanagedMethods.WindowActivate)((int)wParam & 0xffff); var wa = (UnmanagedMethods.WindowActivate)(ToInt32(wParam) & 0xffff);
switch (wa) switch (wa)
{ {
@ -404,7 +404,7 @@ namespace Avalonia.Win32
return IntPtr.Zero; return IntPtr.Zero;
case UnmanagedMethods.WindowsMessage.WM_DPICHANGED: case UnmanagedMethods.WindowsMessage.WM_DPICHANGED:
var dpi = (int)wParam & 0xffff; var dpi = ToInt32(wParam) & 0xffff;
var newDisplayRect = (UnmanagedMethods.RECT)Marshal.PtrToStructure(lParam, typeof(UnmanagedMethods.RECT)); var newDisplayRect = (UnmanagedMethods.RECT)Marshal.PtrToStructure(lParam, typeof(UnmanagedMethods.RECT));
Position = new Point(newDisplayRect.left, newDisplayRect.top); Position = new Point(newDisplayRect.left, newDisplayRect.top);
_scaling = dpi / 96.0; _scaling = dpi / 96.0;
@ -417,7 +417,7 @@ namespace Avalonia.Win32
WindowsKeyboardDevice.Instance, WindowsKeyboardDevice.Instance,
timestamp, timestamp,
RawKeyEventType.KeyDown, RawKeyEventType.KeyDown,
KeyInterop.KeyFromVirtualKey((int)wParam), WindowsKeyboardDevice.Instance.Modifiers); KeyInterop.KeyFromVirtualKey(ToInt32(wParam)), WindowsKeyboardDevice.Instance.Modifiers);
break; break;
case UnmanagedMethods.WindowsMessage.WM_KEYUP: case UnmanagedMethods.WindowsMessage.WM_KEYUP:
@ -426,14 +426,14 @@ namespace Avalonia.Win32
WindowsKeyboardDevice.Instance, WindowsKeyboardDevice.Instance,
timestamp, timestamp,
RawKeyEventType.KeyUp, RawKeyEventType.KeyUp,
KeyInterop.KeyFromVirtualKey((int)wParam), WindowsKeyboardDevice.Instance.Modifiers); KeyInterop.KeyFromVirtualKey(ToInt32(wParam)), WindowsKeyboardDevice.Instance.Modifiers);
break; break;
case UnmanagedMethods.WindowsMessage.WM_CHAR: case UnmanagedMethods.WindowsMessage.WM_CHAR:
// Ignore control chars // Ignore control chars
if (wParam.ToInt32() >= 32) if (ToInt32(wParam) >= 32)
{ {
e = new RawTextInputEventArgs(WindowsKeyboardDevice.Instance, timestamp, e = new RawTextInputEventArgs(WindowsKeyboardDevice.Instance, timestamp,
new string((char)wParam.ToInt32(), 1)); new string((char)ToInt32(wParam), 1));
} }
break; break;
@ -497,7 +497,7 @@ namespace Avalonia.Win32
timestamp, timestamp,
_owner, _owner,
ScreenToClient(DipFromLParam(lParam)), ScreenToClient(DipFromLParam(lParam)),
new Vector(0, ((long)wParam >> 16) / wheelDelta), GetMouseModifiers(wParam)); new Vector(0, (ToInt32(wParam) >> 16) / wheelDelta), GetMouseModifiers(wParam));
break; break;
case UnmanagedMethods.WindowsMessage.WM_MOUSEHWHEEL: case UnmanagedMethods.WindowsMessage.WM_MOUSEHWHEEL:
@ -506,7 +506,7 @@ namespace Avalonia.Win32
timestamp, timestamp,
_owner, _owner,
ScreenToClient(DipFromLParam(lParam)), ScreenToClient(DipFromLParam(lParam)),
new Vector(-((long)wParam >> 16) / wheelDelta,0), GetMouseModifiers(wParam)); new Vector(-(ToInt32(wParam) >> 16) / wheelDelta,0), GetMouseModifiers(wParam));
break; break;
case UnmanagedMethods.WindowsMessage.WM_MOUSELEAVE: case UnmanagedMethods.WindowsMessage.WM_MOUSELEAVE:
@ -556,7 +556,7 @@ namespace Avalonia.Win32
(wParam == (IntPtr)UnmanagedMethods.SizeCommand.Restored || (wParam == (IntPtr)UnmanagedMethods.SizeCommand.Restored ||
wParam == (IntPtr)UnmanagedMethods.SizeCommand.Maximized)) wParam == (IntPtr)UnmanagedMethods.SizeCommand.Maximized))
{ {
var clientSize = new Size((int)lParam & 0xffff, (int)lParam >> 16); var clientSize = new Size(ToInt32(lParam) & 0xffff, ToInt32(lParam) >> 16);
Resized(clientSize / Scaling); Resized(clientSize / Scaling);
} }
@ -578,7 +578,7 @@ namespace Avalonia.Win32
static InputModifiers GetMouseModifiers(IntPtr wParam) static InputModifiers GetMouseModifiers(IntPtr wParam)
{ {
var keys = (UnmanagedMethods.ModifierKeys)wParam.ToInt64(); var keys = (UnmanagedMethods.ModifierKeys)ToInt32(wParam);
var modifiers = WindowsKeyboardDevice.Instance.Modifiers; var modifiers = WindowsKeyboardDevice.Instance.Modifiers;
if (keys.HasFlag(UnmanagedMethods.ModifierKeys.MK_LBUTTON)) if (keys.HasFlag(UnmanagedMethods.ModifierKeys.MK_LBUTTON))
modifiers |= InputModifiers.LeftMouseButton; modifiers |= InputModifiers.LeftMouseButton;
@ -644,12 +644,12 @@ namespace Avalonia.Win32
private Point DipFromLParam(IntPtr lParam) private Point DipFromLParam(IntPtr lParam)
{ {
return new Point((short)((int)lParam & 0xffff), (short)((int)lParam >> 16)) / Scaling; return new Point((short)(ToInt32(lParam) & 0xffff), (short)(ToInt32(lParam) >> 16)) / Scaling;
} }
private Point PointFromLParam(IntPtr lParam) private Point PointFromLParam(IntPtr lParam)
{ {
return new Point((short)((int)lParam & 0xffff), (short)((int)lParam >> 16)); return new Point((short)(ToInt32(lParam) & 0xffff), (short)(ToInt32(lParam) >> 16));
} }
private Point ScreenToClient(Point point) private Point ScreenToClient(Point point)
@ -688,5 +688,12 @@ namespace Avalonia.Win32
UnmanagedMethods.PostMessage(_hwnd, (int)UnmanagedMethods.WindowsMessage.WM_SETICON, UnmanagedMethods.PostMessage(_hwnd, (int)UnmanagedMethods.WindowsMessage.WM_SETICON,
new IntPtr((int)UnmanagedMethods.Icons.ICON_BIG), nativeIcon.GetHicon()); new IntPtr((int)UnmanagedMethods.Icons.ICON_BIG), nativeIcon.GetHicon());
} }
private static int ToInt32(IntPtr ptr)
{
if (IntPtr.Size == 4) return ptr.ToInt32();
return (int)(ptr.ToInt64() & 0xffffffff);
}
} }
} }

Loading…
Cancel
Save