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

Unified Diff: chrome/browser/views/location_bar/location_bar_view.cc

Issue 2721009: Fix up the Windows omnibox after the recent endcap removal. This fixes most ... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 6 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
« no previous file with comments | « chrome/browser/views/location_bar/location_bar_view.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/views/location_bar/location_bar_view.cc
===================================================================
--- chrome/browser/views/location_bar/location_bar_view.cc (revision 49713)
+++ chrome/browser/views/location_bar/location_bar_view.cc (working copy)
@@ -28,6 +28,7 @@
#include "chrome/browser/views/location_bar/star_view.h"
#include "gfx/canvas.h"
#include "gfx/color_utils.h"
+#include "gfx/skia_util.h"
#include "grit/theme_resources.h"
#include "views/drag_utils.h"
@@ -39,16 +40,22 @@
// static
const int LocationBarView::kVertMargin = 2;
+const int LocationBarView::kEdgeThickness = 2;
+const int LocationBarView::kItemPadding = 3;
-// Padding between items in the location bar.
-static const int kViewPadding = 3;
+// Convenience: Total space at the edges of the bar.
+const int kEdgePadding =
+ LocationBarView::kEdgeThickness + LocationBarView::kItemPadding;
// Padding before the start of a bubble.
-static const int kBubblePadding = kViewPadding - 1;
+static const int kBubblePadding = kEdgePadding - 1;
// Padding between the location icon and the edit, if they're adjacent.
-static const int kLocationIconEditPadding = kViewPadding - 1;
+static const int kLocationIconEditPadding = LocationBarView::kItemPadding - 1;
+// Padding after the star.
+static const int kStarPadding = kEdgePadding + 1;
+
static const int kEVBubbleBackgroundImages[] = {
IDR_OMNIBOX_EV_BUBBLE_BACKGROUND_L,
IDR_OMNIBOX_EV_BUBBLE_BACKGROUND_C,
@@ -61,10 +68,12 @@
IDR_LOCATION_BAR_SELECTED_KEYWORD_BACKGROUND_R,
};
-static const SkBitmap* kBackground = NULL;
+static const int kNormalModeBackgroundImages[] = {
+ IDR_LOCATIONBG_L,
+ IDR_LOCATIONBG_C,
+ IDR_LOCATIONBG_R,
+};
-static const SkBitmap* kPopupBackground = NULL;
-
// LocationBarView -----------------------------------------------------------
LocationBarView::LocationBarView(Profile* profile,
@@ -90,11 +99,8 @@
SetID(VIEW_ID_LOCATION_BAR);
SetFocusable(true);
- if (!kBackground) {
- ResourceBundle &rb = ResourceBundle::GetSharedInstance();
- kBackground = rb.GetBitmapNamed(IDR_LOCATIONBG);
- kPopupBackground = rb.GetBitmapNamed(IDR_LOCATIONBG_POPUPMODE_CENTER);
- }
+ if (mode_ == NORMAL)
+ painter_.reset(new views::HorizontalPainter(kNormalModeBackgroundImages));
}
LocationBarView::~LocationBarView() {
@@ -358,15 +364,15 @@
}
gfx::Size LocationBarView::GetPreferredSize() {
- return gfx::Size(0,
- (mode_ == POPUP ? kPopupBackground : kBackground)->height());
+ return gfx::Size(0, GetThemeProvider()->GetBitmapNamed(mode_ == POPUP ?
+ IDR_LOCATIONBG_POPUPMODE_CENTER : IDR_LOCATIONBG_C)->height());
}
void LocationBarView::Layout() {
if (!location_entry_.get())
return;
- int entry_width = width() - kViewPadding;
+ int entry_width = width() - (star_view_ ? kStarPadding : kEdgePadding);
// |location_icon_view_| is visible except when |ev_bubble_view_| or
// |selected_keyword_view_| are visible.
@@ -378,7 +384,7 @@
const bool is_keyword_hint(location_entry_->model()->is_keyword_hint());
const bool show_selected_keyword = !keyword.empty() && !is_keyword_hint;
if (show_selected_keyword) {
- entry_width -= kViewPadding; // Assume the keyword might be hidden.
+ entry_width -= kEdgePadding; // Assume the keyword might be hidden.
} else if (model_->GetSecurityLevel() == ToolbarModel::EV_SECURE) {
ev_bubble_view_->SetVisible(true);
ev_bubble_view_->SetLabel(model_->GetEVCertName());
@@ -388,20 +394,20 @@
location_icon_view_->SetVisible(true);
location_icon_width = location_icon_view_->GetPreferredSize().width();
entry_width -=
- kViewPadding + location_icon_width + kLocationIconEditPadding;
+ kEdgePadding + location_icon_width + kLocationIconEditPadding;
}
if (star_view_)
- entry_width -= star_view_->GetPreferredSize().width() + kViewPadding;
+ entry_width -= star_view_->GetPreferredSize().width() + kItemPadding;
for (PageActionViews::const_iterator i(page_action_views_.begin());
i != page_action_views_.end(); ++i) {
if ((*i)->IsVisible())
- entry_width -= (*i)->GetPreferredSize().width() + kViewPadding;
+ entry_width -= (*i)->GetPreferredSize().width() + kItemPadding;
}
for (ContentSettingViews::const_iterator i(content_setting_views_.begin());
i != content_setting_views_.end(); ++i) {
if ((*i)->IsVisible())
- entry_width -= (*i)->GetPreferredSize().width() + kViewPadding;
+ entry_width -= (*i)->GetPreferredSize().width() + kItemPadding;
}
// Size the EV bubble. We do this after taking the star/page actions/content
@@ -412,10 +418,10 @@
static const int kMinElidedBubbleWidth = 150;
static const double kMaxBubbleFraction = 0.5;
ev_bubble_width = std::min(ev_bubble_width, std::max(kMinElidedBubbleWidth,
- static_cast<int>((entry_width - kBubblePadding - kViewPadding) *
+ static_cast<int>((entry_width - kBubblePadding - kItemPadding) *
kMaxBubbleFraction)));
- entry_width -= kBubblePadding + ev_bubble_width + kViewPadding;
+ entry_width -= kBubblePadding + ev_bubble_width + kItemPadding;
}
#if defined(OS_WIN)
@@ -449,12 +455,15 @@
int location_height = std::max(height() - location_y - kVertMargin, 0);
// Lay out items to the right of the edit field.
- int offset = width() - kViewPadding;
+ int offset = width();
if (star_view_) {
+ offset -= kStarPadding;
int star_width = star_view_->GetPreferredSize().width();
offset -= star_width;
star_view_->SetBounds(offset, location_y, star_width, location_height);
- offset -= kViewPadding;
+ offset -= kItemPadding;
+ } else {
+ offset -= kEdgePadding;
}
for (PageActionViews::const_iterator i(page_action_views_.begin());
@@ -463,7 +472,7 @@
int page_action_width = (*i)->GetPreferredSize().width();
offset -= page_action_width;
(*i)->SetBounds(offset, location_y, page_action_width, location_height);
- offset -= kViewPadding;
+ offset -= kItemPadding;
}
}
// We use a reverse_iterator here because we're laying out the views from
@@ -476,21 +485,21 @@
offset -= content_blocked_width;
(*i)->SetBounds(offset, location_y, content_blocked_width,
location_height);
- offset -= kViewPadding;
+ offset -= kItemPadding;
}
}
// Now lay out items to the left of the edit field.
if (location_icon_view_->IsVisible()) {
- location_icon_view_->SetBounds(kViewPadding, location_y,
+ location_icon_view_->SetBounds(kEdgePadding, location_y,
location_icon_width, location_height);
offset = location_icon_view_->bounds().right() + kLocationIconEditPadding;
} else if (ev_bubble_view_->IsVisible()) {
ev_bubble_view_->SetBounds(kBubblePadding, location_y, ev_bubble_width,
location_height);
- offset = ev_bubble_view_->bounds().right() + kViewPadding;
+ offset = ev_bubble_view_->bounds().right() + kItemPadding;
} else {
- offset = show_selected_keyword ? kBubblePadding : kViewPadding;
+ offset = show_selected_keyword ? kBubblePadding : kEdgePadding;
}
// Now lay out the edit field and views that autocollapse to give it more
@@ -500,7 +509,7 @@
LayoutView(true, selected_keyword_view_, available_width, &location_bounds);
if (!selected_keyword_view_->IsVisible()) {
location_bounds.set_x(
- location_bounds.x() + kViewPadding - kBubblePadding);
+ location_bounds.x() + kEdgePadding - kBubblePadding);
}
} else if (show_keyword_hint) {
LayoutView(false, keyword_hint_view_, available_width, &location_bounds);
@@ -511,21 +520,41 @@
void LocationBarView::Paint(gfx::Canvas* canvas) {
View::Paint(canvas);
+
+ if (painter_.get()) {
+ painter_->Paint(width(), height(), canvas);
+ } else if (mode_ == POPUP) {
+ canvas->TileImageInt(*GetThemeProvider()->GetBitmapNamed(
+ IDR_LOCATIONBG_POPUPMODE_CENTER), 0, 0, 0, 0, width(), height());
+ }
// When used in the app launcher, don't draw a border, the LocationBarView has
// its own views::Border.
- if (mode_ != APP_LAUNCHER) {
- const SkBitmap* background =
- mode_ == POPUP ?
- kPopupBackground :
- GetThemeProvider()->GetBitmapNamed(IDR_LOCATIONBG);
- canvas->TileImageInt(*background, 0, 0, 0, 0, width(), height());
+ // Draw the background color so that the graphical elements at the edges
+ // appear over the correct color. (The edit draws its own background, so this
+ // isn't important for that.)
+ // TODO(pkasting): We need images that are transparent in the middle, so we
+ // can draw the border images over the background color instead of the
+ // reverse; this antialiases better (see comments in
+ // AutocompletePopupContentsView::Paint()).
+ gfx::Rect bounds(GetLocalBounds(false));
+ bounds.Inset(0, TopMargin(), 0, kVertMargin);
+ SkColor color(GetColor(ToolbarModel::NONE, BACKGROUND));
+ if (mode_ == NORMAL) {
+ SkPaint paint;
+ paint.setColor(color);
+ paint.setStyle(SkPaint::kFill_Style);
+ paint.setAntiAlias(true);
+ // The round corners of the omnibox match the round corners of the dropdown
+ // below, and all our other bubbles.
+ static const SkScalar radius(
sky 2010/06/14 20:20:51 Is it really worth making this static?
Peter Kasting 2010/06/14 20:22:16 Oops, I didn't mean to do that.
+ SkIntToScalar(BubbleBorder::GetCornerRadius()));
+ bounds.Inset(kEdgeThickness, 0);
+ canvas->drawRoundRect(gfx::RectToSkRect(bounds), radius, radius, paint);
+ } else {
+ canvas->FillRectInt(color, bounds.x(), bounds.y(), bounds.width(),
+ bounds.height());
}
- gfx::Rect bounds = GetLocalBounds(false);
- int top_margin = TopMargin();
- canvas->FillRectInt(GetColor(ToolbarModel::NONE, BACKGROUND), bounds.x(),
- top_margin, bounds.width(),
- std::max(height() - top_margin - kVertMargin, 0));
}
void LocationBarView::VisibleBoundsInRootChanged() {
@@ -665,7 +694,7 @@
}
bool LocationBarView::UsePref(int pref_width, int available_width) {
- return (pref_width + kViewPadding <= available_width);
+ return (pref_width + kItemPadding <= available_width);
}
void LocationBarView::LayoutView(bool leading,
@@ -676,19 +705,19 @@
gfx::Size view_size = view->GetPreferredSize();
if (!UsePref(view_size.width(), available_width))
view_size = view->GetMinimumSize();
- if (view_size.width() + kViewPadding >= bounds->width()) {
+ if (view_size.width() + kItemPadding >= bounds->width()) {
view->SetVisible(false);
return;
}
if (leading) {
view->SetBounds(bounds->x(), bounds->y(), view_size.width(),
bounds->height());
- bounds->Offset(view_size.width() + kViewPadding, 0);
+ bounds->Offset(view_size.width() + kItemPadding, 0);
} else {
view->SetBounds(bounds->right() - view_size.width(), bounds->y(),
view_size.width(), bounds->height());
}
- bounds->set_width(bounds->width() - view_size.width() - kViewPadding);
+ bounds->set_width(bounds->width() - view_size.width() - kItemPadding);
view->SetVisible(true);
}
« no previous file with comments | « chrome/browser/views/location_bar/location_bar_view.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698