#if wxUSE_UIACTIONSIMULATOR
+#ifndef WX_PRECOMP
+ #include "wx/msw/private.h" // For wxGetCursorPosMSW()
+#endif
+
#include "wx/uiaction.h"
#include "wx/msw/wrapwin.h"
#include "wx/msw/private/keyboard.h"
+#include "wx/math.h"
+
namespace
{
bool wxUIActionSimulator::MouseDown(int button)
{
POINT p;
- GetCursorPos(&p);
+ wxGetCursorPosMSW(&p);
mouse_event(EventTypeForMouseButton(button, true), p.x, p.y, 0, 0);
return true;
}
{
// 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;
}