| Index: chrome/browser/ui/views/tabs/tab_strip.cc
|
| diff --git a/chrome/browser/ui/views/tabs/tab_strip.cc b/chrome/browser/ui/views/tabs/tab_strip.cc
|
| index 2bcc792ed27075721aef397583370e5cc8275bf1..a3c30ff23512cdbdcf3b33ee8ef9cc51c402ebe7 100644
|
| --- a/chrome/browser/ui/views/tabs/tab_strip.cc
|
| +++ b/chrome/browser/ui/views/tabs/tab_strip.cc
|
| @@ -1312,16 +1312,37 @@ const char* TabStrip::GetClassName() const {
|
| }
|
|
|
| gfx::Size TabStrip::GetPreferredSize() const {
|
| - // For stacked tabs the minimum size is calculated as the size needed to
|
| - // handle showing any number of tabs. Otherwise report the minimum width as
|
| - // the size required for a single selected tab plus the new tab button. Don't
|
| - // base it on the actual number of tabs because it's undesirable to have the
|
| - // minimum window size change when a new tab is opened.
|
| - const int needed_tab_width = (touch_layout_ || adjust_layout_) ?
|
| - (Tab::GetTouchWidth() + (2 * kStackedPadding * kMaxStackedCount)) :
|
| - Tab::GetMinimumSelectedSize().width();
|
| - return gfx::Size(needed_tab_width + new_tab_button_width(), immersive_style_ ?
|
| - Tab::GetImmersiveHeight() : Tab::GetMinimumUnselectedSize().height());
|
| + int needed_tab_width;
|
| + if (touch_layout_ || adjust_layout_) {
|
| + // For stacked tabs the minimum size is calculated as the size needed to
|
| + // handle showing any number of tabs.
|
| + needed_tab_width =
|
| + Tab::GetTouchWidth() + (2 * kStackedPadding * kMaxStackedCount);
|
| + } else {
|
| + // Otherwise the minimum width is based on the actual number of tabs.
|
| + const int mini_tab_count = GetMiniTabCount();
|
| + needed_tab_width = mini_tab_count * Tab::GetMiniWidth();
|
| + const int remaining_tab_count = tab_count() - mini_tab_count;
|
| + const int min_selected_width = Tab::GetMinimumSelectedSize().width();
|
| + const int min_unselected_width = Tab::GetMinimumUnselectedSize().width();
|
| + if (remaining_tab_count > 0) {
|
| + needed_tab_width += kMiniToNonMiniGap + min_selected_width +
|
| + ((remaining_tab_count - 1) * min_unselected_width);
|
| + }
|
| + if (tab_count() > 1)
|
| + needed_tab_width += (tab_count() - 1) * kTabHorizontalOffset;
|
| +
|
| + // Don't let the tabstrip shrink smaller than is necessary to show one tab,
|
| + // and don't force it to be larger than is necessary to show 20 tabs.
|
| + const int largest_min_tab_width =
|
| + min_selected_width + 19 * (min_unselected_width + kTabHorizontalOffset);
|
| + needed_tab_width = std::min(
|
| + std::max(needed_tab_width, min_selected_width), largest_min_tab_width);
|
| + }
|
| + return gfx::Size(
|
| + needed_tab_width + new_tab_button_width(),
|
| + immersive_style_ ?
|
| + Tab::GetImmersiveHeight() : Tab::GetMinimumUnselectedSize().height());
|
| }
|
|
|
| void TabStrip::OnDragEntered(const DropTargetEvent& event) {
|
|
|