Chromium Code Reviews| Index: chrome/browser/ui/panels/panel_browser_frame_view.cc |
| diff --git a/chrome/browser/ui/panels/panel_browser_frame_view.cc b/chrome/browser/ui/panels/panel_browser_frame_view.cc |
| index 2ebdb6499b14949e48b6785a8fea0cf74ba0cad3..cec192cb600826ed9b81d83828e8be355285be0c 100644 |
| --- a/chrome/browser/ui/panels/panel_browser_frame_view.cc |
| +++ b/chrome/browser/ui/panels/panel_browser_frame_view.cc |
| @@ -468,38 +468,63 @@ gfx::Size PanelBrowserFrameView::GetMinimumSize() { |
| } |
| void PanelBrowserFrameView::Layout() { |
| + // Check if the width is only enough to show only the icon, or both icon |
| + // and title. Hide corresponding controls accordingly. |
| + bool show_close_button = true; |
| + bool show_settings_button = true; |
| + bool show_title_label = true; |
| + if (width() <= IconOnlyWidth()) { |
|
Dmitry Titov
2011/12/01 02:28:11
Seems both branches of this if are intended for OV
|
| + show_close_button = false; |
| + show_settings_button = false; |
| + show_title_label = false; |
| + } else if (panel_browser_view_->panel()->expansion_state() == |
| + Panel::IN_OVERFLOW) { |
| + show_close_button = true; |
|
prasadt
2011/12/01 04:04:46
This is already true.
|
| + show_settings_button = false; |
| + } |
| + close_button_->SetVisible(show_close_button); |
| + settings_button_->SetVisible(show_settings_button); |
| + title_label_->SetVisible(show_title_label); |
| + if (!show_title_label) |
| + return; |
|
prasadt
2011/12/01 04:04:46
A comment why you return here?
|
| + |
| // Cancel the settings button animation if the layout of titlebar is being |
| // updated. |
| if (settings_button_animator_.get() && settings_button_animator_->IsShowing()) |
| settings_button_animator_->Reset(); |
| // Layout the close button. |
| - gfx::Size close_button_size = close_button_->GetPreferredSize(); |
| - close_button_->SetBounds( |
| - width() - kBorderThickness - kCloseButtonAndBorderSpacing - |
| - close_button_size.width(), |
| - (NonClientTopBorderHeight() - close_button_size.height()) / 2, |
| - close_button_size.width(), |
| - close_button_size.height()); |
| - |
| - // Layout the settings button. |
| - gfx::Size settings_button_size = settings_button_->GetPreferredSize(); |
| - settings_button_->SetBounds( |
| - close_button_->x() - kSettingsButtonAndCloseButtonSpacing - |
| + int right = width(); |
| + if (show_close_button) { |
| + gfx::Size close_button_size = close_button_->GetPreferredSize(); |
| + close_button_->SetBounds( |
| + width() - kBorderThickness - kCloseButtonAndBorderSpacing - |
| + close_button_size.width(), |
| + (NonClientTopBorderHeight() - close_button_size.height()) / 2, |
| + close_button_size.width(), |
| + close_button_size.height()); |
| + |
| + // Layout the settings button. |
| + if (show_settings_button) { |
| + gfx::Size settings_button_size = settings_button_->GetPreferredSize(); |
| + settings_button_->SetBounds( |
| + close_button_->x() - kSettingsButtonAndCloseButtonSpacing - |
| + settings_button_size.width(), |
| + (NonClientTopBorderHeight() - settings_button_size.height()) / 2, |
| settings_button_size.width(), |
| - (NonClientTopBorderHeight() - settings_button_size.height()) / 2, |
| - settings_button_size.width(), |
| - settings_button_size.height()); |
| - |
| - // Trace the full bounds and zero-size bounds for animation purpose. |
| - settings_button_full_bounds_ = settings_button_->bounds(); |
| - settings_button_zero_bounds_.SetRect( |
| - settings_button_full_bounds_.x() + |
| - settings_button_full_bounds_.width() / 2, |
| - settings_button_full_bounds_.y() + |
| - settings_button_full_bounds_.height() / 2, |
| - 0, |
| - 0); |
| + settings_button_size.height()); |
| + |
| + // Trace the full bounds and zero-size bounds for animation purpose. |
| + settings_button_full_bounds_ = settings_button_->bounds(); |
| + settings_button_zero_bounds_.SetRect( |
| + settings_button_full_bounds_.x() + |
| + settings_button_full_bounds_.width() / 2, |
| + settings_button_full_bounds_.y() + |
| + settings_button_full_bounds_.height() / 2, |
| + 0, |
| + 0); |
| + } |
| + } |
| // Layout the icon. |
| int icon_y = (NonClientTopBorderHeight() - kIconSize) / 2; |
| @@ -515,7 +540,7 @@ void PanelBrowserFrameView::Layout() { |
| title_label_->SetBounds( |
| title_x, |
| icon_y + ((kIconSize - title_height - 1) / 2), |
| - std::max(0, settings_button_->x() - kTitleSpacing - title_x), |
| + std::max(0, right - kTitleSpacing - title_x), |
| title_height); |
| // Calculate the client area bounds. |
| @@ -629,6 +654,14 @@ gfx::Size PanelBrowserFrameView::NonClientAreaSize() const { |
| NonClientTopBorderHeight() + NonClientBorderThickness()); |
| } |
| +int PanelBrowserFrameView::IconOnlyWidth() const { |
| + return kBorderThickness * 2 + kIconAndBorderSpacing * 2 + kIconSize; |
| +} |
| + |
| +gfx::Size PanelBrowserFrameView::IconifiedSize() const { |
| + return gfx::Size(IconOnlyWidth(), NonClientTopBorderHeight()); |
| +} |
| + |
| bool PanelBrowserFrameView::UsingDefaultTheme() const { |
| ThemeService* theme_service = ThemeServiceFactory::GetForProfile( |
| panel_browser_view_->panel()->browser()->profile()); |
| @@ -792,6 +825,10 @@ void PanelBrowserFrameView::OnMouseEnterOrLeaveWindow(bool mouse_entered) { |
| void PanelBrowserFrameView::UpdateSettingsButtonVisibility( |
| bool focused, bool cursor_in_view) { |
| + // The settings button is not shown in the overflow state. |
| + if (panel_browser_view_->panel()->expansion_state() == Panel::IN_OVERFLOW) |
|
prasadt
2011/12/01 04:04:46
Assert is_settings_button_visible_ is false?
|
| + return; |
| + |
| bool is_settings_button_visible = focused || cursor_in_view; |
| if (is_settings_button_visible_ == is_settings_button_visible) |
| return; |