Browse Source

Merge branch 'master' of https://github.com/AvaloniaUI/Avalonia

Steven Kirk 9 years ago
parent
commit
7dbc27aff8
1 changed files with 19 additions and 12 deletions
  1. 19 12
      src/Windows/Avalonia.Win32/WindowImpl.cs

+ 19 - 12
src/Windows/Avalonia.Win32/WindowImpl.cs

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