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

Unified 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, 4 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 side-by-side diff with in-line comments
Download patch
« 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 »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/panels/panel_manager.h
===================================================================
--- chrome/browser/ui/panels/panel_manager.h (revision 98834)
+++ chrome/browser/ui/panels/panel_manager.h (working copy)
@@ -8,7 +8,10 @@
#include <vector>
#include "base/basictypes.h"
+#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
+#include "base/task.h"
+#include "chrome/browser/ui/panels/auto_hiding_desktop_bar.h"
#include "chrome/browser/ui/panels/panel.h"
#include "ui/gfx/rect.h"
@@ -16,12 +19,16 @@
class Panel;
// This class manages a set of panels.
-class PanelManager {
+// Note that the ref count is needed by using PostTask in the implementation.
+class PanelManager : public AutoHidingDesktopBar::Observer,
+ public base::RefCounted<PanelManager> {
public:
+ typedef std::vector<Panel*> Panels;
+
// Returns a single instance.
static PanelManager* GetInstance();
- ~PanelManager();
+ virtual ~PanelManager();
// Called when the display is changed, i.e. work area is updated.
void OnDisplayChanged();
@@ -38,32 +45,62 @@
void Drag(int delta_x);
void EndDragging(bool cancelled);
- // Should we bring up the titlebar, given the current mouse point?
- bool ShouldBringUpTitlebarForAllMinimizedPanels(int mouse_x,
- int mouse_y) const;
+ // Returns true if we should bring up the titlebars, given the current mouse
+ // point.
+ bool ShouldBringUpTitlebars(int mouse_x, int mouse_y) const;
- // Brings up or down the title-bar for all minimized panels.
- void BringUpOrDownTitlebarForAllMinimizedPanels(bool bring_up);
+ // Brings up or down the titlebars for all minimized panels.
+ void BringUpOrDownTitlebars(bool bring_up);
+ // Returns the bottom position for the panel per its expansion state. If auto-
+ // hide bottom bar is present, we want to move the minimized panel to the
+ // bottom of the screen, not the bottom of the work area.
+ int GetBottomPositionForExpansionState(
+ Panel::ExpansionState expansion_state) const;
+
int num_panels() const { return panels_.size(); }
bool is_dragging_panel() const;
- private:
- friend class PanelBrowserTest;
+#ifdef UNIT_TEST
+ const Panels& panels() const { return panels_; }
+ static int horizontal_spacing() { return kPanelsHorizontalSpacing; }
- typedef std::vector<Panel*> Panels;
+ const gfx::Rect& work_area() const {
+ return work_area_;
+ }
- PanelManager();
+ void set_auto_hiding_desktop_bar(
+ AutoHidingDesktopBar* auto_hiding_desktop_bar) {
+ auto_hiding_desktop_bar_ = auto_hiding_desktop_bar;
+ }
-#if UNIT_TEST
- const Panels& panels() const { return panels_; }
- static int horizontal_spacing() { return kPanelsHorizontalSpacing; }
+ void SetWorkAreaForTesting(const gfx::Rect& work_area) {
+ SetWorkArea(work_area);
+ }
#endif
+ private:
+ enum TitlebarAction {
+ NO_ACTION,
+ BRING_UP,
+ BRING_DOWN
+ };
+
+ PanelManager();
+
+ // Overridden from AutoHidingDesktopBar::Observer:
+ virtual void OnAutoHidingDesktopBarThicknessChanged() OVERRIDE;
+ virtual void OnAutoHidingDesktopBarVisibilityChanged(
+ AutoHidingDesktopBar::Alignment alignment,
+ AutoHidingDesktopBar::Visibility visibility) OVERRIDE;
+
// Applies the new work area. This is called by OnDisplayChanged and the test
// code.
void SetWorkArea(const gfx::Rect& work_area);
+ // Adjusts the work area to exclude the influence of auto-hiding desktop bars.
+ void AdjustWorkAreaForAutoHidingDesktopBars();
+
// Handles all the panels that're delayed to be removed.
void DelayedRemove();
@@ -73,14 +110,8 @@
// Rearranges the positions of the panels starting from the given iterator.
// This is called when the display space has been changed, i.e. working
// area being changed or a panel being closed.
- void Rearrange(Panels::iterator iter_to_start);
+ void Rearrange(Panels::iterator iter_to_start, int rightmost_position);
- // Computes the bounds for next panel.
- // |allow_size_change| is used to indicate if the panel size can be changed to
- // fall within the size constraint, e.g., when the panel is created.
- // Returns true if computed bounds are within the displayable area.
- bool ComputeBoundsForNextPanel(gfx::Rect* bounds, bool allow_size_change);
-
// Finds one panel to close so that we may have space for the new panel
// created by |extension|.
void FindAndClosePanelOnOverflow(const Extension* extension);
@@ -89,23 +120,31 @@
void DragLeft();
void DragRight();
- // Horizontal spacing between panels. Used for unit testing.
+ // Checks if the titlebars have been brought up or down. If not, do not wait
+ // for the notifications to trigger it any more, and start to bring them up or
+ // down immediately.
+ void DelayedBringUpOrDownTitlebarsCheck();
+ // Does the real job of bringing up or down the titlebars.
+ void DoBringUpOrDownTitlebars(bool bring_up);
+
+ int GetRightMostAvaialblePosition() const;
+
Panels panels_;
// Stores the panels that are pending to remove. We want to delay the removal
// when we're in the process of the dragging.
Panels panels_pending_to_remove_;
- // Current work area used in computing the panel bounds.
+ // The maximum work area avaialble. This area does not include the area taken
+ // by the always-visible (non-auto-hiding) desktop bars.
gfx::Rect work_area_;
- // Used in computing the bounds of the next panel.
- int max_width_;
- int max_height_;
- int min_x_;
- int current_x_;
- int bottom_edge_y_;
+ // The useable work area for computing the panel bounds. This area excludes
+ // the potential area that could be taken by the auto-hiding desktop
+ // bars (we only consider those bars that are aligned to bottom, left, and
+ // right of the screen edges) when they become fully visible.
+ gfx::Rect adjusted_work_area_;
// Panel to drag.
size_t dragging_panel_index_;
@@ -119,6 +158,12 @@
// to when the dragging ends.
gfx::Rect dragging_panel_bounds_;
+ scoped_refptr<AutoHidingDesktopBar> auto_hiding_desktop_bar_;
+
+ TitlebarAction delayed_titlebar_action_;
+
+ ScopedRunnableMethodFactory<PanelManager> method_factory_;
+
static const int kPanelsHorizontalSpacing = 4;
DISALLOW_COPY_AND_ASSIGN(PanelManager);
« 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