aboutsummaryrefslogtreecommitdiff
path: root/Foundation/GTMGeometryUtils.m
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.m
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.m')
-rw-r--r--Foundation/GTMGeometryUtils.m104
1 files changed, 104 insertions, 0 deletions
diff --git a/Foundation/GTMGeometryUtils.m b/Foundation/GTMGeometryUtils.m
new file mode 100644
index 0000000..f5b38dc
--- /dev/null
+++ b/Foundation/GTMGeometryUtils.m
@@ -0,0 +1,104 @@
+//
+// GTMGeometryUtils.m
+//
+// 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.
+//
+
+#import "GTMGeometryUtils.h"
+
+/// Align rectangles
+//
+// Args:
+// alignee - rect to be aligned
+// aligner - rect to be aligned to
+// alignment - alignment to be applied to alignee based on aligner
+
+NSRect GTMAlignRectangles(NSRect alignee, NSRect aligner, GTMRectAlignment alignment) {
+ switch (alignment) {
+ case GTMRectAlignTop:
+ alignee.origin.x = aligner.origin.x + (NSWidth(aligner) * .5f - NSWidth(alignee) * .5f);
+ alignee.origin.y = aligner.origin.y + NSHeight(aligner) - NSHeight(alignee);
+ break;
+
+ case GTMRectAlignTopLeft:
+ alignee.origin.x = aligner.origin.x;
+ alignee.origin.y = aligner.origin.y + NSHeight(aligner) - NSHeight(alignee);
+ break;
+
+ case GTMRectAlignTopRight:
+ alignee.origin.x = aligner.origin.x + NSWidth(aligner) - NSWidth(alignee);
+ alignee.origin.y = aligner.origin.y + NSHeight(aligner) - NSHeight(alignee);
+ break;
+
+ case GTMRectAlignLeft:
+ alignee.origin.x = aligner.origin.x;
+ alignee.origin.y = aligner.origin.y + (NSHeight(aligner) * .5f - NSHeight(alignee) * .5f);
+ break;
+
+ case GTMRectAlignBottomLeft:
+ alignee.origin.x = aligner.origin.x;
+ alignee.origin.y = aligner.origin.y;
+ break;
+
+ case GTMRectAlignBottom:
+ alignee.origin.x = aligner.origin.x + (NSWidth(aligner) * .5f - NSWidth(alignee) * .5f);
+ alignee.origin.y = aligner.origin.y;
+ break;
+
+ case GTMRectAlignBottomRight:
+ alignee.origin.x = aligner.origin.x + NSWidth(aligner) - NSWidth(alignee);
+ alignee.origin.y = aligner.origin.y;
+ break;
+
+ case GTMRectAlignRight:
+ alignee.origin.x = aligner.origin.x + NSWidth(aligner) - NSWidth(alignee);
+ alignee.origin.y = aligner.origin.y + (NSHeight(aligner) * .5f - NSHeight(alignee) * .5f);
+ break;
+
+ default:
+ case GTMRectAlignCenter:
+ alignee.origin.x = aligner.origin.x + (NSWidth(aligner) * .5f - NSWidth(alignee) * .5f);
+ alignee.origin.y = aligner.origin.y + (NSHeight(aligner) * .5f - NSHeight(alignee) * .5f);
+ break;
+ }
+ return alignee;
+}
+
+NSRect GTMScaleRectangleToSize(NSRect scalee, NSSize size, GTMScaling scaling) {
+ switch (scaling) {
+ case GTMScaleProportionally: {
+ float height = NSHeight(scalee);
+ float width = NSWidth(scalee);
+ if (isnormal(height) && isnormal(width) &&
+ (height > size.height || width > size.width)) {
+ float horiz = size.width / width;
+ float vert = size.height / height;
+ float newScale = horiz < vert ? horiz : vert;
+ scalee = GTMNSRectScale(scalee, newScale, newScale);
+ }
+ break;
+ }
+
+ case GTMScaleToFit:
+ scalee.size = size;
+ break;
+
+ case GTMScaleNone:
+ default:
+ // Do nothing
+ break;
+ }
+ return scalee;
+}