What is the best way to store the current mouse position (system-wide) and then (later) put the mouse at that stored point?
[NSEvent mouseLocation]
gets me the position, and I can move the mouse with a CGEventMouseMoved
, but they each use a different co-ordinates system (I believe y=0 is the top for NSEvent and the bottom for a CGEvent).
I'm worried about the robustness of capturing the screen height and using it to convert between the two - or is this the best approach?
Yes, using the main screen's height is the standard way of flipping screen coordinates.
You could use a CGEventTap to get the mouse events instead of NSEvent. Then you have your choice of flipped or unflipped at the time the event arrives.
You have that the wrong way around. Quartz uses flipped, which is y=0=top. AppKit uses unflipped, which is y=0=bottom. (Edit: For events, that is. Quartz 2D, the drawing API, uses unflipped coordinates, the same as AppKit does.)