Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(769)

Unified Diff: ios/chrome/browser/ui/tabs/tab_util.mm

Issue 2588733002: Upstream Chrome on iOS source code [9/11]. (Closed)
Patch Set: Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ios/chrome/browser/ui/tabs/tab_util.h ('k') | ios/chrome/browser/ui/tabs/tab_view.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ios/chrome/browser/ui/tabs/tab_util.mm
diff --git a/ios/chrome/browser/ui/tabs/tab_util.mm b/ios/chrome/browser/ui/tabs/tab_util.mm
new file mode 100644
index 0000000000000000000000000000000000000000..9095cc84a5545b16da674ef144b9bb9338332a7d
--- /dev/null
+++ b/ios/chrome/browser/ui/tabs/tab_util.mm
@@ -0,0 +1,72 @@
+// Copyright 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ios/chrome/browser/ui/tabs/tab_util.h"
+
+#include <sys/sysctl.h>
+
+namespace {
+
+// Constants for inset and control points for tab shape.
+const CGFloat kInsetMultiplier = 2.0 / 3.0;
+const CGFloat kControlPoint1Multiplier = 1.0 / 3.0;
+const CGFloat kControlPoint2Multiplier = 3.0 / 8.0;
+
+} // anonymous namespace
+
+namespace ios_internal {
+namespace tab_util {
+
+UIBezierPath* tabBezierPathForRect(CGRect rect) {
+ const CGFloat lineWidth = 1.0;
+ const CGFloat halfLineWidth = lineWidth / 2.0;
+
+ // Outset by halfLineWidth in order to draw on pixels rather than on borders
+ // (which would cause blurry pixels). Offset instead of outset vertically,
+ // otherwise clipping will occur.
+ rect = CGRectInset(rect, -halfLineWidth, 0);
+ rect.origin.y += halfLineWidth;
+
+ CGPoint bottomLeft =
+ CGPointMake(CGRectGetMinX(rect), CGRectGetMaxY(rect) - (2 * lineWidth));
+ CGPoint bottomRight =
+ CGPointMake(CGRectGetMaxX(rect), CGRectGetMaxY(rect) - (2 * lineWidth));
+ CGPoint topRight = CGPointMake(
+ CGRectGetMaxX(rect) - (kInsetMultiplier * CGRectGetHeight(rect)),
+ CGRectGetMinY(rect));
+ CGPoint topLeft = CGPointMake(
+ CGRectGetMinX(rect) + (kInsetMultiplier * CGRectGetHeight(rect)),
+ CGRectGetMinY(rect));
+
+ CGFloat baseControlPointOutset =
+ CGRectGetHeight(rect) * kControlPoint1Multiplier;
+ CGFloat bottomControlPointInset =
+ CGRectGetHeight(rect) * kControlPoint2Multiplier;
+
+ // Outset many of these values by lineWidth to cause the fill to bleed outside
+ // the clip area.
+ UIBezierPath* path = [UIBezierPath bezierPath];
+ [path moveToPoint:CGPointMake(bottomLeft.x - lineWidth,
+ bottomLeft.y + (2 * lineWidth))];
+ [path addLineToPoint:CGPointMake(bottomLeft.x - lineWidth, bottomLeft.y)];
+ [path addLineToPoint:bottomLeft];
+ [path addCurveToPoint:topLeft
+ controlPoint1:CGPointMake(bottomLeft.x + baseControlPointOutset,
+ bottomLeft.y)
+ controlPoint2:CGPointMake(topLeft.x - bottomControlPointInset,
+ topLeft.y)];
+ [path addLineToPoint:topRight];
+ [path addCurveToPoint:bottomRight
+ controlPoint1:CGPointMake(topRight.x + bottomControlPointInset,
+ topRight.y)
+ controlPoint2:CGPointMake(bottomRight.x - baseControlPointOutset,
+ bottomRight.y)];
+ [path addLineToPoint:CGPointMake(bottomRight.x + lineWidth, bottomRight.y)];
+ [path addLineToPoint:CGPointMake(bottomRight.x + lineWidth,
+ bottomRight.y + (2 * lineWidth))];
+ return path;
+}
+
+} // namespace tab_util
+} // namespace ios_internal
« no previous file with comments | « ios/chrome/browser/ui/tabs/tab_util.h ('k') | ios/chrome/browser/ui/tabs/tab_view.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698