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

Side by Side Diff: chrome/browser/ui/views/toolbar/browser_actions_container.cc

Issue 271013002: Compute minimum widths for the toolbar components. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/views/toolbar/browser_actions_container.h" 5 #include "chrome/browser/ui/views/toolbar/browser_actions_container.h"
6 6
7 #include "base/compiler_specific.h" 7 #include "base/compiler_specific.h"
8 #include "base/prefs/pref_service.h" 8 #include "base/prefs/pref_service.h"
9 #include "base/stl_util.h" 9 #include "base/stl_util.h"
10 #include "chrome/browser/extensions/extension_service.h" 10 #include "chrome/browser/extensions/extension_service.h"
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 BrowserActionsContainerObserver* observer) { 201 BrowserActionsContainerObserver* observer) {
202 observers_.AddObserver(observer); 202 observers_.AddObserver(observer);
203 } 203 }
204 204
205 void BrowserActionsContainer::RemoveObserver( 205 void BrowserActionsContainer::RemoveObserver(
206 BrowserActionsContainerObserver* observer) { 206 BrowserActionsContainerObserver* observer) {
207 observers_.RemoveObserver(observer); 207 observers_.RemoveObserver(observer);
208 } 208 }
209 209
210 gfx::Size BrowserActionsContainer::GetPreferredSize() { 210 gfx::Size BrowserActionsContainer::GetPreferredSize() {
211 if (browser_action_views_.empty())
212 return gfx::Size(ToolbarView::kStandardSpacing, 0);
213
214 // We calculate the size of the view by taking the current width and 211 // We calculate the size of the view by taking the current width and
215 // subtracting resize_amount_ (the latter represents how far the user is 212 // subtracting resize_amount_ (the latter represents how far the user is
216 // resizing the view or, if animating the snapping, how far to animate it). 213 // resizing the view or, if animating the snapping, how far to animate it).
217 // But we also clamp it to a minimum size and the maximum size, so that the 214 // But we also clamp it to a minimum size and the maximum size, so that the
218 // container can never shrink too far or take up more space than it needs. In 215 // container can never shrink too far or take up more space than it needs. In
219 // other words: ContainerMinSize() < width() - resize < ClampTo(MAX). 216 // other words: ContainerMinSize() < width() - resize < ClampTo(MAX).
Greg Billock 2014/05/12 23:09:44 update comment (MinimumNonemptyWidth)
Peter Kasting 2014/05/13 00:55:33 Done.
220 int clamped_width = std::min( 217 int min_width = std::min(
Greg Billock 2014/05/12 23:09:44 how about "preferred_width"
Peter Kasting 2014/05/13 00:55:33 OK.
221 std::max(ContainerMinSize(), container_width_ - resize_amount_), 218 std::max(MinimumNonemptyWidth(), container_width_ - resize_amount_),
222 IconCountToWidth(-1, false)); 219 IconCountToWidth(-1, false));
223 return gfx::Size(clamped_width, 0); 220 // Height will be ignored by the ToolbarView.
221 return gfx::Size(min_width, 0);
222 }
223
224 gfx::Size BrowserActionsContainer::GetMinimumSize() {
225 int min_width = std::min(MinimumNonemptyWidth(), IconCountToWidth(-1, false));
226 // Height will be ignored by the ToolbarView.
227 return gfx::Size(min_width, 0);
224 } 228 }
225 229
226 void BrowserActionsContainer::Layout() { 230 void BrowserActionsContainer::Layout() {
227 if (browser_action_views_.empty()) { 231 if (browser_action_views_.empty()) {
228 SetVisible(false); 232 SetVisible(false);
229 return; 233 return;
230 } 234 }
231 235
232 SetVisible(true); 236 SetVisible(true);
233 resize_area_->SetBounds(0, 0, kItemSpacing, height()); 237 resize_area_->SetBounds(0, 0, kItemSpacing, height());
(...skipping 612 matching lines...) Expand 10 before | Expand all | Expand 10 after
846 // either side of the chevron. 850 // either side of the chevron.
847 int available_space = pixels - ToolbarView::kStandardSpacing - 851 int available_space = pixels - ToolbarView::kStandardSpacing -
848 chevron_->GetPreferredSize().width() - kChevronSpacing - 852 chevron_->GetPreferredSize().width() - kChevronSpacing -
849 ToolbarView::kStandardSpacing; 853 ToolbarView::kStandardSpacing;
850 // Now we add an extra between-item padding value so the space can be divided 854 // Now we add an extra between-item padding value so the space can be divided
851 // evenly by (size of icon with padding). 855 // evenly by (size of icon with padding).
852 return static_cast<size_t>( 856 return static_cast<size_t>(
853 std::max(0, available_space + kItemSpacing) / IconWidth(true)); 857 std::max(0, available_space + kItemSpacing) / IconWidth(true));
854 } 858 }
855 859
856 int BrowserActionsContainer::ContainerMinSize() const { 860 int BrowserActionsContainer::MinimumNonemptyWidth() const {
857 return ToolbarView::kStandardSpacing + kChevronSpacing + 861 return ToolbarView::kStandardSpacing + kChevronSpacing +
858 chevron_->GetPreferredSize().width() + ToolbarView::kStandardSpacing; 862 chevron_->GetPreferredSize().width() + ToolbarView::kStandardSpacing;
859 } 863 }
860 864
861 void BrowserActionsContainer::SaveDesiredSizeAndAnimate( 865 void BrowserActionsContainer::SaveDesiredSizeAndAnimate(
862 gfx::Tween::Type tween_type, 866 gfx::Tween::Type tween_type,
863 size_t num_visible_icons) { 867 size_t num_visible_icons) {
864 // Save off the desired number of visible icons. We do this now instead of at 868 // Save off the desired number of visible icons. We do this now instead of at
865 // the end of the animation so that even if the browser is shut down while 869 // the end of the animation so that even if the browser is shut down while
866 // animating, the right value will be restored on next run. 870 // animating, the right value will be restored on next run.
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
922 views::BubbleBorder::TOP_RIGHT, 926 views::BubbleBorder::TOP_RIGHT,
923 show_action); 927 show_action);
924 popup_->GetWidget()->AddObserver(this); 928 popup_->GetWidget()->AddObserver(this);
925 popup_button_ = button; 929 popup_button_ = button;
926 930
927 // Only set button as pushed if it was triggered by a user click. 931 // Only set button as pushed if it was triggered by a user click.
928 if (should_grant) 932 if (should_grant)
929 popup_button_->SetButtonPushed(); 933 popup_button_->SetButtonPushed();
930 return true; 934 return true;
931 } 935 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698