| 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/extensions/browser_action_button.h" | 5 #import "chrome/browser/ui/cocoa/extensions/browser_action_button.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <cmath> | 8 #include <cmath> |
| 9 | 9 |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 22 matching lines...) Expand all Loading... |
| 33 static const CGFloat kMinimumDragDistance = 5; | 33 static const CGFloat kMinimumDragDistance = 5; |
| 34 | 34 |
| 35 // A class to bridge the ToolbarActionViewController and the | 35 // A class to bridge the ToolbarActionViewController and the |
| 36 // BrowserActionButton. | 36 // BrowserActionButton. |
| 37 class ToolbarActionViewDelegateBridge : public ToolbarActionViewDelegateCocoa { | 37 class ToolbarActionViewDelegateBridge : public ToolbarActionViewDelegateCocoa { |
| 38 public: | 38 public: |
| 39 ToolbarActionViewDelegateBridge(BrowserActionButton* owner, | 39 ToolbarActionViewDelegateBridge(BrowserActionButton* owner, |
| 40 BrowserActionsController* controller); | 40 BrowserActionsController* controller); |
| 41 ~ToolbarActionViewDelegateBridge(); | 41 ~ToolbarActionViewDelegateBridge(); |
| 42 | 42 |
| 43 ExtensionActionContextMenuController* menuController() { |
| 44 return menuController_; |
| 45 } |
| 46 |
| 43 private: | 47 private: |
| 44 // ToolbarActionViewDelegateCocoa: | 48 // ToolbarActionViewDelegateCocoa: |
| 45 ToolbarActionViewController* GetPreferredPopupViewController() override; | 49 ToolbarActionViewController* GetPreferredPopupViewController() override; |
| 46 content::WebContents* GetCurrentWebContents() const override; | 50 content::WebContents* GetCurrentWebContents() const override; |
| 47 void UpdateState() override; | 51 void UpdateState() override; |
| 48 NSPoint GetPopupPoint() override; | 52 NSPoint GetPopupPoint() override; |
| 53 void SetContextMenuController( |
| 54 ExtensionActionContextMenuController* menuController) override; |
| 49 | 55 |
| 50 // The owning button. Weak. | 56 // The owning button. Weak. |
| 51 BrowserActionButton* owner_; | 57 BrowserActionButton* owner_; |
| 52 | 58 |
| 53 // The BrowserActionsController that owns the button. Weak. | 59 // The BrowserActionsController that owns the button. Weak. |
| 54 BrowserActionsController* controller_; | 60 BrowserActionsController* controller_; |
| 55 | 61 |
| 62 // The context menu controller. Weak. |
| 63 ExtensionActionContextMenuController* menuController_; |
| 64 |
| 56 DISALLOW_COPY_AND_ASSIGN(ToolbarActionViewDelegateBridge); | 65 DISALLOW_COPY_AND_ASSIGN(ToolbarActionViewDelegateBridge); |
| 57 }; | 66 }; |
| 58 | 67 |
| 59 ToolbarActionViewDelegateBridge::ToolbarActionViewDelegateBridge( | 68 ToolbarActionViewDelegateBridge::ToolbarActionViewDelegateBridge( |
| 60 BrowserActionButton* owner, | 69 BrowserActionButton* owner, |
| 61 BrowserActionsController* controller) | 70 BrowserActionsController* controller) |
| 62 : owner_(owner), | 71 : owner_(owner), |
| 63 controller_(controller) { | 72 controller_(controller), |
| 73 menuController_(nil) { |
| 64 } | 74 } |
| 65 | 75 |
| 66 ToolbarActionViewDelegateBridge::~ToolbarActionViewDelegateBridge() { | 76 ToolbarActionViewDelegateBridge::~ToolbarActionViewDelegateBridge() { |
| 67 } | 77 } |
| 68 | 78 |
| 69 ToolbarActionViewController* | 79 ToolbarActionViewController* |
| 70 ToolbarActionViewDelegateBridge::GetPreferredPopupViewController() { | 80 ToolbarActionViewDelegateBridge::GetPreferredPopupViewController() { |
| 71 return [owner_ viewController]; | 81 return [owner_ viewController]; |
| 72 } | 82 } |
| 73 | 83 |
| 74 content::WebContents* ToolbarActionViewDelegateBridge::GetCurrentWebContents() | 84 content::WebContents* ToolbarActionViewDelegateBridge::GetCurrentWebContents() |
| 75 const { | 85 const { |
| 76 return [controller_ currentWebContents]; | 86 return [controller_ currentWebContents]; |
| 77 } | 87 } |
| 78 | 88 |
| 79 void ToolbarActionViewDelegateBridge::UpdateState() { | 89 void ToolbarActionViewDelegateBridge::UpdateState() { |
| 80 [owner_ updateState]; | 90 [owner_ updateState]; |
| 81 } | 91 } |
| 82 | 92 |
| 83 NSPoint ToolbarActionViewDelegateBridge::GetPopupPoint() { | 93 NSPoint ToolbarActionViewDelegateBridge::GetPopupPoint() { |
| 84 return [controller_ popupPointForId:[owner_ viewController]->GetId()]; | 94 return [controller_ popupPointForId:[owner_ viewController]->GetId()]; |
| 85 } | 95 } |
| 86 | 96 |
| 97 void ToolbarActionViewDelegateBridge::SetContextMenuController( |
| 98 ExtensionActionContextMenuController* menuController) { |
| 99 menuController_ = menuController; |
| 100 } |
| 101 |
| 87 @interface BrowserActionCell (Internals) | 102 @interface BrowserActionCell (Internals) |
| 88 - (void)drawBadgeWithinFrame:(NSRect)frame; | 103 - (void)drawBadgeWithinFrame:(NSRect)frame; |
| 89 @end | 104 @end |
| 90 | 105 |
| 91 @interface BrowserActionButton (Private) | 106 @interface BrowserActionButton (Private) |
| 92 - (void)endDrag; | 107 - (void)endDrag; |
| 93 @end | 108 @end |
| 94 | 109 |
| 95 @implementation BrowserActionButton | 110 @implementation BrowserActionButton |
| 96 | 111 |
| 97 @synthesize isBeingDragged = isBeingDragged_; | 112 @synthesize isBeingDragged = isBeingDragged_; |
| 98 | 113 |
| 99 + (Class)cellClass { | 114 + (Class)cellClass { |
| 100 return [BrowserActionCell class]; | 115 return [BrowserActionCell class]; |
| 101 } | 116 } |
| 102 | 117 |
| 103 - (id)initWithFrame:(NSRect)frame | 118 - (id)initWithFrame:(NSRect)frame |
| 104 viewController:(scoped_ptr<ToolbarActionViewController>)viewController | 119 viewController:(scoped_ptr<ToolbarActionViewController>)viewController |
| 105 controller:(BrowserActionsController*)controller | 120 controller:(BrowserActionsController*)controller { |
| 106 menuController:(ExtensionActionContextMenuController*)menuController { | |
| 107 if ((self = [super initWithFrame:frame])) { | 121 if ((self = [super initWithFrame:frame])) { |
| 108 BrowserActionCell* cell = [[[BrowserActionCell alloc] init] autorelease]; | 122 BrowserActionCell* cell = [[[BrowserActionCell alloc] init] autorelease]; |
| 109 // [NSButton setCell:] warns to NOT use setCell: other than in the | 123 // [NSButton setCell:] warns to NOT use setCell: other than in the |
| 110 // initializer of a control. However, we are using a basic | 124 // initializer of a control. However, we are using a basic |
| 111 // NSButton whose initializer does not take an NSCell as an | 125 // NSButton whose initializer does not take an NSCell as an |
| 112 // object. To honor the assumed semantics, we do nothing with | 126 // object. To honor the assumed semantics, we do nothing with |
| 113 // NSButton between alloc/init and setCell:. | 127 // NSButton between alloc/init and setCell:. |
| 114 [self setCell:cell]; | 128 [self setCell:cell]; |
| 115 | 129 |
| 116 browserActionsController_ = controller; | 130 browserActionsController_ = controller; |
| (...skipping 14 matching lines...) Expand all Loading... |
| 131 forButtonState:image_button_cell::kHoverState]; | 145 forButtonState:image_button_cell::kHoverState]; |
| 132 [cell setImageID:IDR_BROWSER_ACTION_P | 146 [cell setImageID:IDR_BROWSER_ACTION_P |
| 133 forButtonState:image_button_cell::kPressedState]; | 147 forButtonState:image_button_cell::kPressedState]; |
| 134 [cell setImageID:IDR_BROWSER_ACTION | 148 [cell setImageID:IDR_BROWSER_ACTION |
| 135 forButtonState:image_button_cell::kDisabledState]; | 149 forButtonState:image_button_cell::kDisabledState]; |
| 136 | 150 |
| 137 [self setTitle:@""]; | 151 [self setTitle:@""]; |
| 138 [self setButtonType:NSMomentaryChangeButton]; | 152 [self setButtonType:NSMomentaryChangeButton]; |
| 139 [self setShowsBorderOnlyWhileMouseInside:YES]; | 153 [self setShowsBorderOnlyWhileMouseInside:YES]; |
| 140 | 154 |
| 141 contextMenuController_.reset(menuController); | |
| 142 | |
| 143 base::scoped_nsobject<NSMenu> contextMenu( | 155 base::scoped_nsobject<NSMenu> contextMenu( |
| 144 [[NSMenu alloc] initWithTitle:@""]); | 156 [[NSMenu alloc] initWithTitle:@""]); |
| 145 [contextMenu setDelegate:self]; | 157 [contextMenu setDelegate:self]; |
| 146 [self setMenu:contextMenu]; | 158 [self setMenu:contextMenu]; |
| 147 | 159 |
| 148 moveAnimation_.reset([[NSViewAnimation alloc] init]); | 160 moveAnimation_.reset([[NSViewAnimation alloc] init]); |
| 149 [moveAnimation_ gtm_setDuration:kAnimationDuration | 161 [moveAnimation_ gtm_setDuration:kAnimationDuration |
| 150 eventMask:NSLeftMouseUpMask]; | 162 eventMask:NSLeftMouseUpMask]; |
| 151 [moveAnimation_ setAnimationBlockingMode:NSAnimationNonblocking]; | 163 [moveAnimation_ setAnimationBlockingMode:NSAnimationNonblocking]; |
| 152 | 164 |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 293 | 305 |
| 294 bounds.origin.y += kBrowserActionBadgeOriginYOffset; | 306 bounds.origin.y += kBrowserActionBadgeOriginYOffset; |
| 295 [[self cell] drawBadgeWithinFrame:bounds]; | 307 [[self cell] drawBadgeWithinFrame:bounds]; |
| 296 | 308 |
| 297 [image unlockFocus]; | 309 [image unlockFocus]; |
| 298 return image; | 310 return image; |
| 299 } | 311 } |
| 300 | 312 |
| 301 - (void)menuNeedsUpdate:(NSMenu*)menu { | 313 - (void)menuNeedsUpdate:(NSMenu*)menu { |
| 302 [menu removeAllItems]; | 314 [menu removeAllItems]; |
| 303 [contextMenuController_ populateMenu:menu]; | 315 // |menuController()| can be nil if we don't show context menus for the given |
| 316 // action. |
| 317 if (viewControllerDelegate_->menuController()) |
| 318 [viewControllerDelegate_->menuController() populateMenu:menu]; |
| 304 } | 319 } |
| 305 | 320 |
| 306 @end | 321 @end |
| 307 | 322 |
| 308 @implementation BrowserActionCell | 323 @implementation BrowserActionCell |
| 309 | 324 |
| 310 @synthesize browserActionsController = browserActionsController_; | 325 @synthesize browserActionsController = browserActionsController_; |
| 311 @synthesize viewController = viewController_; | 326 @synthesize viewController = viewController_; |
| 312 | 327 |
| 313 - (void)drawBadgeWithinFrame:(NSRect)frame | 328 - (void)drawBadgeWithinFrame:(NSRect)frame |
| (...skipping 22 matching lines...) Expand all Loading... |
| 336 fraction:enabled ? 1.0 : 0.4 | 351 fraction:enabled ? 1.0 : 0.4 |
| 337 respectFlipped:YES | 352 respectFlipped:YES |
| 338 hints:nil]; | 353 hints:nil]; |
| 339 | 354 |
| 340 cellFrame.origin.y += kBrowserActionBadgeOriginYOffset; | 355 cellFrame.origin.y += kBrowserActionBadgeOriginYOffset; |
| 341 [self drawBadgeWithinFrame:cellFrame | 356 [self drawBadgeWithinFrame:cellFrame |
| 342 webContents:webContents]; | 357 webContents:webContents]; |
| 343 } | 358 } |
| 344 | 359 |
| 345 @end | 360 @end |
| OLD | NEW |