objective-c - 使用 Retina 显示屏在 Mavericks 上实现 2 像素鼠标光标精度

标签 objective-c macos cocoa mouseevent retina-display

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

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

然后就是利用 [NSWindow mouseLocationOutsideOfEventStream];我可以确认,对于这次通话,我只能获得鼠标位置的非视网膜精度。 (然而 NSPoint 有 X 和 Y 的浮点值,所以我希望它至少能在像素之间返回 0.5)

我还尝试使用 NSTrackingArea 注册 mouseMoved:

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 像素精度移动鼠标光标,因为硬件以与分辨率无关的比例报告移动。否则,在具有相同鼠标或触摸板设置的视网膜和非视网膜显示器上,您的光标速度将不同。

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

关于objective-c - 使用 Retina 显示屏在 Mavericks 上实现 2 像素鼠标光标精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21852246/

相关文章:

swift - 有没有办法使用 NSSharingService 包含诸如 "BCC"和 "CC"之类的字段?

macos - NAudio 支持 Mac OSX

macos - 透明的NSTextView性能

c++ - Mac 独立 Xcode c++ 命令行项目

objective-c - 使用 MGTwitterEngine 在 iPhone 应用程序中关注 Twitter 帐户

ios - 等待 [SKAction playSoundFileNamed :waitForCompletion:]

iphone - 自定义 UITableViewCells 未在 UITableView 上重用

cocoa - NSManagedObjectContext 保存导致 NSTextField 失去焦点

java - 在 macOS Cocoa 应用程序中嵌入可执行 jar 文件

java - Objective-C NSError 和 Java 错误