aboutsummaryrefslogtreecommitdiff
path: root/Foundation/GTMGeometryUtils.h
diff options
context:
space:
mode:
authorGravatar thomasvl <thomasvl@7dc7ac4e-7543-0410-b95c-c1676fc8e2a3>2008-04-14 17:21:02 +0000
committerGravatar thomasvl <thomasvl@7dc7ac4e-7543-0410-b95c-c1676fc8e2a3>2008-04-14 17:21:02 +0000
commitcdf070c8d76ffc4eaa24e8671756cbbe9ceb2890 (patch)
treefaa9ae3a72a6591d6a6add7ceed7f91e92ade11f /Foundation/GTMGeometryUtils.h
parent0aaecac6ff2bc89e58a0c8c6d6ad62e02fb2b011 (diff)
See the ReleaseNotes for the full details, highlights:
- bug fixes - code coverage support - more complete unittests - full support for unittesting UIs - support for the iphone sdk (include ui unittesting)
Diffstat (limited to 'Foundation/GTMGeometryUtils.h')
-rw-r--r--Foundation/GTMGeometryUtils.h377
1 files changed, 377 insertions, 0 deletions
diff --git a/Foundation/GTMGeometryUtils.h b/Foundation/GTMGeometryUtils.h
new file mode 100644
index 0000000..32c8745
--- /dev/null
+++ b/Foundation/GTMGeometryUtils.h
@@ -0,0 +1,377 @@
+//
+// GTMGeometryUtils.h
+//
+// Utilities for geometrical utilities such as conversions
+// between different types.
+//
+// Copyright 2006-2008 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License"); you may not
+// use this file except in compliance with the License. You may obtain a copy
+// of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+// License for the specific language governing permissions and limitations under
+// the License.
+//
+
+#include <Foundation/Foundation.h>
+
+typedef enum {
+ GTMScaleProportionally = 0, // Fit proportionally
+ GTMScaleToFit, // Forced fit (distort if necessary)
+ GTMScaleNone // Don't scale (clip)
+} GTMScaling;
+
+typedef enum {
+ GTMRectAlignCenter = 0,
+ GTMRectAlignTop,
+ GTMRectAlignTopLeft,
+ GTMRectAlignTopRight,
+ GTMRectAlignLeft,
+ GTMRectAlignBottom,
+ GTMRectAlignBottomLeft,
+ GTMRectAlignBottomRight,
+ GTMRectAlignRight
+} GTMRectAlignment;
+
+#pragma mark Miscellaneous
+
+/// Calculate the distance between two points.
+//
+// Args:
+// pt1 first point
+// pt2 second point
+//
+// Returns:
+// Distance
+CG_INLINE float GTMDistanceBetweenPoints(NSPoint pt1, NSPoint pt2) {
+ float dX = pt1.x - pt2.x;
+ float dY = pt1.y - pt2.y;
+ return sqrtf(dX * dX + dY * dY);
+}
+
+#pragma mark -
+#pragma mark Point Conversion
+
+/// Quickly convert from a CGPoint to a NSPoint.
+//
+/// CGPoints are relative to 0,0 in lower left;
+/// NSPoints are relative to 0,0 in lower left
+//
+// Args:
+// inPoint: CGPoint to convert
+//
+// Returns:
+// Converted NSPoint
+CG_INLINE NSPoint GTMCGPointToNSPoint(CGPoint inPoint) {
+ return NSMakePoint(inPoint.x, inPoint.y);
+}
+
+/// Quickly convert from a NSPoint to a CGPoint.
+//
+/// CGPoints are relative to 0,0 in lower left;
+/// NSPoints are relative to 0,0 in lower left
+//
+// Args:
+// inPoint: NSPoint to convert
+//
+// Returns:
+// Converted CGPoint
+CG_INLINE CGPoint GTMNSPointToCGPoint(NSPoint inPoint) {
+ return CGPointMake(inPoint.x, inPoint.y);
+}
+
+#pragma mark -
+#pragma mark Rect Conversion
+
+/// Convert from a CGRect to a NSRect.
+//
+/// NSRect are relative to 0,0 in lower left;
+/// CGRect are relative to 0,0 in lower left
+//
+// Args:
+// inRect: CGRect to convert
+//
+// Returns:
+// Converted NSRect
+CG_INLINE NSRect GTMCGRectToNSRect(CGRect inRect) {
+ return NSMakeRect(inRect.origin.x,inRect.origin.y,inRect.size.width,inRect.size.height);
+}
+
+/// Convert from a NSRect to a CGRect.
+//
+/// NSRect are relative to 0,0 in lower left;
+/// CGRect are relative to 0,0 in lower left
+//
+// Args:
+// inRect: NSRect to convert
+//
+// Returns:
+// Converted CGRect
+CG_INLINE CGRect GTMNSRectToCGRect(NSRect inRect) {
+ return CGRectMake(inRect.origin.x,inRect.origin.y,inRect.size.width,inRect.size.height);
+}
+
+#pragma mark -
+#pragma mark Size Conversion
+
+/// Convert from a CGSize to an NSSize.
+//
+// Args:
+// inSize: CGSize to convert
+//
+// Returns:
+// Converted NSSize
+CG_INLINE NSSize GTMCGSizeToNSSize(CGSize inSize) {
+ return NSMakeSize(inSize.width, inSize.height);
+}
+
+/// Convert from a NSSize to a CGSize.
+//
+// Args:
+// inSize: NSSize to convert
+//
+// Returns:
+// Converted CGSize
+CG_INLINE CGSize GTMNSSizeToCGSize(NSSize inSize) {
+ return CGSizeMake(inSize.width, inSize.height);
+}
+
+#pragma mark -
+#pragma mark Point On Rect
+
+/// Return middle of left side of rectangle
+//
+// Args:
+// rect - rectangle
+//
+// Returns:
+// point located in the middle of left side of rect
+CG_INLINE NSPoint GTMNSMidLeft(NSRect rect) {
+ return NSMakePoint(NSMinX(rect), NSMidY(rect));
+}
+
+/// Return middle of right side of rectangle
+//
+// Args:
+// rect - rectangle
+//
+// Returns:
+// point located in the middle of right side of rect
+CG_INLINE NSPoint GTMNSMidRight(NSRect rect) {
+ return NSMakePoint(NSMaxX(rect), NSMidY(rect));
+}
+
+/// Return middle of top side of rectangle
+//
+// Args:
+// rect - rectangle
+//
+// Returns:
+// point located in the middle of top side of rect
+CG_INLINE NSPoint GTMNSMidTop(NSRect rect) {
+ return NSMakePoint(NSMidX(rect), NSMaxY(rect));
+}
+
+/// Return middle of bottom side of rectangle
+//
+// Args:
+// rect - rectangle
+//
+// Returns:
+// point located in the middle of bottom side of rect
+CG_INLINE NSPoint GTMNSMidBottom(NSRect rect) {
+ return NSMakePoint(NSMidX(rect), NSMinY(rect));
+}
+
+/// Return center of rectangle
+//
+// Args:
+// rect - rectangle
+//
+// Returns:
+// point located in the center of rect
+CG_INLINE NSPoint GTMNSCenter(NSRect rect) {
+ return NSMakePoint(NSMidX(rect), NSMidY(rect));
+}
+
+/// Return middle of left side of rectangle
+//
+// Args:
+// rect - rectangle
+//
+// Returns:
+// point located in the middle of left side of rect
+CG_INLINE CGPoint GTMCGMidLeft(CGRect rect) {
+ return CGPointMake(CGRectGetMinX(rect), CGRectGetMidY(rect));
+}
+
+/// Return middle of right side of rectangle
+//
+// Args:
+// rect - rectangle
+//
+// Returns:
+// point located in the middle of right side of rect
+CG_INLINE CGPoint GTMCGMidRight(CGRect rect) {
+ return CGPointMake(CGRectGetMaxX(rect), CGRectGetMidY(rect));
+}
+
+/// Return middle of top side of rectangle
+//
+// Args:
+// rect - rectangle
+//
+// Returns:
+// point located in the middle of top side of rect
+CG_INLINE CGPoint GTMCGMidTop(CGRect rect) {
+ return CGPointMake(CGRectGetMidX(rect), CGRectGetMaxY(rect));
+}
+
+/// Return middle of bottom side of rectangle
+//
+// Args:
+// rect - rectangle
+//
+// Returns:
+// point located in the middle of bottom side of rect
+CG_INLINE CGPoint GTMCGMidBottom(CGRect rect) {
+ return CGPointMake(CGRectGetMidX(rect), CGRectGetMinY(rect));
+}
+
+/// Return center of rectangle
+//
+// Args:
+// rect - rectangle
+//
+// Returns:
+// point located in the center of rect
+CG_INLINE CGPoint GTMCGCenter(CGRect rect) {
+ return CGPointMake(CGRectGetMidX(rect), CGRectGetMidY(rect));
+}
+
+#pragma mark -
+#pragma mark Rect-Size Conversion
+
+/// Return size of rectangle
+//
+// Args:
+// rect - rectangle
+//
+// Returns:
+// size of rectangle
+CG_INLINE NSSize GTMNSRectSize(NSRect rect) {
+ return NSMakeSize(NSWidth(rect), NSHeight(rect));
+}
+
+/// Return size of rectangle
+//
+// Args:
+// rect - rectangle
+//
+// Returns:
+// size of rectangle
+CG_INLINE CGSize GTMCGRectSize(CGRect rect) {
+ return CGSizeMake(CGRectGetWidth(rect), CGRectGetHeight(rect));
+}
+
+/// Return rectangle of size
+//
+// Args:
+// size - size
+//
+// Returns:
+// rectangle of size (origin 0,0)
+CG_INLINE NSRect GTMNSRectOfSize(NSSize size) {
+ return NSMakeRect(0.0f, 0.0f, size.width, size.height);
+}
+
+/// Return rectangle of size
+//
+// Args:
+// size - size
+//
+// Returns:
+// rectangle of size (origin 0,0)
+CG_INLINE CGRect GTMCGRectOfSize(CGSize size) {
+ return CGRectMake(0.0f, 0.0f, size.width, size.height);
+}
+
+#pragma mark -
+#pragma mark Rect Scaling and Alignment
+
+/// Scales an NSRect
+//
+// Args:
+// inRect: Rect to scale
+// xScale: fraction to scale (1.0 is 100%)
+// yScale: fraction to scale (1.0 is 100%)
+//
+// Returns:
+// Converted Rect
+CG_INLINE NSRect GTMNSRectScale(NSRect inRect, float xScale, float yScale) {
+ return NSMakeRect(inRect.origin.x, inRect.origin.y,
+ inRect.size.width * xScale, inRect.size.height * yScale);
+}
+
+/// Scales an CGRect
+//
+// Args:
+// inRect: Rect to scale
+// xScale: fraction to scale (1.0 is 100%)
+// yScale: fraction to scale (1.0 is 100%)
+//
+// Returns:
+// Converted Rect
+CG_INLINE CGRect GTMCGRectScale(CGRect inRect, float xScale, float yScale) {
+ return CGRectMake(inRect.origin.x, inRect.origin.y,
+ inRect.size.width * xScale, inRect.size.height * yScale);
+}
+
+/// Align rectangles
+//
+// Args:
+// alignee - rect to be aligned
+// aligner - rect to be aligned from
+NSRect GTMAlignRectangles(NSRect alignee, NSRect aligner,
+ GTMRectAlignment alignment);
+
+/// Align rectangles
+//
+// Args:
+// alignee - rect to be aligned
+// aligner - rect to be aligned from
+// alignment - way to align the rectangles
+CG_INLINE CGRect GTMCGAlignRectangles(CGRect alignee, CGRect aligner,
+ GTMRectAlignment alignment) {
+ return GTMNSRectToCGRect(GTMAlignRectangles(GTMCGRectToNSRect(alignee),
+ GTMCGRectToNSRect(aligner),
+ alignment));
+}
+
+/// Scale rectangle
+//
+// Args:
+// scalee - rect to be scaled
+// size - size to scale to
+// scaling - way to scale the rectangle
+NSRect GTMScaleRectangleToSize(NSRect scalee, NSSize size,
+ GTMScaling scaling);
+
+/// Scale rectangle
+//
+// Args:
+// scalee - rect to be scaled
+// size - size to scale to
+// scaling - way to scale the rectangle
+CG_INLINE CGRect GTMCGScaleRectangleToSize(CGRect scalee, CGSize size,
+ GTMScaling scaling) {
+ return GTMNSRectToCGRect(GTMScaleRectangleToSize(GTMCGRectToNSRect(scalee),
+ GTMCGSizeToNSSize(size),
+ scaling));
+}