Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there any difference between a CGRect and an NSRect?

Tags:

Is there any difference between a CGRect and an NSRect? In particular, I'm wondering about the position of the origin. Are there any important differences I need to know about?

like image 564
nevan king Avatar asked Jan 27 '10 23:01

nevan king


2 Answers

They're the same. This link has more information. Copied here for quick reference:

CGRect is the CoreGraphics equivalent of NSRect.

They are deliberately made to have the same layout in memory. As such, it is allowed to convert an NSRect to a CGRect by doing this:

CGRect cgrect = *(CGRect *)&nsrect; 

CoreGraphics also provides a CGRectMake() function which works the same as NSMakeRect() (note the reversal of verb and object in the names) except it returns a CGRect.

like image 141
Carl Norum Avatar answered Dec 02 '22 17:12

Carl Norum


In particular, I'm wondering about the position of the origin.

That depends on where you got the rect and where you're using it. In general, Core Graphics and UIKit use flipped co-ordinates (origin upper-left, positive y going down), whereas AppKit uses unflipped co-ordinates (origin lower-left, positive y going up). But it is possible to flip or unflip co-ordinates from each API, and some classes, such as NSImage and NSView, make it very easy to do so.

like image 42
Peter Hosey Avatar answered Dec 02 '22 16:12

Peter Hosey