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

Unified Diff: chrome/browser/cocoa/blocked_popup_container_controller.mm

Issue 196043: Pretty-up the blocked popup view by sharing code from the status bubble. Bloc... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 11 years, 3 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/blocked_popup_container_controller.mm
===================================================================
--- chrome/browser/cocoa/blocked_popup_container_controller.mm (revision 25624)
+++ chrome/browser/cocoa/blocked_popup_container_controller.mm (working copy)
@@ -6,13 +6,12 @@
#include "app/l10n_util.h"
#include "base/sys_string_conversions.h"
+#import "chrome/browser/cocoa/bubble_view.h"
#include "chrome/browser/cocoa/nsimage_cache.h"
#include "chrome/browser/tab_contents/tab_contents.h"
#include "chrome/browser/tab_contents/tab_contents_view.h"
#include "grit/generated_resources.h"
-#import "chrome/browser/cocoa/background_gradient_view.h"
-
// A C++ bridge class that manages the interaction between the C++ interface
// and the Objective-C view controller that implements the popup blocker.
class BlockedPopupContainerViewBridge : public BlockedPopupContainerView {
@@ -50,6 +49,7 @@
}
- (void)dealloc {
+ [closeButton_ removeTrackingArea:closeTrackingArea_.get()];
[view_ removeFromSuperview];
[[NSNotificationCenter defaultCenter] removeObserver:self];
[super dealloc];
@@ -68,10 +68,14 @@
static const float kCloseBoxPaddingY = 2.0;
static const float kLabelPaddingX = 5.0;
+ NSWindow* window = [[self containingView] window];
+
// Create it below the parent's bottom edge so we can animate it into place.
NSRect startFrame = NSMakeRect(0.0, -kHeight, kWidth, kHeight);
- view_.reset([[BackgroundGradientView alloc] initWithFrame:startFrame]);
+ view_.reset([[BubbleView alloc] initWithFrame:startFrame
+ themeProvider:window]);
[view_ setAutoresizingMask:NSViewMinXMargin | NSViewMaxYMargin];
+ [view_ setCornerFlags:kRoundedTopLeftCorner | kRoundedTopRightCorner];
// Create the text label and position it. We'll resize it later when the
// label gets updated. The view owns the label, we only hold a weak reference.
@@ -88,8 +92,8 @@
[popupButton_ setPreferredEdge:NSMaxYEdge];
// TODO(pinkerton): no matter what, the arrows always draw in the middle
// of the button. We can turn off the arrows entirely, but then will the
- // user ever know to click it? Leave them on for now.
- //[[popupButton_ cell] setArrowPosition:NSPopUpNoArrow];
+ // user ever know to click it?
+ [[popupButton_ cell] setArrowPosition:NSPopUpNoArrow];
[[popupButton_ cell] setAltersStateOfSelectedItem:NO];
// If we don't add this, no title will ever display.
[popupButton_ addItemWithTitle:@"placeholder"];
@@ -108,14 +112,27 @@
kCloseBoxPaddingY,
kCloseBoxSize,
kCloseBoxSize);
- NSButton* close = [[[NSButton alloc] initWithFrame:closeFrame] autorelease];
- [close setAutoresizingMask:NSViewMinXMargin];
- [close setImage:nsimage_cache::ImageNamed(@"close_bar.pdf")];
- [close setAlternateImage:nsimage_cache::ImageNamed(@"close_bar_p.pdf")];
- [close setBordered:NO];
- [close setTarget:self];
- [close setAction:@selector(closePopup:)];
- [view_ addSubview:close];
+ closeButton_.reset([[NSButton alloc] initWithFrame:closeFrame]);
+ [closeButton_ setAutoresizingMask:NSViewMinXMargin];
+ [closeButton_ setButtonType:NSMomentaryChangeButton];
+ [closeButton_ setImage:nsimage_cache::ImageNamed(@"close_bar.pdf")];
+ [closeButton_ setAlternateImage:nsimage_cache::ImageNamed(@"close_bar_p.pdf")];
rohitrao (ping after 24h) 2009/09/08 19:25:21 Line too long.
pink (ping after 24hrs) 2009/09/08 19:50:17 Done.
+ [closeButton_ setBordered:NO];
+ [closeButton_ setTarget:self];
+ [closeButton_ setAction:@selector(closePopup:)];
+ [view_ addSubview:closeButton_];
+
+ // Set up the tracking rect for the close button mouseover. Add it
+ // to the |closeButton_| view, but we'll handle the message ourself.
+ // The mouseover is always enabled, because the close button works
+ // regardless of key/main/active status.
+ closeTrackingArea_.reset(
+ [[NSTrackingArea alloc] initWithRect:[closeButton_ bounds]
+ options:NSTrackingMouseEnteredAndExited |
+ NSTrackingActiveAlways
+ owner:self
+ userInfo:nil]);
+ [closeButton_ addTrackingArea:closeTrackingArea_.get()];
}
// Returns the C++ brige object.
@@ -127,7 +144,10 @@
// so that it stays around as the RWHVMac is created/destroyed during
// navigation.
- (NSView*)containingView {
- return container_->GetConstrainingContents(NULL)->view()->GetNativeView();
+ NSView* view = nil;
+ if (container_)
+ view = container_->GetConstrainingContents(NULL)->view()->GetNativeView();
+ return view;
}
- (void)show {
@@ -185,7 +205,7 @@
l10n_util::GetStringUTF16(IDS_POPUPS_UNBLOCKED));
}
[self resizeWithLabel:label];
- [popupButton_ setTitle:label];
+ [view_ setContent:label];
}
// Called when the user selects an item from the popup menu. The tag, if below
@@ -297,6 +317,18 @@
container_ = container;
}
+// Called when the mouse enters the tracking rect for the close box.
+- (void)mouseEntered:(NSEvent *)theEvent {
+ if ([theEvent trackingArea] == closeTrackingArea_)
+ [closeButton_ setImage:nsimage_cache::ImageNamed(@"close_bar_h.pdf")];
+}
+
+// Called when the mouse exits the tracking rect for the close box.
+- (void)mouseExited:(NSEvent *)theEvent {
+ if ([theEvent trackingArea] == closeTrackingArea_)
+ [closeButton_ setImage:nsimage_cache::ImageNamed(@"close_bar.pdf")];
+}
+
@end
//---------------------------------------------------------------------------

Powered by Google App Engine
This is Rietveld 408576698