summaryrefslogtreecommitdiffstats
path: root/chrome/browser/views/toolbar_view.cc
diff options
context:
space:
mode:
authorpkasting@chromium.org <pkasting@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-02-25 17:16:02 +0000
committerpkasting@chromium.org <pkasting@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-02-25 17:16:02 +0000
commit55af4046de847a9f423336d10ac4230c45ac2603 (patch)
treec55c8dfe66703fb2a5c0fe7cdb6352afedde84c0 /chrome/browser/views/toolbar_view.cc
parentd5c99b1735e08464682837ac5a61d985de2a7b3c (diff)
downloadchromium_src-55af4046de847a9f423336d10ac4230c45ac2603.zip
chromium_src-55af4046de847a9f423336d10ac4230c45ac2603.tar.gz
chromium_src-55af4046de847a9f423336d10ac4230c45ac2603.tar.bz2
Make non-glass popups match new mockup from Glen.
Unfortunately glass popups can't be made to match the mockup unless we want to completely reimplement Windows titlebar drawing, so I'm leaving them pretty much unchanged :( BUG=7569 Review URL: http://codereview.chromium.org/28072 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@10341 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/views/toolbar_view.cc')
-rw-r--r--chrome/browser/views/toolbar_view.cc61
1 files changed, 46 insertions, 15 deletions
diff --git a/chrome/browser/views/toolbar_view.cc b/chrome/browser/views/toolbar_view.cc
index bc2d778..56195b4 100644
--- a/chrome/browser/views/toolbar_view.cc
+++ b/chrome/browser/views/toolbar_view.cc
@@ -61,6 +61,12 @@ static const int kMenuButtonOffset = 3;
// Padding to the right of the location bar
static const int kPaddingRight = 2;
+static const int kPopupTopSpacingNonGlass = 3;
+static const int kPopupBottomSpacingNonGlass = 2;
+static const int kPopupBottomSpacingGlass = 1;
+
+static SkBitmap* kPopupBackgroundEdge = NULL;
+
BrowserToolbarView::BrowserToolbarView(Browser* browser)
: EncodingMenuControllerDelegate(browser),
model_(browser->toolbar_model()),
@@ -90,6 +96,11 @@ BrowserToolbarView::BrowserToolbarView(Browser* browser)
display_mode_ = DISPLAYMODE_NORMAL;
else
display_mode_ = DISPLAYMODE_LOCATION;
+
+ if (!kPopupBackgroundEdge) {
+ kPopupBackgroundEdge = ResourceBundle::GetSharedInstance().GetBitmapNamed(
+ IDR_LOCATIONBG_POPUPMODE_EDGE);
+ }
}
BrowserToolbarView::~BrowserToolbarView() {
@@ -259,8 +270,10 @@ void BrowserToolbarView::Layout() {
return;
if (!IsDisplayModeNormal()) {
- location_bar_->SetBounds(0, 0, width(),
- location_bar_->GetPreferredSize().height());
+ int edge_width = (browser_->window() && browser_->window()->IsMaximized()) ?
+ 0 : kPopupBackgroundEdge->width(); // See Paint().
+ location_bar_->SetBounds(edge_width, PopupTopSpacing(),
+ width() - (edge_width * 2), location_bar_->GetPreferredSize().height());
return;
}
@@ -320,6 +333,28 @@ void BrowserToolbarView::Layout() {
app_menu_width, child_height);
}
+void BrowserToolbarView::Paint(ChromeCanvas* canvas) {
+ View::Paint(canvas);
+
+ if (IsDisplayModeNormal())
+ return;
+
+ // In maximized mode, we don't draw the endcaps on the location bar, because
+ // when they're flush against the edge of the screen they just look glitchy.
+ if (!browser_->window() || !browser_->window()->IsMaximized()) {
+ int top_spacing = PopupTopSpacing();
+ canvas->DrawBitmapInt(*kPopupBackgroundEdge, 0, top_spacing);
+ canvas->DrawBitmapInt(*kPopupBackgroundEdge,
+ width() - kPopupBackgroundEdge->width(), top_spacing);
+ }
+
+ // For glass, we need to draw a black line below the location bar to separate
+ // it from the content area. For non-glass, the NonClientView draws the
+ // toolbar background below the location bar for us.
+ if (win_util::ShouldUseVistaFrame())
+ canvas->FillRectInt(SK_ColorBLACK, 0, height() - 1, width(), 1);
+}
+
void BrowserToolbarView::DidGainFocus() {
// Check to see if MSAA focus should be restored to previously focused button,
// and if button is an enabled, visibled child of toolbar.
@@ -459,19 +494,10 @@ gfx::Size BrowserToolbarView::GetPreferredSize() {
return gfx::Size(0, normal_background.height());
}
- // With the non-Vista frame, we'll draw a client edge below the toolbar for
- // non-maximized popups.
- // Note: We make sure to return the same value in the "no browser window" case
- // as the "not maximized" case, so that when a popup is opened at a particular
- // requested size, we'll report the same preferred size during the initial
- // window size calculation (when there isn't yet a browser window) as when
- // we're actually laying things out after setting up the browser window. This
- // prevents the content area from being off by |kClientEdgeThickness| px.
- int client_edge_height = win_util::ShouldUseVistaFrame() ||
- (browser_->window() && browser_->window()->IsMaximized()) ?
- 0 : views::NonClientView::kClientEdgeThickness;
- return gfx::Size(0,
- location_bar_->GetPreferredSize().height() + client_edge_height);
+ int vertical_spacing = PopupTopSpacing() + (win_util::ShouldUseVistaFrame() ?
+ kPopupBottomSpacingGlass : kPopupBottomSpacingNonGlass);
+ return gfx::Size(0, location_bar_->GetPreferredSize().height() +
+ vertical_spacing);
}
void BrowserToolbarView::RunPageMenu(const CPoint& pt, HWND hwnd) {
@@ -772,6 +798,11 @@ void BrowserToolbarView::ButtonPressed(views::BaseButton* sender) {
browser_->ExecuteCommand(sender->GetTag());
}
+// static
+int BrowserToolbarView::PopupTopSpacing() {
+ return win_util::ShouldUseVistaFrame() ? 0 : kPopupTopSpacingNonGlass;
+}
+
void BrowserToolbarView::Observe(NotificationType type,
const NotificationSource& source,
const NotificationDetails& details) {