]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/uiaction.cpp
Make sure wchar_t CRT functions work on OS X.
[wxWidgets.git] / src / msw / uiaction.cpp
index ee59fd0603174501a5f6f440f2716a93c27d7bc2..5aff359052527b1f53867bc8eec7a167997de887 100644 (file)
 
 #if wxUSE_UIACTIONSIMULATOR
 
+#ifndef WX_PRECOMP
+    #include "wx/msw/private.h"             // For wxGetCursorPosMSW()
+#endif
+
 #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
 {
 
@@ -46,7 +53,7 @@ DWORD EventTypeForMouseButton(int button, bool isDown)
 bool wxUIActionSimulator::MouseDown(int button)
 {
     POINT p;
-    GetCursorPos(&p);
+    wxGetCursorPosMSW(&p);
     mouse_event(EventTypeForMouseButton(button, true), p.x, p.y, 0, 0);
     return true;
 }
@@ -55,18 +62,20 @@ 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 = ceil((float)x * 65535.0 / (displayx-1));
+    int scaledy = ceil((float)y * 65535.0 / (displayy-1));
     mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, scaledx, scaledy, 0, 0);
+
     return true;
 }
 
 bool wxUIActionSimulator::MouseUp(int button)
 {
     POINT p;
-    GetCursorPos(&p);
+    wxGetCursorPosMSW(&p);
     mouse_event(EventTypeForMouseButton(button, false), p.x, p.y, 0, 0);
     return true;
 }
@@ -75,7 +84,7 @@ bool
 wxUIActionSimulator::DoKey(int keycode, int WXUNUSED(modifiers), bool isDown)
 {
     bool isExtended;
-    DWORD vkkeycode = wxCharCodeWXToMSW(keycode, &isExtended);
+    DWORD vkkeycode = wxMSWKeyboard::WXToVK(keycode, &isExtended);
 
     DWORD flags = 0;
     if ( isExtended )