Chromium Code Reviews| Index: chrome/browser/ui/views/toolbar/wrench_menu.cc |
| diff --git a/chrome/browser/ui/views/toolbar/wrench_menu.cc b/chrome/browser/ui/views/toolbar/wrench_menu.cc |
| index c2e2985776833bd48f35b0379ec367bf1e4ef9cc..9789d100b2430018bef3858695a1264ddf039570 100644 |
| --- a/chrome/browser/ui/views/toolbar/wrench_menu.cc |
| +++ b/chrome/browser/ui/views/toolbar/wrench_menu.cc |
| @@ -371,6 +371,7 @@ class WrenchMenuView : public views::View, |
| protected: |
| WrenchMenu* menu() { return menu_; } |
| + WrenchMenu* menu() const { return menu_; } |
|
Peter Kasting
2015/07/23 18:46:32
Const methods cannot return non-const pointers. Y
bruthig
2015/07/23 21:18:04
Done.
|
| ButtonMenuItemModel* menu_model() { return menu_model_; } |
| private: |
| @@ -492,7 +493,8 @@ class WrenchMenu::ZoomView : public WrenchMenuView { |
| zoom_label_(NULL), |
| decrement_button_(NULL), |
| fullscreen_button_(NULL), |
| - zoom_label_width_(0) { |
| + zoom_label_width_(0), |
| + zoom_label_width_value_is_valid_(false) { |
| browser_zoom_subscription_ = |
| ui_zoom::ZoomEventManager::GetForBrowserContext( |
| menu->browser_->profile()) |
| @@ -514,7 +516,7 @@ class WrenchMenu::ZoomView : public WrenchMenuView { |
| zoom_label_->set_background(center_bg); |
| AddChildView(zoom_label_); |
| - zoom_label_width_ = MaxWidthForZoomLabel(); |
| + zoom_label_width_value_is_valid_ = false; |
| increment_button_ = CreateButtonWithAccName( |
| IDS_ZOOM_PLUS2, InMenuButtonBackground::RIGHT_BUTTON, |
| @@ -560,8 +562,9 @@ class WrenchMenu::ZoomView : public WrenchMenuView { |
| // Returned height doesn't matter as MenuItemView forces everything to the |
| // height of the menuitemview. Note that we have overridden the height when |
| // constructing the menu. |
| - return gfx::Size(button_width + zoom_label_width_ + button_width + |
| - fullscreen_width, 0); |
| + return gfx::Size( |
| + button_width + MaxWidthForZoomLabel() + button_width + fullscreen_width, |
| + 0); |
| } |
| void Layout() override { |
| @@ -574,7 +577,7 @@ class WrenchMenu::ZoomView : public WrenchMenuView { |
| x += bounds.width(); |
| bounds.set_x(x); |
| - bounds.set_width(zoom_label_width_); |
| + bounds.set_width(MaxWidthForZoomLabel()); |
| zoom_label_->SetBoundsRect(bounds); |
| x += bounds.width(); |
| @@ -596,7 +599,7 @@ class WrenchMenu::ZoomView : public WrenchMenuView { |
| zoom_label_->SetBorder(views::Border::CreateEmptyBorder( |
| 0, kZoomLabelHorizontalPadding, 0, kZoomLabelHorizontalPadding)); |
| zoom_label_->SetFontList(menu_config.font_list); |
| - zoom_label_width_ = MaxWidthForZoomLabel(); |
| + zoom_label_width_value_is_valid_ = false; |
| if (theme) { |
| zoom_label_->SetEnabledColor(theme->GetSystemColor( |
| @@ -651,11 +654,20 @@ class WrenchMenu::ZoomView : public WrenchMenuView { |
| zoom_label_->SetText( |
| l10n_util::GetStringFUTF16Int(IDS_ZOOM_PERCENT, zoom)); |
| - zoom_label_width_ = MaxWidthForZoomLabel(); |
| + zoom_label_width_value_is_valid_ = false; |
| } |
| - // Calculates the max width the zoom string can be. |
| - int MaxWidthForZoomLabel() { |
| + // Returns the max width the zoom string can be. |
| + int MaxWidthForZoomLabel() const { |
|
Peter Kasting
2015/07/23 18:46:32
Nit: ZoomLabelMaxWidth()? MaxZoomLabelWidth()? A
bruthig
2015/07/23 21:18:03
Done.
|
| + if (!zoom_label_width_value_is_valid_) { |
| + zoom_label_width_ = CalculateMaxWidthForZoomLabel(); |
|
Peter Kasting
2015/07/23 18:46:32
Nit: Since this is called once, just inline its co
jonross
2015/07/23 19:55:51
It is called in both GetPreferredSize and Layout.
jonross
2015/07/23 20:01:16
Nevermind, misread. Please ignore.
bruthig
2015/07/23 21:18:04
Done. But I am curious why it is you prefer to in
|
| + zoom_label_width_value_is_valid_ = true; |
| + } |
| + return zoom_label_width_; |
| + } |
| + |
| + // Calculates and returns the max width the zoom string can be. |
| + int CalculateMaxWidthForZoomLabel() const { |
| const gfx::FontList& font_list = zoom_label_->font_list(); |
| int border_width = |
| zoom_label_->border() ? zoom_label_->border()->GetInsets().width() : 0; |
| @@ -699,8 +711,14 @@ class WrenchMenu::ZoomView : public WrenchMenuView { |
| ImageButton* fullscreen_button_; |
| - // Width given to |zoom_label_|. This is the width at 100%. |
| - int zoom_label_width_; |
| + // Cached width of how wide the zoom label string can be. This should not be |
| + // accessed directly, use MaxWidthForZoomLabel() instead. This is the width at |
| + // 100%. |
|
Peter Kasting
2015/07/23 18:46:32
Nit: Consider adding a short note about why we bot
bruthig
2015/07/23 21:18:04
Done.
|
| + mutable int zoom_label_width_; |
| + |
| + // Flag that is true if |zoom_label_width_| is a valid value or false if it |
|
Peter Kasting
2015/07/23 18:46:32
Nit: How about "Flag tracking whether calls to Max
bruthig
2015/07/23 21:18:04
Done. I like :)
|
| + // needs to be computed. |
| + mutable bool zoom_label_width_value_is_valid_; |
|
Peter Kasting
2015/07/23 18:46:32
Nit: |zoom_label_width_valid_| is just as clear an
bruthig
2015/07/23 21:18:04
Done.
|
| DISALLOW_COPY_AND_ASSIGN(ZoomView); |
| }; |