nevan king
nevan king

Reputation: 113757

Is there any difference between a CGRect and an NSRect?

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?

Upvotes: 25

Views: 7640

Answers (2)

Carl Norum
Carl Norum

Reputation: 224972

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.

Upvotes: 21

Peter Hosey
Peter Hosey

Reputation: 96333

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.

Upvotes: 4

Related Questions