// 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