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

Side by Side Diff: chrome/browser/views/browser_actions_container.h

Issue 3052011: Make the resize gripper invisible.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 5 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 (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 #ifndef CHROME_BROWSER_VIEWS_BROWSER_ACTIONS_CONTAINER_H_ 5 #ifndef CHROME_BROWSER_VIEWS_BROWSER_ACTIONS_CONTAINER_H_
6 #define CHROME_BROWSER_VIEWS_BROWSER_ACTIONS_CONTAINER_H_ 6 #define CHROME_BROWSER_VIEWS_BROWSER_ACTIONS_CONTAINER_H_
7 7
8 #include <set> 8 #include <set>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
11 11
12 #include "app/slide_animation.h" 12 #include "app/slide_animation.h"
13 #include "base/task.h" 13 #include "base/task.h"
14 #include "chrome/browser/extensions/extension_context_menu_model.h" 14 #include "chrome/browser/extensions/extension_context_menu_model.h"
15 #include "chrome/browser/extensions/extension_toolbar_model.h" 15 #include "chrome/browser/extensions/extension_toolbar_model.h"
16 #include "chrome/browser/extensions/image_loading_tracker.h" 16 #include "chrome/browser/extensions/image_loading_tracker.h"
17 #include "chrome/browser/views/browser_bubble.h" 17 #include "chrome/browser/views/browser_bubble.h"
18 #include "chrome/browser/views/extensions/browser_action_overflow_menu_controlle r.h" 18 #include "chrome/browser/views/extensions/browser_action_overflow_menu_controlle r.h"
19 #include "chrome/browser/views/extensions/extension_popup.h" 19 #include "chrome/browser/views/extensions/extension_popup.h"
20 #include "chrome/common/notification_observer.h" 20 #include "chrome/common/notification_observer.h"
21 #include "chrome/common/notification_registrar.h" 21 #include "chrome/common/notification_registrar.h"
22 #include "views/controls/button/menu_button.h" 22 #include "views/controls/button/menu_button.h"
23 #include "views/controls/menu/view_menu_delegate.h" 23 #include "views/controls/menu/view_menu_delegate.h"
24 #include "views/controls/resize_gripper.h" 24 #include "views/controls/resize_area.h"
25 #include "views/view.h" 25 #include "views/view.h"
26 26
27 class Browser; 27 class Browser;
28 class BrowserActionsContainer; 28 class BrowserActionsContainer;
29 class BrowserActionOverflowMenuController; 29 class BrowserActionOverflowMenuController;
30 class BrowserActionsContainer; 30 class BrowserActionsContainer;
31 class Extension; 31 class Extension;
32 class ExtensionAction; 32 class ExtensionAction;
33 class ExtensionPopup; 33 class ExtensionPopup;
34 class PrefService; 34 class PrefService;
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
175 }; 175 };
176 176
177 //////////////////////////////////////////////////////////////////////////////// 177 ////////////////////////////////////////////////////////////////////////////////
178 // 178 //
179 // The BrowserActionsContainer is a container view, responsible for drawing the 179 // The BrowserActionsContainer is a container view, responsible for drawing the
180 // browser action icons (extensions that add icons to the toolbar). 180 // browser action icons (extensions that add icons to the toolbar).
181 // 181 //
182 // The BrowserActionsContainer (when it contains one or more icons) consists of 182 // The BrowserActionsContainer (when it contains one or more icons) consists of
183 // the following elements, numbered as seen below the line: 183 // the following elements, numbered as seen below the line:
184 // 184 //
185 // || _ Icon _ Icon _ Icon _ [chevron] _ | _ 185 // r _ Icon _ Icon _ Icon _ [chevron] _ | _
186 // ----------------------------------------- 186 // -----------------------------------------
187 // 1 2 3 4 5 6 7 8 187 // 1 2 3 4 5 6 7 8
188 // 188 //
189 // 1) The ResizeGripper view. 189 // 1) An invisible resize area.
190 // 2) Padding (kHorizontalPadding). 190 // 2) Padding (kHorizontalPadding).
191 // 3) The browser action icon button (BrowserActionView). 191 // 3) The browser action icon button (BrowserActionView).
192 // 4) Padding to visually separate icons from one another 192 // 4) Padding to visually separate icons from one another
193 // (kBrowserActionButtonPadding). Not included if only one icon visible. 193 // (kBrowserActionButtonPadding). Not included if only one icon visible.
194 // 5) The chevron menu (MenuButton), shown when there is not enough room to show 194 // 5) The chevron menu (MenuButton), shown when there is not enough room to show
195 // all the icons. 195 // all the icons.
196 // 6) Padding (kDividerHorizontalMargin). 196 // 6) Padding (kDividerHorizontalMargin).
197 // 7) A thin vertical divider drawn during Paint to create visual separation for 197 // 7) A thin vertical divider drawn during Paint to create visual separation for
198 // the container from the Page and Wrench menus. 198 // the container from the Page and Wrench menus.
199 // 8) Padding (kChevronRightMargin). 199 // 8) Padding (kChevronRightMargin).
200 // 200 //
201 // The BrowserActionsContainer follows a few rules, in terms of user experience: 201 // The BrowserActionsContainer follows a few rules, in terms of user experience:
202 // 202 //
203 // 1) The container can never grow beyond the space needed to show all icons 203 // 1) The container can never grow beyond the space needed to show all icons
204 // (hereby referred to as the max width). 204 // (hereby referred to as the max width).
205 // 2) The container can never shrink below the space needed to show just the 205 // 2) The container can never shrink below the space needed to show just the
206 // resize gripper and the chevron (ignoring the case where there are no icons to 206 // initial padding and the chevron (ignoring the case where there are no icons
207 // show, in which case the container won't be visible anyway). 207 // to show, in which case the container won't be visible anyway).
208 // 3) The container snaps into place (to the pixel count that fits the visible 208 // 3) The container snaps into place (to the pixel count that fits the visible
209 // icons) to make sure there is no wasted space at the edges of the container. 209 // icons) to make sure there is no wasted space at the edges of the container.
210 // 4) If the user adds or removes icons (read: installs/uninstalls browser 210 // 4) If the user adds or removes icons (read: installs/uninstalls browser
211 // actions) we grow and shrink the container as needed - but ONLY if the 211 // actions) we grow and shrink the container as needed - but ONLY if the
212 // container was at max width to begin with. 212 // container was at max width to begin with.
213 // 5) If the container is NOT at max width (has an overflow menu), we respect 213 // 5) If the container is NOT at max width (has an overflow menu), we respect
214 // that size when adding and removing icons and DON'T grow/shrink the container. 214 // that size when adding and removing icons and DON'T grow/shrink the container.
215 // This means that new icons (which always appear at the far right) will show up 215 // This means that new icons (which always appear at the far right) will show up
216 // in the overflow menu. The install bubble for extensions points to the chevron 216 // in the overflow menu. The install bubble for extensions points to the chevron
217 // menu in this case. 217 // menu in this case.
218 // 218 //
219 // Resizing the BrowserActionsContainer: 219 // Resizing the BrowserActionsContainer:
220 // 220 //
221 // The ResizeGripper view sends OnResize messages to the BrowserActionsContainer 221 // The ResizeArea view sends OnResize messages to the BrowserActionsContainer
222 // class as the user drags the gripper. This modifies the value for 222 // class as the user drags it. This modifies the value for |resize_amount_|.
223 // |resize_amount_|. That indicates to the container that a resize is in 223 // That indicates to the container that a resize is in progress and is used to
224 // progress and is used to calculate the size in GetPreferredSize(), though 224 // calculate the size in GetPreferredSize(), though that function never exceeds
225 // that function never exceeds the defined minimum and maximum size of the 225 // the defined minimum and maximum size of the container.
226 // container.
227 // 226 //
228 // When the user releases the mouse (ends the resize), we calculate a target 227 // When the user releases the mouse (ends the resize), we calculate a target
229 // size for the container (animation_target_size_), clamp that value to the 228 // size for the container (animation_target_size_), clamp that value to the
230 // containers min and max and then animate from the *current* position (that the 229 // containers min and max and then animate from the *current* position (that the
231 // user has dragged the view to) to the target size. 230 // user has dragged the view to) to the target size.
232 // 231 //
233 // Animating the BrowserActionsContainer: 232 // Animating the BrowserActionsContainer:
234 // 233 //
235 // Animations are used when snapping the container to a value that fits all 234 // Animations are used when snapping the container to a value that fits all
236 // visible icons. This can be triggered when the user finishes resizing the 235 // visible icons. This can be triggered when the user finishes resizing the
237 // container or when Browser Actions are added/removed. 236 // container or when Browser Actions are added/removed.
238 // 237 //
239 // We always animate from the current width (container_size_.width()) to the 238 // We always animate from the current width (container_size_.width()) to the
240 // target size (animation_target_size_), using |resize_amount| to keep track of 239 // target size (animation_target_size_), using |resize_amount| to keep track of
241 // the animation progress. 240 // the animation progress.
242 // 241 //
243 // NOTE: When adding Browser Actions to a maximum width container (no overflow) 242 // NOTE: When adding Browser Actions to a maximum width container (no overflow)
244 // we make sure to suppress the chevron menu if it wasn't visible. This is 243 // we make sure to suppress the chevron menu if it wasn't visible. This is
245 // because we won't have enough space to show the new Browser Action until the 244 // because we won't have enough space to show the new Browser Action until the
246 // animation ends and we don't want the chevron to flash into view while we are 245 // animation ends and we don't want the chevron to flash into view while we are
247 // growing the container. 246 // growing the container.
248 // 247 //
249 //////////////////////////////////////////////////////////////////////////////// 248 ////////////////////////////////////////////////////////////////////////////////
250 class BrowserActionsContainer 249 class BrowserActionsContainer
251 : public views::View, 250 : public views::View,
252 public views::ViewMenuDelegate, 251 public views::ViewMenuDelegate,
253 public views::DragController, 252 public views::DragController,
254 public views::ResizeGripper::ResizeGripperDelegate, 253 public views::ResizeArea::ResizeAreaDelegate,
255 public AnimationDelegate, 254 public AnimationDelegate,
256 public ExtensionToolbarModel::Observer, 255 public ExtensionToolbarModel::Observer,
257 public BrowserActionOverflowMenuController::Observer, 256 public BrowserActionOverflowMenuController::Observer,
258 public ExtensionContextMenuModel::PopupDelegate, 257 public ExtensionContextMenuModel::PopupDelegate,
259 public ExtensionPopup::Observer { 258 public ExtensionPopup::Observer {
260 public: 259 public:
261 BrowserActionsContainer(Browser* browser, views::View* owner_view); 260 BrowserActionsContainer(Browser* browser, views::View* owner_view);
262 virtual ~BrowserActionsContainer(); 261 virtual ~BrowserActionsContainer();
263 262
264 static void RegisterUserPrefs(PrefService* prefs); 263 static void RegisterUserPrefs(PrefService* prefs);
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
330 329
331 // Overridden from views::DragController: 330 // Overridden from views::DragController:
332 virtual void WriteDragData(View* sender, 331 virtual void WriteDragData(View* sender,
333 const gfx::Point& press_pt, 332 const gfx::Point& press_pt,
334 OSExchangeData* data); 333 OSExchangeData* data);
335 virtual int GetDragOperations(View* sender, const gfx::Point& p); 334 virtual int GetDragOperations(View* sender, const gfx::Point& p);
336 virtual bool CanStartDrag(View* sender, 335 virtual bool CanStartDrag(View* sender,
337 const gfx::Point& press_pt, 336 const gfx::Point& press_pt,
338 const gfx::Point& p); 337 const gfx::Point& p);
339 338
340 // Overridden from ResizeGripper::ResizeGripperDelegate: 339 // Overridden from ResizeArea::ResizeAreaDelegate:
341 virtual void OnResize(int resize_amount, bool done_resizing); 340 virtual void OnResize(int resize_amount, bool done_resizing);
342 341
343 // Overridden from AnimationDelegate: 342 // Overridden from AnimationDelegate:
344 virtual void AnimationProgressed(const Animation* animation); 343 virtual void AnimationProgressed(const Animation* animation);
345 virtual void AnimationEnded(const Animation* animation); 344 virtual void AnimationEnded(const Animation* animation);
346 345
347 // Overridden from BrowserActionOverflowMenuController::Observer: 346 // Overridden from BrowserActionOverflowMenuController::Observer:
348 virtual void NotifyMenuDeleted( 347 virtual void NotifyMenuDeleted(
349 BrowserActionOverflowMenuController* controller); 348 BrowserActionOverflowMenuController* controller);
350 349
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
413 // room for even one icon. When determining how large the container should be 412 // room for even one icon. When determining how large the container should be
414 // this should be |true|. When determining where to place items, such as the 413 // this should be |true|. When determining where to place items, such as the
415 // drop indicator, this should be |false|. 414 // drop indicator, this should be |false|.
416 int ClampToNearestIconCount(int pixels, bool allow_shrink_to_minimum) const; 415 int ClampToNearestIconCount(int pixels, bool allow_shrink_to_minimum) const;
417 416
418 // Calculates the width of the container area NOT used to show the icons (the 417 // Calculates the width of the container area NOT used to show the icons (the
419 // controls to the left and to the right of the icons). 418 // controls to the left and to the right of the icons).
420 int WidthOfNonIconArea() const; 419 int WidthOfNonIconArea() const;
421 420
422 // Given a number of |icons| return the amount of pixels needed to draw it, 421 // Given a number of |icons| return the amount of pixels needed to draw it,
423 // including the controls (chevron if visible and resize gripper). 422 // including the controls (chevron if visible and resize area).
424 int IconCountToWidth(int icons) const; 423 int IconCountToWidth(int icons) const;
425 424
426 // Returns the absolute minimum size you can shrink the container down to and 425 // Returns the absolute minimum size you can shrink the container down to and
427 // still show it. We account for the chevron and the resize gripper, but not 426 // still show it. We account for the chevron and the resize gripper, but not
428 // all the padding that we normally show if there are icons. 427 // all the padding that we normally show if there are icons.
429 int ContainerMinSize() const; 428 int ContainerMinSize() const;
430 429
431 // Animate to the target value (unless testing, in which case we go straight 430 // Animate to the target value (unless testing, in which case we go straight
432 // to the target size). 431 // to the target size).
433 void Animate(Tween::Type type, int target_size); 432 void Animate(Tween::Type type, int target_size);
(...skipping 22 matching lines...) Expand all
456 // The button that triggered the current popup (just a reference to a button 455 // The button that triggered the current popup (just a reference to a button
457 // from browser_action_views_). 456 // from browser_action_views_).
458 BrowserActionButton* popup_button_; 457 BrowserActionButton* popup_button_;
459 458
460 // The model that tracks the order of the toolbar icons. 459 // The model that tracks the order of the toolbar icons.
461 ExtensionToolbarModel* model_; 460 ExtensionToolbarModel* model_;
462 461
463 // The current size of the container. 462 // The current size of the container.
464 gfx::Size container_size_; 463 gfx::Size container_size_;
465 464
466 // The resize gripper for the container. 465 // The resize area for the container.
467 views::ResizeGripper* resize_gripper_; 466 views::ResizeArea* resize_area_;
468 467
469 // The chevron for accessing the overflow items. 468 // The chevron for accessing the overflow items.
470 views::MenuButton* chevron_; 469 views::MenuButton* chevron_;
471 470
472 // The menu to show for the overflow button (chevron). This class manages its 471 // The menu to show for the overflow button (chevron). This class manages its
473 // own lifetime so that it can stay alive during drag and drop operations. 472 // own lifetime so that it can stay alive during drag and drop operations.
474 BrowserActionOverflowMenuController* overflow_menu_; 473 BrowserActionOverflowMenuController* overflow_menu_;
475 474
476 // The animation that happens when the container snaps to place. 475 // The animation that happens when the container snaps to place.
477 scoped_ptr<SlideAnimation> resize_animation_; 476 scoped_ptr<SlideAnimation> resize_animation_;
(...skipping 15 matching lines...) Expand all
493 492
494 ScopedRunnableMethodFactory<BrowserActionsContainer> task_factory_; 493 ScopedRunnableMethodFactory<BrowserActionsContainer> task_factory_;
495 494
496 // Handles delayed showing of the overflow menu when hovering. 495 // Handles delayed showing of the overflow menu when hovering.
497 ScopedRunnableMethodFactory<BrowserActionsContainer> show_menu_task_factory_; 496 ScopedRunnableMethodFactory<BrowserActionsContainer> show_menu_task_factory_;
498 497
499 DISALLOW_COPY_AND_ASSIGN(BrowserActionsContainer); 498 DISALLOW_COPY_AND_ASSIGN(BrowserActionsContainer);
500 }; 499 };
501 500
502 #endif // CHROME_BROWSER_VIEWS_BROWSER_ACTIONS_CONTAINER_H_ 501 #endif // CHROME_BROWSER_VIEWS_BROWSER_ACTIONS_CONTAINER_H_
OLDNEW
« no previous file with comments | « chrome/browser/gtk/browser_actions_toolbar_gtk.cc ('k') | chrome/browser/views/browser_actions_container.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698