/core/externals/update-engine/externals/google-toolbox-for-mac/Foundation/GTMGeometryUtils.m
Objective C | 108 lines | 68 code | 15 blank | 25 comment | 7 complexity | 1adbe89913c87a8e54e1b3af0bad628a MD5 | raw file
Possible License(s): Apache-2.0, BSD-3-Clause, GPL-2.0
- //
- // 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
- CGRect GTMCGAlignRectangles(CGRect alignee, CGRect aligner, GTMRectAlignment alignment) {
- switch (alignment) {
- case GTMRectAlignTop:
- alignee.origin.x = aligner.origin.x + (CGRectGetWidth(aligner) * .5f - CGRectGetWidth(alignee) * .5f);
- alignee.origin.y = aligner.origin.y + CGRectGetHeight(aligner) - CGRectGetHeight(alignee);
- break;
-
- case GTMRectAlignTopLeft:
- alignee.origin.x = aligner.origin.x;
- alignee.origin.y = aligner.origin.y + CGRectGetHeight(aligner) - CGRectGetHeight(alignee);
- break;
-
- case GTMRectAlignTopRight:
- alignee.origin.x = aligner.origin.x + CGRectGetWidth(aligner) - CGRectGetWidth(alignee);
- alignee.origin.y = aligner.origin.y + CGRectGetHeight(aligner) - CGRectGetHeight(alignee);
- break;
- case GTMRectAlignLeft:
- alignee.origin.x = aligner.origin.x;
- alignee.origin.y = aligner.origin.y + (CGRectGetHeight(aligner) * .5f - CGRectGetHeight(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 + (CGRectGetWidth(aligner) * .5f - CGRectGetWidth(alignee) * .5f);
- alignee.origin.y = aligner.origin.y;
- break;
- case GTMRectAlignBottomRight:
- alignee.origin.x = aligner.origin.x + CGRectGetWidth(aligner) - CGRectGetWidth(alignee);
- alignee.origin.y = aligner.origin.y;
- break;
-
- case GTMRectAlignRight:
- alignee.origin.x = aligner.origin.x + CGRectGetWidth(aligner) - CGRectGetWidth(alignee);
- alignee.origin.y = aligner.origin.y + (CGRectGetHeight(aligner) * .5f - CGRectGetHeight(alignee) * .5f);
- break;
-
- default:
- case GTMRectAlignCenter:
- alignee.origin.x = aligner.origin.x + (CGRectGetWidth(aligner) * .5f - CGRectGetWidth(alignee) * .5f);
- alignee.origin.y = aligner.origin.y + (CGRectGetHeight(aligner) * .5f - CGRectGetHeight(alignee) * .5f);
- break;
- }
- return alignee;
- }
- CGRect GTMCGScaleRectangleToSize(CGRect scalee, CGSize size, GTMScaling scaling) {
- switch (scaling) {
-
- case GTMScaleToFillProportionally:
- case GTMScaleProportionally: {
- CGFloat height = CGRectGetHeight(scalee);
- CGFloat width = CGRectGetWidth(scalee);
- if (isnormal(height) && isnormal(width) &&
- (height > size.height || width > size.width)) {
- CGFloat horiz = size.width / width;
- CGFloat vert = size.height / height;
- BOOL expand = (scaling == GTMScaleToFillProportionally);
- // We use the smaller scale unless expand is true. In that case, larger.
- CGFloat newScale = ((horiz < vert) ^ expand) ? horiz : vert;
- scalee = GTMCGRectScale(scalee, newScale, newScale);
- }
- break;
- }
-
- case GTMScaleToFit:
- scalee.size = size;
- break;
-
- case GTMScaleNone:
- default:
- // Do nothing
- break;
- }
- return scalee;
- }