我正在使用应该能够处理视网膜图形的应用程序。我遇到的问题是,当屏幕处于视网膜模式时,鼠标指针似乎仍然处于低分辨率模式。如果我移动鼠标,每次移动都会跳两个像素,这使我无法将半个像素悬停在图像中。
我尝试了两种获取鼠标位置的方法。
然后就是利用[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个像素的准确度,它们都可以跳过两个像素步长来实现最小的鼠标移动。
关于如何从鼠标光标位置实现视网膜精度的任何想法?
答案 0 :(得分:1)
您无法在视网膜模式下以1像素精度移动鼠标光标,因为硬件会以与分辨率无关的比例报告移动。否则,在具有相同鼠标或触摸板设置的视网膜和非视网膜显示器上,光标速度将不同。
一种解决方案是隐藏系统光标并绘制自己的光标,以1像素精度移动它并放回系统光标。我相信系统工具ColorSync的颜色选择器就是这样制作的。