/* Points. */
struct CGPoint {
CGFloat x;
CGFloat y;
};
typedef struct CGPoint CGPoint;
/* Sizes. */
struct CGSize {
CGFloat width;
CGFloat height;
};
typedef struct CGSize CGSize;
/* Rectangles. */
struct CGRect {
CGPoint origin;
CGSize size;
};
typedef struct CGRect CGRect;
/* Rectangle edges. */
enum CGRectEdge {
CGRectMinXEdge, CGRectMinYEdge, CGRectMaxXEdge, CGRectMaxYEdge
};
typedef enum CGRectEdge CGRectEdge;
/* The "zero" point -- equivalent to CGPointMake(0, 0). */
CG_EXTERN const CGPoint CGPointZero
CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
/* The "zero" size -- equivalent to CGSizeMake(0, 0). */
CG_EXTERN const CGSize CGSizeZero
CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
/* The "zero" rectangle -- equivalent to CGRectMake(0, 0, 0, 0). */
CG_EXTERN const CGRect CGRectZero
CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
/* The "empty" rect. This is the rectangle returned when, for example, we
intersect two disjoint rectangles. Note that the null rect is not the
same as the zero rect. */
CG_EXTERN const CGRect CGRectNull
CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
/* The infinite rectangle. */
CG_EXTERN const CGRect CGRectInfinite
CG_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_2_0);
/* Make a point from `(x, y)'. */
CG_INLINE CGPoint CGPointMake(CGFloat x, CGFloat y);
/* Make a size from `(width, height)'. */
CG_INLINE CGSize CGSizeMake(CGFloat width, CGFloat height);
/* Make a rect from `(x, y; width, height)'. */
CG_INLINE CGRect CGRectMake(CGFloat x, CGFloat y, CGFloat width,
CGFloat height);
/* Return the leftmost x-value of `rect'. */
CG_EXTERN CGFloat CGRectGetMinX(CGRect rect)
CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
/* Return the midpoint x-value of `rect'. */
CG_EXTERN CGFloat CGRectGetMidX(CGRect rect)
CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
/* Return the rightmost x-value of `rect'. */
CG_EXTERN CGFloat CGRectGetMaxX(CGRect rect)
CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
/* Return the bottommost y-value of `rect'. */
CG_EXTERN CGFloat CGRectGetMinY(CGRect rect)
CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
/* Return the midpoint y-value of `rect'. */
CG_EXTERN CGFloat CGRectGetMidY(CGRect rect)
CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
/* Return the topmost y-value of `rect'. */
CG_EXTERN CGFloat CGRectGetMaxY(CGRect rect)
CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
/* Return the width of `rect'. */
CG_EXTERN CGFloat CGRectGetWidth(CGRect rect)
CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
/* Return the height of `rect'. */
CG_EXTERN CGFloat CGRectGetHeight(CGRect rect)
CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
/* Return true if `point1' and `point2' are the same, false otherwise. */
CG_EXTERN bool CGPointEqualToPoint(CGPoint point1, CGPoint point2)
CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
/* Return true if `size1' and `size2' are the same, false otherwise. */
CG_EXTERN bool CGSizeEqualToSize(CGSize size1, CGSize size2)
CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
/* Return true if `rect1' and `rect2' are the same, false otherwise. */
CG_EXTERN bool CGRectEqualToRect(CGRect rect1, CGRect rect2)
CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
/* Standardize `rect' -- i.e., convert it to an equivalent rect which has
positive width and height. */
CG_EXTERN CGRect CGRectStandardize(CGRect rect)
CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
/* Return true if `rect' is empty (that is, if it has zero width or height),
false otherwise. A null rect is defined to be empty. */
CG_EXTERN bool CGRectIsEmpty(CGRect rect)
CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
/* Return true if `rect' is the null rectangle, false otherwise. */
CG_EXTERN bool CGRectIsNull(CGRect rect)
CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
/* Return true if `rect' is the infinite rectangle, false otherwise. */
CG_EXTERN bool CGRectIsInfinite(CGRect rect)
CG_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_2_0);
/* Inset `rect' by `(dx, dy)' -- i.e., offset its origin by `(dx, dy)', and
decrease its size by `(2*dx, 2*dy)'. */
CG_EXTERN CGRect CGRectInset(CGRect rect, CGFloat dx, CGFloat dy)
CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
/* Expand `rect' to the smallest rect containing it with integral origin and
size. */
CG_EXTERN CGRect CGRectIntegral(CGRect rect)
CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
/* Return the union of `r1' and `r2'. */
CG_EXTERN CGRect CGRectUnion(CGRect r1, CGRect r2)
CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
/* Return the intersection of `r1' and `r2'. This may return a null rect. */
CG_EXTERN CGRect CGRectIntersection(CGRect r1, CGRect r2)
CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
/* Offset `rect' by `(dx, dy)'. */
CG_EXTERN CGRect CGRectOffset(CGRect rect, CGFloat dx, CGFloat dy)
CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
/* Make two new rectangles, `slice' and `remainder', by dividing `rect' with
a line that's parallel to one of its sides, specified by `edge' -- either
`CGRectMinXEdge', `CGRectMinYEdge', `CGRectMaxXEdge', or
`CGRectMaxYEdge'. The size of `slice' is determined by `amount', which
measures the distance from the specified edge. */
CG_EXTERN void CGRectDivide(CGRect rect, CGRect *slice, CGRect *remainder,
CGFloat amount, CGRectEdge edge)
CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
/* Return true if `point' is contained in `rect', false otherwise. */
CG_EXTERN bool CGRectContainsPoint(CGRect rect, CGPoint point)
CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
/* Return true if `rect2' is contained in `rect1', false otherwise. `rect2'
is contained in `rect1' if the union of `rect1' and `rect2' is equal to
`rect1'. */
CG_EXTERN bool CGRectContainsRect(CGRect rect1, CGRect rect2)
CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
/* Return true if `rect1' intersects `rect2', false otherwise. `rect1'
intersects `rect2' if the intersection of `rect1' and `rect2' is not the
null rect. */
CG_EXTERN bool CGRectIntersectsRect(CGRect rect1, CGRect rect2)
CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
/*** Persistent representations. ***/
/* Return a dictionary representation of `point'. */
CG_EXTERN CFDictionaryRef CGPointCreateDictionaryRepresentation(CGPoint point)
CG_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
/* Make a CGPoint from the contents of `dict' (presumably returned earlier
from `CGPointCreateDictionaryRepresentation') and store the value in
`point'. Returns true on success; false otherwise. */
CG_EXTERN bool CGPointMakeWithDictionaryRepresentation(CFDictionaryRef dict,
CGPoint *point) CG_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
/* Return a dictionary representation of `size'. */
CG_EXTERN CFDictionaryRef CGSizeCreateDictionaryRepresentation(CGSize size)
CG_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
/* Make a CGSize from the contents of `dict' (presumably returned earlier
from `CGSizeCreateDictionaryRepresentation') and store the value in
`size'. Returns true on success; false otherwise. */
CG_EXTERN bool CGSizeMakeWithDictionaryRepresentation(CFDictionaryRef dict,
CGSize *size) CG_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
/* Return a dictionary representation of `rect'. */
CG_EXTERN CFDictionaryRef CGRectCreateDictionaryRepresentation(CGRect)
CG_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
/* Make a CGRect from the contents of `dict' (presumably returned earlier
from `CGRectCreateDictionaryRepresentation') and store the value in
`rect'. Returns true on success; false otherwise. */
CG_EXTERN bool CGRectMakeWithDictionaryRepresentation(CFDictionaryRef dict,
CGRect *rect) CG_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
/*** Definitions of inline functions. ***/
CG_INLINE CGPoint
CGPointMake(CGFloat x, CGFloat y)
{
CGPoint p; p.x = x; p.y = y; return p;
}
CG_INLINE CGSize
CGSizeMake(CGFloat width, CGFloat height)
{
CGSize size; size.width = width; size.height = height; return size;
}
CG_INLINE CGRect
CGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height)
{
CGRect rect;
rect.origin.x = x; rect.origin.y = y;
rect.size.width = width; rect.size.height = height;
return rect;
}
CG_INLINE bool
__CGPointEqualToPoint(CGPoint point1, CGPoint point2)
{
return point1.x == point2.x && point1.y == point2.y;
}
#define CGPointEqualToPoint __CGPointEqualToPoint
CG_INLINE bool
__CGSizeEqualToSize(CGSize size1, CGSize size2)
{
return size1.width == size2.width && size1.height == size2.height;
}
#define CGSizeEqualToSize __CGSizeEqualToSize
CGGeometry.h
最新推荐文章于 2024-11-07 10:28:17 发布