| Index: chrome/browser/ui/cocoa/infobars/infobar_gradient_view.mm
|
| diff --git a/chrome/browser/ui/cocoa/infobars/infobar_gradient_view.mm b/chrome/browser/ui/cocoa/infobars/infobar_gradient_view.mm
|
| index cb541b1328a25275b05c821e43acefd3284081e0..f87daf6d758db863a19ca72fb1b027e90fa7b3c2 100644
|
| --- a/chrome/browser/ui/cocoa/infobars/infobar_gradient_view.mm
|
| +++ b/chrome/browser/ui/cocoa/infobars/infobar_gradient_view.mm
|
| @@ -7,12 +7,22 @@
|
| #include "base/memory/scoped_nsobject.h"
|
| #include "chrome/browser/tab_contents/infobar.h"
|
| #import "chrome/browser/themes/theme_service.h"
|
| +#import "chrome/browser/ui/cocoa/browser_window_controller.h"
|
| #import "chrome/browser/ui/cocoa/infobars/infobar_container_controller.h"
|
| +#import "chrome/browser/ui/cocoa/location_bar/location_bar_view_mac.h"
|
| #import "chrome/browser/ui/cocoa/themed_window.h"
|
| #include "skia/ext/skia_utils_mac.h"
|
|
|
| +namespace {
|
| +
|
| +const CGFloat kTipWidth = 23;
|
| +
|
| +} // namespace
|
| +
|
| @implementation InfoBarGradientView
|
|
|
| +@synthesize tipApex = tipApex_;
|
| +
|
| - (void)setInfobarType:(InfoBarDelegate::Type)infobarType {
|
| SkColor topColor = GetInfoBarTopColor(infobarType);
|
| SkColor bottomColor = GetInfoBarBottomColor(infobarType);
|
| @@ -38,11 +48,23 @@
|
| NSRect bounds = [self bounds];
|
| bounds.size.height = infobars::kBaseHeight;
|
|
|
| + const CGFloat kHalfWidth = kTipWidth / 2.0;
|
| + const CGFloat kTipXOffset = self.tipApex.x - kHalfWidth;
|
| +
|
| // Around the bounds of the infobar, continue drawing the path into which the
|
| // gradient will be drawn.
|
| NSBezierPath* infoBarPath = [NSBezierPath bezierPath];
|
| [infoBarPath moveToPoint:NSMakePoint(NSMinX(bounds), NSMaxY(bounds))];
|
| +
|
| + // Draw the tip.
|
| + [infoBarPath lineToPoint:NSMakePoint(kTipXOffset, NSMaxY(bounds))];
|
| + [infoBarPath relativeLineToPoint:NSMakePoint(kHalfWidth,
|
| + infobars::kTipHeight)];
|
| + [infoBarPath relativeLineToPoint:NSMakePoint(kHalfWidth,
|
| + -infobars::kTipHeight)];
|
| [infoBarPath lineToPoint:NSMakePoint(NSMaxX(bounds), NSMaxY(bounds))];
|
| +
|
| + // Save off the top path of the infobar.
|
| scoped_nsobject<NSBezierPath> topPath([infoBarPath copy]);
|
|
|
| [infoBarPath lineToPoint:NSMakePoint(NSMaxX(bounds), NSMinY(bounds))];
|
| @@ -52,21 +74,33 @@
|
| // Draw the gradient.
|
| [[self gradient] drawInBezierPath:infoBarPath angle:270];
|
|
|
| - // Stroke the bottom.
|
| NSColor* strokeColor = [self strokeColor];
|
| if (strokeColor) {
|
| [strokeColor set];
|
| +
|
| + // Stroke the bottom of the infobar.
|
| NSRect borderRect, contentRect;
|
| NSDivideRect(bounds, &borderRect, &contentRect, 1, NSMinYEdge);
|
| NSRectFillUsingOperation(borderRect, NSCompositeSourceOver);
|
| +
|
| + // Re-stroke the top because the tip will have no stroke. This will draw
|
| + // over the divider drawn by the bottom of the tabstrip.
|
| + [topPath stroke];
|
| }
|
|
|
| // Add an inner stroke.
|
| + const CGFloat kHighlightTipHeight = infobars::kTipHeight - 1;
|
| + NSBezierPath* highlightPath = [NSBezierPath bezierPath];
|
| + [highlightPath moveToPoint:NSMakePoint(NSMinX(bounds), NSMaxY(bounds) - 1)];
|
| + [highlightPath relativeLineToPoint:NSMakePoint(kTipXOffset + 1, 0)];
|
| + [highlightPath relativeLineToPoint:NSMakePoint(kHalfWidth - 1,
|
| + kHighlightTipHeight)];
|
| + [highlightPath relativeLineToPoint:NSMakePoint(kHalfWidth - 1,
|
| + -kHighlightTipHeight)];
|
| + [highlightPath lineToPoint:NSMakePoint(NSMaxX(bounds), NSMaxY(bounds) - 1)];
|
| +
|
| [[NSColor colorWithDeviceWhite:1.0 alpha:1.0] setStroke];
|
| - NSAffineTransform* transform = [NSAffineTransform transform];
|
| - [transform translateXBy:0.0 yBy:-1.0];
|
| - [topPath transformUsingAffineTransform:transform];
|
| - [topPath stroke];
|
| + [highlightPath stroke];
|
| }
|
|
|
| - (BOOL)mouseDownCanMoveWindow {
|
|
|