Я пытаюсь программно замедлить курсор мыши, умножая дельту мыши на число от 1 до 0 при каждом событии перемещения мыши. Это нормально работает для оси X, но позиция Y всегда перемещается обратно в центр экрана, это очень странно.
Я не могу понять, почему позиция Y курсора перемещается к центру экрана независимо от того, перемещаете ли вы мышь вверх или вниз ...
Я установил CGEventTap для событий перемещения мыши, и это код для обратного вызова:
CGEventRef
mouse_filter(CGEventTapProxy proxy, CGEventType type, CGEventRef event, float *speed_modifier) {
CGPoint point = CGEventGetLocation(event);
NSPoint old_point = [NSEvent mouseLocation];
CGPoint target;
int tX = point.x;
int tY = point.y;
float oX = old_point.x;
float oY = old_point.y;
float dX = tX-oX;
float dY = tY-oY;
dX*=0.1, dY*=0.1;
tX = round(oX + dX);
tY = round(oY + dY);
target = CGPointMake(tX, tY);
CGWarpMouseCursorPosition(target);
return false;
}
Может кто-нибудь помочь мне разобраться, как это сделать?
Я зарегистрировал некоторые значения во время работы приложения и обнаружил, что oY
не содержит ожидаемых значений ... кажется, что оно всегда близко к 430, обычно в паре пикселей от этого. tY
содержит, казалось бы, правильное целевое значение, поэтому вполне понятно, что oY
из одной итерации должен быть равен tY
из предыдущей (работает правильно для значений X), однако, oY
всегда близко к 430, даже когда мышь должна двигаться к верхней части экрана. Это заставляет меня думать, что dY
каким-то образом устанавливается значение, которое вернет oY
обратно к 430, но я не могу понять, как это происходит, так как dY
, похоже, также выводит правильное значение ...