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

Side by Side Diff: chrome/browser/ui/cocoa/extensions/browser_action_button.mm

Issue 703443002: Move more extension action cocoa logic into the platform delegate (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@dc_toolbar_abstract_extension_action
Patch Set: Created 6 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 unified diff | Download patch
OLDNEW
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698