具有Retina显示功能的小牛2像素鼠标光标精度

时间:2014-02-18 11:23:50

标签: objective-c macos cocoa mouseevent retina-display

我正在使用应该能够处理视网膜图形的应用程序。我遇到的问题是,当屏幕处于视网膜模式时,鼠标指针似乎仍然处于低分辨率模式。如果我移动鼠标,每次移动都会跳两个像素,这使我无法将半个像素悬停在图像中。

我尝试了两种获取鼠标位置的方法。

然后就是利用[NSWindow mouseLocationOutsideOfEventStream];我可以确认,我只能在此次通话的鼠标位置获得非视网膜精度。 (但是NSPoint有X和Y的浮点值,所以我很乐意,如果它至少会在像素之间返回.5)

我还尝试使用NSTrackingArea:

对mouseMoved进行ro寄存器
NSTrackingArea *const trackingArea = [[NSTrackingArea alloc] initWithRect:NSZeroRect options:(NSTrackingMouseEnteredAndExited | NSTrackingMouseMoved | NSTrackingActiveAlways | NSTrackingInVisibleRect) owner:self userInfo:nil];
[self addTrackingArea:trackingArea];

-(void)mouseMoved:(NSEvent *)theEvent {}

这些似乎都没有给我1个像素的准确度,它们都可以跳过两个像素步长来实现最小的鼠标移动。

关于如何从鼠标光标位置实现视网膜精度的任何想法?

1 个答案:

答案 0 :(得分:1)

您无法在视网膜模式下以1像素精度移动鼠标光标,因为硬件会以与分辨率无关的比例报告移动。否则,在具有相同鼠标或触摸板设置的视网膜和非视网膜显示器上,光标速度将不同。

一种解决方案是隐藏系统光标并绘制自己的光标,以1像素精度移动它并放回系统光标。我相信系统工具ColorSync的颜色选择器就是这样制作的。