| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #import "chrome/browser/ui/cocoa/info_bubble_view.h" | 5 #import "chrome/browser/ui/cocoa/info_bubble_view.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "base/mac/foundation_util.h" | 8 #include "base/mac/foundation_util.h" |
| 9 #import "chrome/browser/ui/cocoa/info_bubble_window.h" | 9 #import "chrome/browser/ui/cocoa/info_bubble_window.h" |
| 10 #import "chrome/browser/ui/cocoa/l10n_util.h" |
| 10 #import "third_party/google_toolbox_for_mac/src/AppKit/GTMNSBezierPath+RoundRect
.h" | 11 #import "third_party/google_toolbox_for_mac/src/AppKit/GTMNSBezierPath+RoundRect
.h" |
| 11 | 12 |
| 12 @implementation InfoBubbleView | 13 @implementation InfoBubbleView |
| 13 | 14 |
| 14 @synthesize arrowLocation = arrowLocation_; | 15 @synthesize arrowLocation = arrowLocation_; |
| 15 @synthesize alignment = alignment_; | 16 @synthesize alignment = alignment_; |
| 16 @synthesize cornerFlags = cornerFlags_; | 17 @synthesize cornerFlags = cornerFlags_; |
| 17 | 18 |
| 18 - (id)initWithFrame:(NSRect)frameRect { | 19 - (id)initWithFrame:(NSRect)frameRect { |
| 19 if ((self = [super initWithFrame:frameRect])) { | 20 if ((self = [super initWithFrame:frameRect])) { |
| 20 arrowLocation_ = info_bubble::kTopLeft; | 21 arrowLocation_ = info_bubble::kTopLeading; |
| 21 alignment_ = info_bubble::kAlignArrowToAnchor; | 22 alignment_ = info_bubble::kAlignArrowToAnchor; |
| 22 cornerFlags_ = info_bubble::kRoundedAllCorners; | 23 cornerFlags_ = info_bubble::kRoundedAllCorners; |
| 23 backgroundColor_.reset([[NSColor whiteColor] retain]); | 24 backgroundColor_.reset([[NSColor whiteColor] retain]); |
| 24 } | 25 } |
| 25 return self; | 26 return self; |
| 26 } | 27 } |
| 27 | 28 |
| 28 - (BOOL)performKeyEquivalent:(NSEvent *)event { | 29 - (BOOL)performKeyEquivalent:(NSEvent *)event { |
| 29 InfoBubbleWindow* info_bubble_window = | 30 InfoBubbleWindow* info_bubble_window = |
| 30 base::mac::ObjCCast<InfoBubbleWindow>([self window]); | 31 base::mac::ObjCCast<InfoBubbleWindow>([self window]); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 57 info_bubble::kBubbleCornerRadius : 0; | 58 info_bubble::kBubbleCornerRadius : 0; |
| 58 | 59 |
| 59 NSBezierPath* bezier = | 60 NSBezierPath* bezier = |
| 60 [NSBezierPath gtm_bezierPathWithRoundRect:bounds | 61 [NSBezierPath gtm_bezierPathWithRoundRect:bounds |
| 61 topLeftCornerRadius:topRadius | 62 topLeftCornerRadius:topRadius |
| 62 topRightCornerRadius:topRadius | 63 topRightCornerRadius:topRadius |
| 63 bottomLeftCornerRadius:bottomRadius | 64 bottomLeftCornerRadius:bottomRadius |
| 64 bottomRightCornerRadius:bottomRadius]; | 65 bottomRightCornerRadius:bottomRadius]; |
| 65 | 66 |
| 66 // Add the bubble arrow. | 67 // Add the bubble arrow. |
| 68 BOOL isRTL = cocoa_l10n_util::ShouldDoExperimentalRTLLayout(); |
| 67 CGFloat dX = 0; | 69 CGFloat dX = 0; |
| 70 CGFloat leftOffset = info_bubble::kBubbleArrowXOffset; |
| 71 CGFloat rightOffset = NSWidth(bounds) - info_bubble::kBubbleArrowXOffset - |
| 72 info_bubble::kBubbleArrowWidth; |
| 68 switch (arrowLocation_) { | 73 switch (arrowLocation_) { |
| 69 case info_bubble::kTopLeft: | 74 case info_bubble::kTopLeading: |
| 70 dX = info_bubble::kBubbleArrowXOffset; | 75 dX = isRTL ? rightOffset : leftOffset; |
| 71 break; | 76 break; |
| 72 case info_bubble::kTopRight: | 77 case info_bubble::kTopTrailing: |
| 73 dX = NSWidth(bounds) - info_bubble::kBubbleArrowXOffset - | 78 dX = isRTL ? leftOffset : rightOffset; |
| 74 info_bubble::kBubbleArrowWidth; | |
| 75 break; | 79 break; |
| 76 case info_bubble::kTopCenter: | 80 case info_bubble::kTopCenter: |
| 77 dX = NSMidX(bounds) - info_bubble::kBubbleArrowWidth / 2.0; | 81 dX = NSMidX(bounds) - info_bubble::kBubbleArrowWidth / 2.0; |
| 78 break; | 82 break; |
| 79 case info_bubble::kNoArrow: | 83 case info_bubble::kNoArrow: |
| 80 break; | 84 break; |
| 81 default: | 85 default: |
| 82 NOTREACHED(); | 86 NOTREACHED(); |
| 83 break; | 87 break; |
| 84 } | 88 } |
| (...skipping 11 matching lines...) Expand all Loading... |
| 96 [bezier closePath]; | 100 [bezier closePath]; |
| 97 [backgroundColor_ set]; | 101 [backgroundColor_ set]; |
| 98 [bezier fill]; | 102 [bezier fill]; |
| 99 } | 103 } |
| 100 | 104 |
| 101 - (NSPoint)arrowTip { | 105 - (NSPoint)arrowTip { |
| 102 NSRect bounds = [self bounds]; | 106 NSRect bounds = [self bounds]; |
| 103 CGFloat tipXOffset = | 107 CGFloat tipXOffset = |
| 104 info_bubble::kBubbleArrowXOffset + info_bubble::kBubbleArrowWidth / 2.0; | 108 info_bubble::kBubbleArrowXOffset + info_bubble::kBubbleArrowWidth / 2.0; |
| 105 CGFloat xOffset = 0.0; | 109 CGFloat xOffset = 0.0; |
| 110 BOOL isRTL = cocoa_l10n_util::ShouldDoExperimentalRTLLayout(); |
| 111 CGFloat leftOffset = NSMaxX(bounds) - tipXOffset; |
| 112 CGFloat rightOffset = NSMinX(bounds) + tipXOffset; |
| 106 switch(arrowLocation_) { | 113 switch(arrowLocation_) { |
| 107 case info_bubble::kTopRight: | 114 case info_bubble::kTopTrailing: |
| 108 xOffset = NSMaxX(bounds) - tipXOffset; | 115 xOffset = isRTL ? rightOffset : leftOffset; |
| 109 break; | 116 break; |
| 110 case info_bubble::kTopLeft: | 117 case info_bubble::kTopLeading: |
| 111 xOffset = NSMinX(bounds) + tipXOffset; | 118 xOffset = isRTL ? leftOffset : rightOffset; |
| 112 break; | 119 break; |
| 113 case info_bubble::kTopCenter: | 120 case info_bubble::kTopCenter: |
| 114 xOffset = NSMidX(bounds); | 121 xOffset = NSMidX(bounds); |
| 115 break; | 122 break; |
| 116 default: | 123 default: |
| 117 NOTREACHED(); | 124 NOTREACHED(); |
| 118 break; | 125 break; |
| 119 } | 126 } |
| 120 NSPoint arrowTip = NSMakePoint(xOffset, NSMaxY(bounds)); | 127 NSPoint arrowTip = NSMakePoint(xOffset, NSMaxY(bounds)); |
| 121 return arrowTip; | 128 return arrowTip; |
| 122 } | 129 } |
| 123 | 130 |
| 124 - (NSColor*)backgroundColor { | 131 - (NSColor*)backgroundColor { |
| 125 return backgroundColor_; | 132 return backgroundColor_; |
| 126 } | 133 } |
| 127 | 134 |
| 128 - (void)setBackgroundColor:(NSColor*)backgroundColor { | 135 - (void)setBackgroundColor:(NSColor*)backgroundColor { |
| 129 backgroundColor_.reset([backgroundColor retain]); | 136 backgroundColor_.reset([backgroundColor retain]); |
| 130 } | 137 } |
| 131 | 138 |
| 132 - (void)setArrowLocation:(info_bubble::BubbleArrowLocation)location { | 139 - (void)setArrowLocation:(info_bubble::BubbleArrowLocation)location { |
| 133 if (arrowLocation_ == location) | 140 if (arrowLocation_ == location) |
| 134 return; | 141 return; |
| 135 | 142 |
| 136 arrowLocation_ = location; | 143 arrowLocation_ = location; |
| 137 [self setNeedsDisplayInRect:[self bounds]]; | 144 [self setNeedsDisplayInRect:[self bounds]]; |
| 138 } | 145 } |
| 139 | 146 |
| 140 @end | 147 @end |
| OLD | NEW |