-
Notifications
You must be signed in to change notification settings - Fork 651
/
NSGeometry.h
261 lines (199 loc) · 7.16 KB
/
NSGeometry.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
/* NSGeometry.h
Copyright (c) 1994-2012, Apple Inc. All rights reserved.
*/
#import <AvailabilityMacros.h>
#import <Foundation/NSValue.h>
#import <Foundation/NSCoder.h>
#if (TARGET_OS_EMBEDDED || TARGET_OS_IPHONE)
#import <CoreGraphics/CGBase.h>
#import <CoreGraphics/CGGeometry.h>
#elif TARGET_OS_WIN32
#import <CGCompat.h>
#elif TARGET_OS_MAC
#import <ApplicationServices/../Frameworks/CoreGraphics.framework/Headers/CGBase.h>
#import <ApplicationServices/../Frameworks/CoreGraphics.framework/Headers/CGGeometry.h>
#endif
#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef CGPoint NSPoint;
typedef NSPoint *NSPointPointer;
typedef NSPoint *NSPointArray;
typedef CGSize NSSize;
typedef NSSize *NSSizePointer;
typedef NSSize *NSSizeArray;
typedef CGRect NSRect;
typedef NSRect *NSRectPointer;
typedef NSRect *NSRectArray;
#define NSMinXEdge CGRectMinXEdge
#define NSMinYEdge CGRectMinYEdge
#define NSMaxXEdge CGRectMaxXEdge
#define NSMaxYEdge CGRectMaxYEdge
typedef NSUInteger NSRectEdge;
#define NSGEOMETRY_TYPES_SAME_AS_CGGEOMETRY_TYPES 1
#else
typedef struct _NSPoint {
CGFloat x;
CGFloat y;
} NSPoint;
typedef NSPoint *NSPointPointer;
typedef NSPoint *NSPointArray;
typedef struct _NSSize {
CGFloat width; /* should never be negative */
CGFloat height; /* should never be negative */
} NSSize;
typedef NSSize *NSSizePointer;
typedef NSSize *NSSizeArray;
typedef struct _NSRect {
NSPoint origin;
NSSize size;
} NSRect;
typedef NSRect *NSRectPointer;
typedef NSRect *NSRectArray;
typedef enum {
NSMinXEdge = 0,
NSMinYEdge = 1,
NSMaxXEdge = 2,
NSMaxYEdge = 3
} NSRectEdge;
#endif
typedef NS_OPTIONS(unsigned long long, NSAlignmentOptions) {
NSAlignMinXInward = 1ULL << 0,
NSAlignMinYInward = 1ULL << 1,
NSAlignMaxXInward = 1ULL << 2,
NSAlignMaxYInward = 1ULL << 3,
NSAlignWidthInward = 1ULL << 4,
NSAlignHeightInward = 1ULL << 5,
NSAlignMinXOutward = 1ULL << 8,
NSAlignMinYOutward = 1ULL << 9,
NSAlignMaxXOutward = 1ULL << 10,
NSAlignMaxYOutward = 1ULL << 11,
NSAlignWidthOutward = 1ULL << 12,
NSAlignHeightOutward = 1ULL << 13,
NSAlignMinXNearest = 1ULL << 16,
NSAlignMinYNearest = 1ULL << 17,
NSAlignMaxXNearest = 1ULL << 18,
NSAlignMaxYNearest = 1ULL << 19,
NSAlignWidthNearest = 1ULL << 20,
NSAlignHeightNearest = 1ULL << 21,
NSAlignRectFlipped = 1ULL << 63, // pass this if the rect is in a flipped coordinate system. This allows 0.5 to be treated in a visually consistent way.
// convenience combinations
NSAlignAllEdgesInward = NSAlignMinXInward|NSAlignMaxXInward|NSAlignMinYInward|NSAlignMaxYInward,
NSAlignAllEdgesOutward = NSAlignMinXOutward|NSAlignMaxXOutward|NSAlignMinYOutward|NSAlignMaxYOutward,
NSAlignAllEdgesNearest = NSAlignMinXNearest|NSAlignMaxXNearest|NSAlignMinYNearest|NSAlignMaxYNearest,
};
@class NSString;
FOUNDATION_EXPORT const NSPoint NSZeroPoint;
FOUNDATION_EXPORT const NSSize NSZeroSize;
FOUNDATION_EXPORT const NSRect NSZeroRect;
NS_INLINE NSPoint NSMakePoint(CGFloat x, CGFloat y) {
NSPoint p;
p.x = x;
p.y = y;
return p;
}
NS_INLINE NSSize NSMakeSize(CGFloat w, CGFloat h) {
NSSize s;
s.width = w;
s.height = h;
return s;
}
NS_INLINE NSRect NSMakeRect(CGFloat x, CGFloat y, CGFloat w, CGFloat h) {
NSRect r;
r.origin.x = x;
r.origin.y = y;
r.size.width = w;
r.size.height = h;
return r;
}
NS_INLINE CGFloat NSMaxX(NSRect aRect) {
return (aRect.origin.x + aRect.size.width);
}
NS_INLINE CGFloat NSMaxY(NSRect aRect) {
return (aRect.origin.y + aRect.size.height);
}
NS_INLINE CGFloat NSMidX(NSRect aRect) {
return (aRect.origin.x + aRect.size.width * (CGFloat)0.5);
}
NS_INLINE CGFloat NSMidY(NSRect aRect) {
return (aRect.origin.y + aRect.size.height * (CGFloat)0.5);
}
NS_INLINE CGFloat NSMinX(NSRect aRect) {
return (aRect.origin.x);
}
NS_INLINE CGFloat NSMinY(NSRect aRect) {
return (aRect.origin.y);
}
NS_INLINE CGFloat NSWidth(NSRect aRect) {
return (aRect.size.width);
}
NS_INLINE CGFloat NSHeight(NSRect aRect) {
return (aRect.size.height);
}
NS_INLINE NSRect NSRectFromCGRect(CGRect cgrect) {
union _ {NSRect ns; CGRect cg;};
return ((union _ *)&cgrect)->ns;
}
NS_INLINE CGRect NSRectToCGRect(NSRect nsrect) {
union _ {NSRect ns; CGRect cg;};
return ((union _ *)&nsrect)->cg;
}
NS_INLINE NSPoint NSPointFromCGPoint(CGPoint cgpoint) {
union _ {NSPoint ns; CGPoint cg;};
return ((union _ *)&cgpoint)->ns;
}
NS_INLINE CGPoint NSPointToCGPoint(NSPoint nspoint) {
union _ {NSPoint ns; CGPoint cg;};
return ((union _ *)&nspoint)->cg;
}
NS_INLINE NSSize NSSizeFromCGSize(CGSize cgsize) {
union _ {NSSize ns; CGSize cg;};
return ((union _ *)&cgsize)->ns;
}
NS_INLINE CGSize NSSizeToCGSize(NSSize nssize) {
union _ {NSSize ns; CGSize cg;};
return ((union _ *)&nssize)->cg;
}
FOUNDATION_EXPORT BOOL NSEqualPoints(NSPoint aPoint, NSPoint bPoint);
FOUNDATION_EXPORT BOOL NSEqualSizes(NSSize aSize, NSSize bSize);
FOUNDATION_EXPORT BOOL NSEqualRects(NSRect aRect, NSRect bRect);
FOUNDATION_EXPORT BOOL NSIsEmptyRect(NSRect aRect);
FOUNDATION_EXPORT NSRect NSInsetRect(NSRect aRect, CGFloat dX, CGFloat dY);
FOUNDATION_EXPORT NSRect NSIntegralRect(NSRect aRect);
FOUNDATION_EXPORT NSRect NSIntegralRectWithOptions(NSRect aRect, NSAlignmentOptions opts) NS_AVAILABLE(10_7, 5_0);
FOUNDATION_EXPORT NSRect NSUnionRect(NSRect aRect, NSRect bRect);
FOUNDATION_EXPORT NSRect NSIntersectionRect(NSRect aRect, NSRect bRect);
FOUNDATION_EXPORT NSRect NSOffsetRect(NSRect aRect, CGFloat dX, CGFloat dY);
FOUNDATION_EXPORT void NSDivideRect(NSRect inRect, NSRect *slice, NSRect *rem, CGFloat amount, NSRectEdge edge);
FOUNDATION_EXPORT BOOL NSPointInRect(NSPoint aPoint, NSRect aRect);
FOUNDATION_EXPORT BOOL NSMouseInRect(NSPoint aPoint, NSRect aRect, BOOL flipped);
FOUNDATION_EXPORT BOOL NSContainsRect(NSRect aRect, NSRect bRect);
FOUNDATION_EXPORT BOOL NSIntersectsRect(NSRect aRect, NSRect bRect);
FOUNDATION_EXPORT NSString *NSStringFromPoint(NSPoint aPoint);
FOUNDATION_EXPORT NSString *NSStringFromSize(NSSize aSize);
FOUNDATION_EXPORT NSString *NSStringFromRect(NSRect aRect);
FOUNDATION_EXPORT NSPoint NSPointFromString(NSString *aString);
FOUNDATION_EXPORT NSSize NSSizeFromString(NSString *aString);
FOUNDATION_EXPORT NSRect NSRectFromString(NSString *aString);
@interface NSValue (NSValueGeometryExtensions)
+ (NSValue *)valueWithPoint:(NSPoint)point;
+ (NSValue *)valueWithSize:(NSSize)size;
+ (NSValue *)valueWithRect:(NSRect)rect;
- (NSPoint)pointValue;
- (NSSize)sizeValue;
- (NSRect)rectValue;
@end
@interface NSCoder (NSGeometryCoding)
- (void)encodePoint:(NSPoint)point;
- (NSPoint)decodePoint;
- (void)encodeSize:(NSSize)size;
- (NSSize)decodeSize;
- (void)encodeRect:(NSRect)rect;
- (NSRect)decodeRect;
@end
@interface NSCoder (NSGeometryKeyedCoding)
- (void)encodePoint:(NSPoint)point forKey:(NSString *)key;
- (void)encodeSize:(NSSize)size forKey:(NSString *)key;
- (void)encodeRect:(NSRect)rect forKey:(NSString *)key;
- (NSPoint)decodePointForKey:(NSString *)key;
- (NSSize)decodeSizeForKey:(NSString *)key;
- (NSRect)decodeRectForKey:(NSString *)key;
@end