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

Side by Side Diff: chrome/browser/ui/panels/panel_manager.h

Issue 7646003: Support auto-hide taskbar for panels on Windows. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 3 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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_UI_PANELS_PANEL_MANAGER_H_ 5 #ifndef CHROME_BROWSER_UI_PANELS_PANEL_MANAGER_H_
6 #define CHROME_BROWSER_UI_PANELS_PANEL_MANAGER_H_ 6 #define CHROME_BROWSER_UI_PANELS_PANEL_MANAGER_H_
7 #pragma once 7 #pragma once
8 8
9 #include <vector> 9 #include <vector>
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
11 #include "base/memory/ref_counted.h"
11 #include "base/memory/scoped_ptr.h" 12 #include "base/memory/scoped_ptr.h"
13 #include "base/task.h"
14 #include "chrome/browser/ui/panels/auto_hiding_desktop_bar.h"
12 #include "chrome/browser/ui/panels/panel.h" 15 #include "chrome/browser/ui/panels/panel.h"
13 #include "ui/gfx/rect.h" 16 #include "ui/gfx/rect.h"
14 17
15 class Browser; 18 class Browser;
16 class Panel; 19 class Panel;
17 20
18 // This class manages a set of panels. 21 // This class manages a set of panels.
19 class PanelManager { 22 // Note that the ref count is needed by using PostTask in the implementation.
23 class PanelManager : public AutoHidingDesktopBar::Observer,
24 public base::RefCounted<PanelManager> {
20 public: 25 public:
26 typedef std::vector<Panel*> Panels;
27
21 // Returns a single instance. 28 // Returns a single instance.
22 static PanelManager* GetInstance(); 29 static PanelManager* GetInstance();
23 30
24 ~PanelManager(); 31 virtual ~PanelManager();
25 32
26 // Called when the display is changed, i.e. work area is updated. 33 // Called when the display is changed, i.e. work area is updated.
27 void OnDisplayChanged(); 34 void OnDisplayChanged();
28 35
29 // Creates a panel and returns it. The panel might be queued for display 36 // Creates a panel and returns it. The panel might be queued for display
30 // later. 37 // later.
31 Panel* CreatePanel(Browser* browser); 38 Panel* CreatePanel(Browser* browser);
32 39
33 void Remove(Panel* panel); 40 void Remove(Panel* panel);
34 void RemoveAll(); 41 void RemoveAll();
35 42
36 // Drags the given panel. 43 // Drags the given panel.
37 void StartDragging(Panel* panel); 44 void StartDragging(Panel* panel);
38 void Drag(int delta_x); 45 void Drag(int delta_x);
39 void EndDragging(bool cancelled); 46 void EndDragging(bool cancelled);
40 47
41 // Should we bring up the titlebar, given the current mouse point? 48 // Returns true if we should bring up the titlebars, given the current mouse
42 bool ShouldBringUpTitlebarForAllMinimizedPanels(int mouse_x, 49 // point.
43 int mouse_y) const; 50 bool ShouldBringUpTitlebars(int mouse_x, int mouse_y) const;
44 51
45 // Brings up or down the title-bar for all minimized panels. 52 // Brings up or down the titlebars for all minimized panels.
46 void BringUpOrDownTitlebarForAllMinimizedPanels(bool bring_up); 53 void BringUpOrDownTitlebars(bool bring_up);
54
55 // Returns the bottom position for the panel per its expansion state. If auto-
56 // hide bottom bar is present, we want to move the minimized panel to the
57 // bottom of the screen, not the bottom of the work area.
58 int GetBottomPositionForExpansionState(
59 Panel::ExpansionState expansion_state) const;
47 60
48 int num_panels() const { return panels_.size(); } 61 int num_panels() const { return panels_.size(); }
49 bool is_dragging_panel() const; 62 bool is_dragging_panel() const;
50 63
64 #ifdef UNIT_TEST
65 const Panels& panels() const { return panels_; }
66 static int horizontal_spacing() { return kPanelsHorizontalSpacing; }
67
68 const gfx::Rect& work_area() const {
69 return work_area_;
70 }
71
72 void set_auto_hiding_desktop_bar(
73 AutoHidingDesktopBar* auto_hiding_desktop_bar) {
74 auto_hiding_desktop_bar_ = auto_hiding_desktop_bar;
75 }
76
77 void SetWorkAreaForTesting(const gfx::Rect& work_area) {
78 SetWorkArea(work_area);
79 }
80 #endif
81
51 private: 82 private:
52 friend class PanelBrowserTest; 83 enum TitlebarAction {
53 84 NO_ACTION,
54 typedef std::vector<Panel*> Panels; 85 BRING_UP,
86 BRING_DOWN
87 };
55 88
56 PanelManager(); 89 PanelManager();
57 90
58 #if UNIT_TEST 91 // Overridden from AutoHidingDesktopBar::Observer:
59 const Panels& panels() const { return panels_; } 92 virtual void OnAutoHidingDesktopBarThicknessChanged() OVERRIDE;
60 static int horizontal_spacing() { return kPanelsHorizontalSpacing; } 93 virtual void OnAutoHidingDesktopBarVisibilityChanged(
61 #endif 94 AutoHidingDesktopBar::Alignment alignment,
95 AutoHidingDesktopBar::Visibility visibility) OVERRIDE;
62 96
63 // Applies the new work area. This is called by OnDisplayChanged and the test 97 // Applies the new work area. This is called by OnDisplayChanged and the test
64 // code. 98 // code.
65 void SetWorkArea(const gfx::Rect& work_area); 99 void SetWorkArea(const gfx::Rect& work_area);
66 100
101 // Adjusts the work area to exclude the influence of auto-hiding desktop bars.
102 void AdjustWorkAreaForAutoHidingDesktopBars();
103
67 // Handles all the panels that're delayed to be removed. 104 // Handles all the panels that're delayed to be removed.
68 void DelayedRemove(); 105 void DelayedRemove();
69 106
70 // Does the remove. Called from Remove and DelayedRemove. 107 // Does the remove. Called from Remove and DelayedRemove.
71 void DoRemove(Panel* panel); 108 void DoRemove(Panel* panel);
72 109
73 // Rearranges the positions of the panels starting from the given iterator. 110 // Rearranges the positions of the panels starting from the given iterator.
74 // This is called when the display space has been changed, i.e. working 111 // This is called when the display space has been changed, i.e. working
75 // area being changed or a panel being closed. 112 // area being changed or a panel being closed.
76 void Rearrange(Panels::iterator iter_to_start); 113 void Rearrange(Panels::iterator iter_to_start, int rightmost_position);
77
78 // Computes the bounds for next panel.
79 // |allow_size_change| is used to indicate if the panel size can be changed to
80 // fall within the size constraint, e.g., when the panel is created.
81 // Returns true if computed bounds are within the displayable area.
82 bool ComputeBoundsForNextPanel(gfx::Rect* bounds, bool allow_size_change);
83 114
84 // Finds one panel to close so that we may have space for the new panel 115 // Finds one panel to close so that we may have space for the new panel
85 // created by |extension|. 116 // created by |extension|.
86 void FindAndClosePanelOnOverflow(const Extension* extension); 117 void FindAndClosePanelOnOverflow(const Extension* extension);
87 118
88 // Help functions to drag the given panel. 119 // Help functions to drag the given panel.
89 void DragLeft(); 120 void DragLeft();
90 void DragRight(); 121 void DragRight();
91 122
92 // Horizontal spacing between panels. Used for unit testing. 123 // Checks if the titlebars have been brought up or down. If not, do not wait
124 // for the notifications to trigger it any more, and start to bring them up or
125 // down immediately.
126 void DelayedBringUpOrDownTitlebarsCheck();
127
128 // Does the real job of bringing up or down the titlebars.
129 void DoBringUpOrDownTitlebars(bool bring_up);
130
131 int GetRightMostAvaialblePosition() const;
93 132
94 Panels panels_; 133 Panels panels_;
95 134
96 // Stores the panels that are pending to remove. We want to delay the removal 135 // Stores the panels that are pending to remove. We want to delay the removal
97 // when we're in the process of the dragging. 136 // when we're in the process of the dragging.
98 Panels panels_pending_to_remove_; 137 Panels panels_pending_to_remove_;
99 138
100 // Current work area used in computing the panel bounds. 139 // The maximum work area avaialble. This area does not include the area taken
140 // by the always-visible (non-auto-hiding) desktop bars.
101 gfx::Rect work_area_; 141 gfx::Rect work_area_;
102 142
103 // Used in computing the bounds of the next panel. 143 // The useable work area for computing the panel bounds. This area excludes
104 int max_width_; 144 // the potential area that could be taken by the auto-hiding desktop
105 int max_height_; 145 // bars (we only consider those bars that are aligned to bottom, left, and
106 int min_x_; 146 // right of the screen edges) when they become fully visible.
107 int current_x_; 147 gfx::Rect adjusted_work_area_;
108 int bottom_edge_y_;
109 148
110 // Panel to drag. 149 // Panel to drag.
111 size_t dragging_panel_index_; 150 size_t dragging_panel_index_;
112 151
113 // Original x coordinate of the panel to drag. This is used to get back to 152 // Original x coordinate of the panel to drag. This is used to get back to
114 // the original position when we cancel the dragging. 153 // the original position when we cancel the dragging.
115 int dragging_panel_original_x_; 154 int dragging_panel_original_x_;
116 155
117 // Bounds of the panel to drag. It is first set to the original bounds when 156 // Bounds of the panel to drag. It is first set to the original bounds when
118 // the dragging happens. Then it is updated to the position that will be set 157 // the dragging happens. Then it is updated to the position that will be set
119 // to when the dragging ends. 158 // to when the dragging ends.
120 gfx::Rect dragging_panel_bounds_; 159 gfx::Rect dragging_panel_bounds_;
121 160
161 scoped_refptr<AutoHidingDesktopBar> auto_hiding_desktop_bar_;
162
163 TitlebarAction delayed_titlebar_action_;
164
165 ScopedRunnableMethodFactory<PanelManager> method_factory_;
166
122 static const int kPanelsHorizontalSpacing = 4; 167 static const int kPanelsHorizontalSpacing = 4;
123 168
124 DISALLOW_COPY_AND_ASSIGN(PanelManager); 169 DISALLOW_COPY_AND_ASSIGN(PanelManager);
125 }; 170 };
126 171
127 #endif // CHROME_BROWSER_UI_PANELS_PANEL_MANAGER_H_ 172 #endif // CHROME_BROWSER_UI_PANELS_PANEL_MANAGER_H_
OLDNEW
« no previous file with comments | « chrome/browser/ui/panels/panel_browsertest.cc ('k') | chrome/browser/ui/panels/panel_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698