]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/uiaction.cpp
Disable wxUSE_ENH_METAFILE for wxGTK builds.
[wxWidgets.git] / src / msw / uiaction.cpp
index e8c7d94df88ed826f1ed7cf098b671e54e330b84..bc5bde1ad118437b883b4a098905e0578ab9c3d6 100644 (file)
 
 #if wxUSE_UIACTIONSIMULATOR
 
+#ifndef WX_PRECOMP
+    #include "wx/msw/private.h"             // For wxGetCursorPosMSW()
+#endif
+
 #include "wx/uiaction.h"
 #include "wx/msw/wrapwin.h"
 
@@ -49,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;
 }
@@ -61,8 +65,10 @@ bool wxUIActionSimulator::MouseMove(long x, long y)
     int displayx, displayy;
     wxDisplaySize(&displayx, &displayy);
 
-    int scaledx = wxRound(((float)x / displayx) * 65535);
-    int scaledy = wxRound(((float)y / displayy) * 65535);
+    // Casts are safe because x and y are supposed to be less than the display
+    // size, so there is no danger of overflow.
+    DWORD scaledx = static_cast<DWORD>(ceil(x * 65535.0 / (displayx-1)));
+    DWORD scaledy = static_cast<DWORD>(ceil(y * 65535.0 / (displayy-1)));
     mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, scaledx, scaledy, 0, 0);
 
     return true;
@@ -71,7 +77,7 @@ bool wxUIActionSimulator::MouseMove(long x, long y)
 bool wxUIActionSimulator::MouseUp(int button)
 {
     POINT p;
-    GetCursorPos(&p);
+    wxGetCursorPosMSW(&p);
     mouse_event(EventTypeForMouseButton(button, false), p.x, p.y, 0, 0);
     return true;
 }