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

Unified Diff: chrome/browser/ui/cocoa/infobars/infobar_gradient_view.mm

Issue 7461134: [Mac] Unspoofable infobars v3. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address comments Created 9 years, 4 months 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 | « chrome/browser/ui/cocoa/infobars/infobar_gradient_view.h ('k') | chrome/browser/ui/cocoa/tabpose_window.mm » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 {
« no previous file with comments | « chrome/browser/ui/cocoa/infobars/infobar_gradient_view.h ('k') | chrome/browser/ui/cocoa/tabpose_window.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698