Index: chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc |
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc b/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc |
index 9bc3d7f2863f4730678d9d0f3902003a38aeb946..7f3c05b0a37c6ec475120e7af6b90cd28d347cbb 100644 |
--- a/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc |
+++ b/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc |
@@ -783,7 +783,109 @@ gfx::Size BookmarkBarView::GetMinimumSize() const { |
} |
void BookmarkBarView::Layout() { |
- LayoutItems(); |
+ int x = kLeftMargin; |
+ int top_margin = IsDetached() ? kDetachedTopMargin : 0; |
+ int y = top_margin; |
+ int width = View::width() - kRightMargin - kLeftMargin; |
+ int height = chrome::kBookmarkBarHeight - kBottomMargin; |
+ int separator_margin = kSeparatorMargin; |
+ |
+ if (IsDetached()) { |
+ double current_state = 1 - size_animation_->GetCurrentValue(); |
+ x += static_cast<int>(kNewtabHorizontalPadding * current_state); |
+ y += (View::height() - chrome::kBookmarkBarHeight) / 2; |
+ width -= static_cast<int>(kNewtabHorizontalPadding * current_state); |
+ separator_margin -= static_cast<int>(kSeparatorMargin * current_state); |
+ } else { |
+ // For the attached appearance, pin the content to the bottom of the bar |
+ // when animating in/out, as shrinking its height instead looks weird. This |
+ // also matches how we layout infobars. |
+ y += View::height() - chrome::kBookmarkBarHeight; |
+ } |
+ |
+ gfx::Size other_bookmarked_pref = other_bookmarked_button_->visible() ? |
+ other_bookmarked_button_->GetPreferredSize() : gfx::Size(); |
+ gfx::Size overflow_pref = overflow_button_->GetPreferredSize(); |
+ gfx::Size bookmarks_separator_pref = |
+ bookmarks_separator_view_->GetPreferredSize(); |
+ gfx::Size apps_page_shortcut_pref = apps_page_shortcut_->visible() ? |
+ apps_page_shortcut_->GetPreferredSize() : gfx::Size(); |
+ |
+ int max_x = width - overflow_pref.width() - kButtonPadding - |
+ bookmarks_separator_pref.width(); |
+ if (other_bookmarked_button_->visible()) |
+ max_x -= other_bookmarked_pref.width() + kButtonPadding; |
+ |
+ // Next, layout out the buttons. Any buttons that are placed beyond the |
+ // visible region are made invisible. |
+ |
+ // Start with the apps page shortcut button. |
+ if (apps_page_shortcut_->visible()) { |
+ apps_page_shortcut_->SetBounds(x, y, apps_page_shortcut_pref.width(), |
+ height); |
+ x += apps_page_shortcut_pref.width() + kButtonPadding; |
+ } |
+ |
+ // Then comes the managed bookmarks folder, if visible. |
+ if (managed_bookmarks_button_->visible()) { |
+ gfx::Size managed_bookmarks_pref = managed_bookmarks_button_->visible() ? |
+ managed_bookmarks_button_->GetPreferredSize() : gfx::Size(); |
+ managed_bookmarks_button_->SetBounds(x, y, managed_bookmarks_pref.width(), |
+ height); |
+ x += managed_bookmarks_pref.width() + kButtonPadding; |
+ } |
+ |
+ // Then go through the bookmark buttons. |
+ if (GetBookmarkButtonCount() == 0 && model_ && model_->loaded()) { |
+ gfx::Size pref = instructions_->GetPreferredSize(); |
+ instructions_->SetBounds( |
+ x + kInstructionsPadding, y, |
+ std::min(static_cast<int>(pref.width()), |
+ max_x - x), |
+ height); |
+ instructions_->SetVisible(true); |
+ } else { |
+ instructions_->SetVisible(false); |
+ |
+ for (int i = 0; i < GetBookmarkButtonCount(); ++i) { |
+ views::View* child = child_at(i); |
+ gfx::Size pref = child->GetPreferredSize(); |
+ int next_x = x + pref.width() + kButtonPadding; |
+ child->SetVisible(next_x < max_x); |
+ child->SetBounds(x, y, pref.width(), height); |
+ x = next_x; |
+ } |
+ } |
+ |
+ // Layout the right side of the bar. |
+ const bool all_visible = (GetBookmarkButtonCount() == 0 || |
+ child_at(GetBookmarkButtonCount() - 1)->visible()); |
+ |
+ // Layout the right side buttons. |
+ x = max_x + kButtonPadding; |
+ |
+ // The overflow button. |
+ overflow_button_->SetBounds(x, y, overflow_pref.width(), height); |
+ overflow_button_->SetVisible(!all_visible); |
+ x += overflow_pref.width(); |
+ |
+ // Separator. |
+ if (bookmarks_separator_view_->visible()) { |
+ bookmarks_separator_view_->SetBounds(x, |
+ y - top_margin, |
+ bookmarks_separator_pref.width(), |
+ height + top_margin + kBottomMargin - |
+ separator_margin); |
+ |
+ x += bookmarks_separator_pref.width(); |
+ } |
+ |
+ // The other bookmarks button. |
+ if (other_bookmarked_button_->visible()) { |
+ other_bookmarked_button_->SetBounds(x, y, other_bookmarked_pref.width(), |
+ height); |
+ x += other_bookmarked_pref.width() + kButtonPadding; |
+ } |
} |
void BookmarkBarView::ViewHierarchyChanged( |
@@ -1861,115 +1963,6 @@ void BookmarkBarView::UpdateBookmarksSeparatorVisibility() { |
other_bookmarked_button_->visible()); |
} |
-void BookmarkBarView::LayoutItems() { |
- if (!parent()) |
- return; |
- |
- int x = kLeftMargin; |
- int top_margin = IsDetached() ? kDetachedTopMargin : 0; |
- int y = top_margin; |
- int width = View::width() - kRightMargin - kLeftMargin; |
- int height = chrome::kBookmarkBarHeight - kBottomMargin; |
- int separator_margin = kSeparatorMargin; |
- |
- if (IsDetached()) { |
- double current_state = 1 - size_animation_->GetCurrentValue(); |
- x += static_cast<int>(kNewtabHorizontalPadding * current_state); |
- y += (View::height() - chrome::kBookmarkBarHeight) / 2; |
- width -= static_cast<int>(kNewtabHorizontalPadding * current_state); |
- separator_margin -= static_cast<int>(kSeparatorMargin * current_state); |
- } else { |
- // For the attached appearance, pin the content to the bottom of the bar |
- // when animating in/out, as shrinking its height instead looks weird. This |
- // also matches how we layout infobars. |
- y += View::height() - chrome::kBookmarkBarHeight; |
- } |
- |
- gfx::Size other_bookmarked_pref = other_bookmarked_button_->visible() ? |
- other_bookmarked_button_->GetPreferredSize() : gfx::Size(); |
- gfx::Size overflow_pref = overflow_button_->GetPreferredSize(); |
- gfx::Size bookmarks_separator_pref = |
- bookmarks_separator_view_->GetPreferredSize(); |
- gfx::Size apps_page_shortcut_pref = apps_page_shortcut_->visible() ? |
- apps_page_shortcut_->GetPreferredSize() : gfx::Size(); |
- |
- int max_x = width - overflow_pref.width() - kButtonPadding - |
- bookmarks_separator_pref.width(); |
- if (other_bookmarked_button_->visible()) |
- max_x -= other_bookmarked_pref.width() + kButtonPadding; |
- |
- // Next, layout out the buttons. Any buttons that are placed beyond the |
- // visible region are made invisible. |
- |
- // Start with the apps page shortcut button. |
- if (apps_page_shortcut_->visible()) { |
- apps_page_shortcut_->SetBounds(x, y, apps_page_shortcut_pref.width(), |
- height); |
- x += apps_page_shortcut_pref.width() + kButtonPadding; |
- } |
- |
- // Then comes the managed bookmarks folder, if visible. |
- if (managed_bookmarks_button_->visible()) { |
- gfx::Size managed_bookmarks_pref = managed_bookmarks_button_->visible() ? |
- managed_bookmarks_button_->GetPreferredSize() : gfx::Size(); |
- managed_bookmarks_button_->SetBounds(x, y, managed_bookmarks_pref.width(), |
- height); |
- x += managed_bookmarks_pref.width() + kButtonPadding; |
- } |
- |
- // Then go through the bookmark buttons. |
- if (GetBookmarkButtonCount() == 0 && model_ && model_->loaded()) { |
- gfx::Size pref = instructions_->GetPreferredSize(); |
- instructions_->SetBounds( |
- x + kInstructionsPadding, y, |
- std::min(static_cast<int>(pref.width()), |
- max_x - x), |
- height); |
- instructions_->SetVisible(true); |
- } else { |
- instructions_->SetVisible(false); |
- |
- for (int i = 0; i < GetBookmarkButtonCount(); ++i) { |
- views::View* child = child_at(i); |
- gfx::Size pref = child->GetPreferredSize(); |
- int next_x = x + pref.width() + kButtonPadding; |
- child->SetVisible(next_x < max_x); |
- child->SetBounds(x, y, pref.width(), height); |
- x = next_x; |
- } |
- } |
- |
- // Layout the right side of the bar. |
- const bool all_visible = (GetBookmarkButtonCount() == 0 || |
- child_at(GetBookmarkButtonCount() - 1)->visible()); |
- |
- // Layout the right side buttons. |
- x = max_x + kButtonPadding; |
- |
- // The overflow button. |
- overflow_button_->SetBounds(x, y, overflow_pref.width(), height); |
- overflow_button_->SetVisible(!all_visible); |
- x += overflow_pref.width(); |
- |
- // Separator. |
- if (bookmarks_separator_view_->visible()) { |
- bookmarks_separator_view_->SetBounds(x, |
- y - top_margin, |
- bookmarks_separator_pref.width(), |
- height + top_margin + kBottomMargin - |
- separator_margin); |
- |
- x += bookmarks_separator_pref.width(); |
- } |
- |
- // The other bookmarks button. |
- if (other_bookmarked_button_->visible()) { |
- other_bookmarked_button_->SetBounds(x, y, other_bookmarked_pref.width(), |
- height); |
- x += other_bookmarked_pref.width() + kButtonPadding; |
- } |
-} |
- |
void BookmarkBarView::OnAppsPageShortcutVisibilityPrefChanged() { |
DCHECK(apps_page_shortcut_); |
// Only perform layout if required. |