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

Unified Diff: chrome/browser/ui/cocoa/autofill/autofill_notification_controller.mm

Issue 55973003: [rAc OSX] Add support for drawing borders around dialog notifications. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 7 years, 1 month 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 | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/cocoa/autofill/autofill_notification_controller.mm
diff --git a/chrome/browser/ui/cocoa/autofill/autofill_notification_controller.mm b/chrome/browser/ui/cocoa/autofill/autofill_notification_controller.mm
index 9252d640394a38785f19c142933f518e05bb1515..76416fbd17fbe7a451cb5afd2896987177c65375 100644
--- a/chrome/browser/ui/cocoa/autofill/autofill_notification_controller.mm
+++ b/chrome/browser/ui/cocoa/autofill/autofill_notification_controller.mm
@@ -22,11 +22,13 @@
NSView* arrowAnchorView_;
BOOL hasArrow_;
base::scoped_nsobject<NSColor> backgroundColor_;
+ base::scoped_nsobject<NSColor> borderColor_;
}
@property (nonatomic, assign) NSView* anchorView;
@property (nonatomic, assign) BOOL hasArrow;
@property (nonatomic, retain) NSColor* backgroundColor;
+@property (nonatomic, retain) NSColor* borderColor;
@end
@@ -38,26 +40,39 @@
- (void)drawRect:(NSRect)dirtyRect {
[super drawRect:dirtyRect];
- NSRect backgroundRect = [self bounds];
- if (hasArrow_) {
+ NSBezierPath* path;
+ NSRect bounds = [self bounds];
+ if (!hasArrow_) {
+ path = [NSBezierPath bezierPathWithRect:bounds];
+ } else {
+ // The upper tip of the arrow.
NSPoint anchorPoint = NSMakePoint(NSMidX([arrowAnchorView_ bounds]), 0);
anchorPoint = [self convertPoint:anchorPoint fromView:arrowAnchorView_];
- anchorPoint.y = NSMaxY([self bounds]);
-
- NSBezierPath* arrow = [NSBezierPath bezierPath];
- [arrow moveToPoint:anchorPoint];
- [arrow relativeLineToPoint:
- NSMakePoint(-autofill::kArrowWidth / 2.0, -autofill::kArrowHeight)];
- [arrow relativeLineToPoint:NSMakePoint(autofill::kArrowWidth, 0)];
- [arrow closePath];
- [backgroundColor_ setFill];
- [arrow fill];
- backgroundRect.size.height -= autofill::kArrowHeight;
+ anchorPoint.y = NSMaxY(bounds);
+ // The minimal rectangle that encloses the arrow.
+ NSRect arrowRect = NSMakeRect(anchorPoint.x - autofill::kArrowWidth / 2.0,
+ anchorPoint.y - autofill::kArrowHeight,
+ autofill::kArrowWidth,
+ autofill::kArrowHeight);
+
+ // Include the arrow and the rectangular non-arrow region in the same path,
+ // so that the stroke is easier to draw. Start at the upper-left of the
+ // rectangular region, and proceed clockwise.
+ path = [NSBezierPath bezierPath];
+ [path moveToPoint:NSMakePoint(NSMinX(bounds), NSMinY(arrowRect))];
+ [path lineToPoint:arrowRect.origin];
+ [path lineToPoint:NSMakePoint(NSMidX(arrowRect), NSMaxY(arrowRect))];
+ [path lineToPoint:NSMakePoint(NSMaxX(arrowRect), NSMinY(arrowRect))];
+ [path lineToPoint:NSMakePoint(NSMaxX(bounds), NSMinY(arrowRect))];
+ [path lineToPoint:NSMakePoint(NSMaxX(bounds), NSMinY(bounds))];
+ [path lineToPoint:NSMakePoint(NSMinX(bounds), NSMinY(bounds))];
+ [path closePath];
}
- dirtyRect = NSIntersectionRect(backgroundRect, dirtyRect);
[backgroundColor_ setFill];
- NSRectFill(dirtyRect);
+ [path fill];
+ [borderColor_ setStroke];
+ [path stroke];
}
- (NSColor*)backgroundColor {
@@ -68,6 +83,14 @@
backgroundColor_.reset([backgroundColor retain]);
}
+- (NSColor*)borderColor {
+ return borderColor_;
+}
+
+- (void)setBorderColor:(NSColor*)borderColor {
+ borderColor_.reset([borderColor retain]);
+}
+
@end
@implementation AutofillNotificationController
@@ -78,6 +101,8 @@
[[AutofillNotificationView alloc] initWithFrame:NSZeroRect]);
[view setBackgroundColor:
gfx::SkColorToCalibratedNSColor(notification->GetBackgroundColor())];
+ [view setBorderColor:
+ gfx::SkColorToCalibratedNSColor(notification->GetBorderColor())];
[self setView:view];
textfield_.reset([[NSTextField alloc] initWithFrame:NSZeroRect]);
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698