- Удаленный курсор: следует за движениями удаленного пользователя.
- Локальный курсор: следует за физическими движениями мыши/трекпада локального пользователя.
Код: Выделить всё
void DualCursorMac::UpdateSystemCursorPosition(int x, int y) {
CGPoint point = CGPointMake(static_cast(x), static_cast(y));
// Warp the cursor to match remote coordinates
CGWarpMouseCursorPosition(point);
}
Код: Выделить всё
CGEventRef Mouse::MouseTapCallback(CGEventTapProxy proxy, CGEventType type, CGEventRef event, void *refcon) {
if (remoteControlMode) {
// We want to suppress system cursor movement but still read the delta
const int deltaX = static_cast(CGEventGetIntegerValueField(event, kCGMouseEventDeltaX));
const int deltaY = static_cast(CGEventGetIntegerValueField(event, kCGMouseEventDeltaY));
NSLog(@"MouseTapCallback: delta:(%d, %d)", deltaX, deltaY);
// Update local virtual cursor UI based on deltas...
return nullptr; // Consume the event
}
return event;
}
Когда CGWarpMouseCursorPosition часто вызывается для обновления системного курсора, это мешает значениям kCGMouseEventDeltaX/Y в Event Tap.
В частности, если локальный пользователь медленно перемещает трекпад (ожидается дельта 1 или 2), но «Деформация» происходит одновременно (например, переход курсора с (100, 100) на (300, 300)), значения deltaX и deltaY в обратном вызове внезапно достигают очень больших значений. Кажется, система вычисляет дельту на основе нового искривленного положения, а не чистого физического смещения трекпада.
Это заставляет локальный виртуальный курсор «прыгать» беспорядочно и делает невозможным отслеживание плавного локального движения во время удаленного управления.
Мой вопрос:
Есть ли способ получить «необработанное» или «чистое» физическое относительное движение (дельта) с трекпада/мыши, которая независима от абсолютного положения или деформации системного курсора?
Существуют ли альтернативные API (возможно, IOKit или другие поля CGEvent), которые позволили бы мне получать согласованные отклонения, даже если курсор деформируется программно?
Подробнее здесь: https://stackoverflow.com/questions/798 ... usecursorp
Мобильная версия