| // Copyright (c) 2013 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. |
| |
| #import "chrome/browser/ui/cocoa/rect_path_utils.h" |
| |
| #import "third_party/GTM/AppKit/GTMNSBezierPath+RoundRect.h" |
| |
| namespace rect_path_utils { |
| |
| NSBezierPath* RectPathWithInset(RoundedCornerFlags roundedCornerFlags, |
| const NSRect frame, |
| const CGFloat insetX, |
| const CGFloat insetY, |
| const CGFloat outerRadius) { |
| NSRect insetFrame = NSInsetRect(frame, insetX, insetY); |
| |
| if (outerRadius > 0.0) { |
| CGFloat leftRadius = outerRadius - insetX; |
| CGFloat rightRadius = |
| (roundedCornerFlags == RoundedCornerLeft) ? 0 : leftRadius; |
| |
| return [NSBezierPath gtm_bezierPathWithRoundRect:insetFrame |
| topLeftCornerRadius:leftRadius |
| topRightCornerRadius:rightRadius |
| bottomLeftCornerRadius:leftRadius |
| bottomRightCornerRadius:rightRadius]; |
| } else { |
| return [NSBezierPath bezierPathWithRect:insetFrame]; |
| } |
| } |
| |
| // Similar to |NSRectFill()|, additionally sets |color| as the fill |
| // color. |outerRadius| greater than 0.0 uses rounded corners, with |
| // inset backed out of the radius. |
| void FillRectWithInset(RoundedCornerFlags roundedCornerFlags, |
| const NSRect frame, |
| const CGFloat insetX, |
| const CGFloat insetY, |
| const CGFloat outerRadius, |
| NSColor* color) { |
| NSBezierPath* path = |
| RectPathWithInset(roundedCornerFlags, frame, insetX, insetY, outerRadius); |
| [color setFill]; |
| [path fill]; |
| } |
| |
| // Similar to |NSFrameRectWithWidth()|, additionally sets |color| as |
| // the stroke color (as opposed to the fill color). |outerRadius| |
| // greater than 0.0 uses rounded corners, with inset backed out of the |
| // radius. |
| void FrameRectWithInset(RoundedCornerFlags roundedCornerFlags, |
| const NSRect frame, |
| const CGFloat insetX, |
| const CGFloat insetY, |
| const CGFloat outerRadius, |
| const CGFloat lineWidth, |
| NSColor* color) { |
| const CGFloat finalInsetX = insetX + (lineWidth / 2.0); |
| const CGFloat finalInsetY = insetY + (lineWidth / 2.0); |
| NSBezierPath* path = |
| RectPathWithInset(roundedCornerFlags, frame, finalInsetX, finalInsetY, |
| outerRadius); |
| [color setStroke]; |
| [path setLineWidth:lineWidth]; |
| [path stroke]; |
| } |
| |
| } // namespace rect_path_utils |