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

Unified Diff: chrome/browser/cocoa/extensions/browser_actions_controller.mm

Issue 525098: [Mac] Implements context menus for Page Actions. Introduces a reusable subcla... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Final changes before submit. Created 10 years, 11 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
Index: chrome/browser/cocoa/extensions/browser_actions_controller.mm
===================================================================
--- chrome/browser/cocoa/extensions/browser_actions_controller.mm (revision 36013)
+++ chrome/browser/cocoa/extensions/browser_actions_controller.mm (working copy)
@@ -9,6 +9,7 @@
#include "app/gfx/canvas_paint.h"
#include "base/sys_string_conversions.h"
#include "chrome/browser/browser.h"
+#include "chrome/browser/cocoa/extensions/extension_action_context_menu.h"
#include "chrome/browser/cocoa/extensions/extension_popup_controller.h"
#include "chrome/browser/cocoa/toolbar_button_cell.h"
#include "chrome/browser/extensions/extension_browser_event_router.h"
@@ -21,7 +22,7 @@
#include "chrome/common/notification_registrar.h"
#include "skia/ext/skia_utils_mac.h"
-static const CGFloat kBrowserActionBadgeOriginYOffset = -4;
+static const CGFloat kBrowserActionBadgeOriginYOffset = 5;
// Since the container is the maximum height of the toolbar, we have to move the
// buttons up by this amount in order to have them look vertically centered
@@ -37,12 +38,12 @@
NSString* const kBrowserActionsChangedNotification = @"BrowserActionsChanged";
-@interface BrowserActionBadgeView : NSView {
+@interface BrowserActionCell : ToolbarButtonCell {
@private
- // The current tab ID used when drawing the badge.
+ // The current tab ID used when drawing the cell.
int tabId_;
- // The action we're drawing the badge for. Weak.
+ // The action we're drawing the cell for. Weak.
ExtensionAction* extensionAction_;
}
@@ -51,17 +52,18 @@
@end
-@implementation BrowserActionBadgeView
+@implementation BrowserActionCell
-- (void)drawRect:(NSRect)dirtyRect {
+- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView*)controlView {
+ [super drawWithFrame:cellFrame inView:controlView];
+
// CanvasPaint draws its content to the current NSGraphicsContext in its
// destructor. If anything needs to be drawn afterwards, then enclose this
// in a nested block.
- NSRect badgeBounds = [self bounds];
- badgeBounds.origin.y += kBrowserActionBadgeOriginYOffset;
- gfx::CanvasPaint canvas(badgeBounds, false);
+ cellFrame.origin.y += kBrowserActionBadgeOriginYOffset;
+ gfx::CanvasPaint canvas(cellFrame, false);
canvas.set_composite_alpha(true);
- gfx::Rect boundingRect(NSRectToCGRect(badgeBounds));
+ gfx::Rect boundingRect(NSRectToCGRect(cellFrame));
extensionAction_->PaintBadge(&canvas, boundingRect, tabId_);
}
@@ -80,8 +82,6 @@
scoped_nsobject<NSImage> tabSpecificIcon_;
- scoped_nsobject<NSView> badgeView_;
-
// The extension for this button. Weak.
Extension* extension_;
@@ -162,6 +162,10 @@
@implementation BrowserActionButton
++ (Class)cellClass {
+ return [BrowserActionCell class];
+}
+
- (id)initWithExtension:(Extension*)extension
controller:(BrowserActionsController*)controller
xOffset:(int)xOffset {
@@ -170,13 +174,16 @@
kBrowserActionWidth,
kBrowserActionHeight);
if ((self = [super initWithFrame:frame])) {
- ToolbarButtonCell* cell = [[[ToolbarButtonCell alloc] init] autorelease];
+ BrowserActionCell* cell = [[[BrowserActionCell alloc] init] autorelease];
// [NSButton setCell:] warns to NOT use setCell: other than in the
// initializer of a control. However, we are using a basic
// NSButton whose initializer does not take an NSCell as an
// object. To honor the assumed semantics, we do nothing with
// NSButton between alloc/init and setCell:.
[self setCell:cell];
+ [cell setTabId:[controller currentTabId]];
+ [cell setExtensionAction:extension->browser_action()];
+
[self setTitle:@""];
[self setButtonType:NSMomentaryChangeButton];
[self setShowsBorderOnlyWhileMouseInside:YES];
@@ -184,16 +191,13 @@
[self setTarget:controller];
[self setAction:@selector(browserActionClicked:)];
+ [self setMenu:[[[ExtensionActionContextMenu alloc]
+ initWithExtension:extension] autorelease]];
+
extension_ = extension;
controller_ = controller;
imageLoadingBridge_.reset(new ExtensionImageTrackerBridge(self, extension));
- NSRect badgeFrame = [self bounds];
- badgeView_.reset([[BrowserActionBadgeView alloc] initWithFrame:badgeFrame]);
- [badgeView_ setTabId:[controller currentTabId]];
- [badgeView_ setExtensionAction:extension->browser_action()];
- [self addSubview:badgeView_];
-
[self updateState];
}
@@ -228,7 +232,7 @@
[self setImage:defaultIcon_];
}
- [badgeView_ setTabId:tabId];
+ [[self cell] setTabId:tabId];
[self setNeedsDisplay:YES];
}

Powered by Google App Engine
This is Rietveld 408576698