]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/uiaction.cpp
fixing osx_cocoa
[wxWidgets.git] / src / msw / uiaction.cpp
index d8f498cbd8165137c86dccea285d42e027d1ca59..e8c7d94df88ed826f1ed7cf098b671e54e330b84 100644 (file)
 #if wxUSE_UIACTIONSIMULATOR
 
 #include "wx/uiaction.h"
-#include "wx/window.h" //for wxCharCodeWXToMSW
 #include "wx/msw/wrapwin.h"
 
+#include "wx/msw/private/keyboard.h"
+
+#include "wx/math.h"
+
 namespace
 {
 
@@ -55,11 +58,13 @@ bool wxUIActionSimulator::MouseMove(long x, long y)
 {
     // Because MOUSEEVENTF_ABSOLUTE takes measurements scaled between 0 & 65535
     // we need to scale our input too
-    int displayx, displayy, scaledx, scaledy;
+    int displayx, displayy;
     wxDisplaySize(&displayx, &displayy);
-    scaledx = ((float)x / displayx) * 65535;
-    scaledy = ((float)y / displayy) * 65535;
+
+    int scaledx = wxRound(((float)x / displayx) * 65535);
+    int scaledy = wxRound(((float)y / displayy) * 65535);
     mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, scaledx, scaledy, 0, 0);
+
     return true;
 }
 
@@ -74,8 +79,16 @@ bool wxUIActionSimulator::MouseUp(int button)
 bool
 wxUIActionSimulator::DoKey(int keycode, int WXUNUSED(modifiers), bool isDown)
 {
-    DWORD vkkeycode = wxCharCodeWXToMSW(keycode);
-    keybd_event(vkkeycode, 0, isDown ? 0 : KEYEVENTF_KEYUP, 0);
+    bool isExtended;
+    DWORD vkkeycode = wxMSWKeyboard::WXToVK(keycode, &isExtended);
+
+    DWORD flags = 0;
+    if ( isExtended )
+        flags |= KEYEVENTF_EXTENDEDKEY;
+    if ( !isDown )
+        flags |= KEYEVENTF_KEYUP;
+
+    keybd_event(vkkeycode, 0, flags, 0);
 
     return true;
 }