On 20/03/2009, at 7:39 AM, John Reppy wrote:

I'm building a viewer for event logs that needs to support a wide range of scales (say from seconds/inch to nanoseconds/inch). I've got a custom subclass of NSView for displaying this information, which I want to embed in an NSScrollView. The problem that I'm faced with is that the floating-point coordinates used by Cocoa do not have enough precision at full magnification.

I'm guessing that the best solution is to subclass NSScrollView to track the visible rectangle's origin using doubles, but I'm not sure which NSScrollView methods I should be overriding. Also, do I need to override NSClipView too?
Any pointers or suggestions would be appreciated.


Double's are not going to help.

The drawing coordinates are floats. Even if you could persuade NSScrollView to position your view to double precision, it will get truncated to single precision for display. You'd have to rewrite all of Quartz at 64 bit precision to see any benefit.

However, all is not lost.

A float easily exceeds a 10^9 range, so you merely need to scale everything upwards. e.g. define 1nS to be, say, 10 points, then draw everything else on that basis. You can then scale the whole view to show the timeline scale you need. Scaling the view itself is trivial, see -scaleUnitSquareToSize:

-Graham


_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to