将鼠标光标限制为直线

时间:2013-02-12 01:24:36

标签: cocoa events mouse

我想知道是否可以准确地将鼠标光标限制在一条线上。一般的想法是,我想创建一个标尺/法国曲线应用程序,我可以拖出一条线,使其像我想要的bezier点弯曲,然后按住一个热键限制我的鼠标,所以我可以画与wacom平板电脑在photoshop中类似的一行。

到目前为止我尝试的是以下内容。我现在正用对角线测试它。虽然它似乎正确地将我的鼠标限制在线上,但是当我在photoshop中绘制一条线时,看起来在将事件“捕捉”到我的对角线的事件之间会发送鼠标事件。例如,如果我将鼠标快速向上移动到右侧,鼠标将向上移动并向右移动一个事件循环,然后快速回到我的对角线。这显然不适用于绘画目的。是否有一些较低级别的鼠标接口,我可以利用它来拦截所有鼠标事件,并可能阻止它们被发送到其他应用程序之前被分派。

[NSEvent addGlobalMonitorForEventsMatchingMask:NSMouseMovedMask handler:^(NSEvent * mouseEvent) {
    [self mouseMoved:mouseEvent];
}];
[NSEvent addGlobalMonitorForEventsMatchingMask:NSLeftMouseDraggedMask handler:^(NSEvent * mouseEvent) {
    [self mouseMoved:mouseEvent];
}];


- (void)mouseMoved:(NSEvent *)evt {
    NSLog(@"Mouse moved: %@", NSStringFromPoint([evt locationInWindow]));

    NSPoint mousePos = [evt locationInWindow];

    CGSetLocalEventsSuppressionInterval(0.0f);
    CGWarpMouseCursorPosition(CGPointMake(mousePos.x, mousePos.x));
}

1 个答案:

答案 0 :(得分:0)

您正在寻找CGEventTap API