Index: ash/wm/shelf_layout_manager.h |
diff --git a/ash/wm/shelf_layout_manager.h b/ash/wm/shelf_layout_manager.h |
deleted file mode 100644 |
index 01775bb573cee02467ef25d06313e2d902abd2c5..0000000000000000000000000000000000000000 |
--- a/ash/wm/shelf_layout_manager.h |
+++ /dev/null |
@@ -1,338 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#ifndef ASH_WM_SHELF_LAYOUT_MANAGER_H_ |
-#define ASH_WM_SHELF_LAYOUT_MANAGER_H_ |
- |
-#include "ash/ash_export.h" |
-#include "ash/launcher/launcher.h" |
-#include "ash/shelf_types.h" |
-#include "ash/shell_observer.h" |
-#include "base/basictypes.h" |
-#include "base/compiler_specific.h" |
-#include "base/logging.h" |
-#include "base/observer_list.h" |
-#include "base/timer.h" |
-#include "ui/aura/client/activation_change_observer.h" |
-#include "ui/aura/layout_manager.h" |
-#include "ui/gfx/insets.h" |
-#include "ui/gfx/rect.h" |
- |
-namespace aura { |
-class RootWindow; |
-} |
- |
-namespace ui { |
-class GestureEvent; |
-} |
- |
-namespace ash { |
-class ScreenAsh; |
-namespace internal { |
- |
-class ShelfLayoutManagerTest; |
-class StatusAreaWidget; |
-class WorkspaceController; |
- |
-// ShelfLayoutManager is the layout manager responsible for the launcher and |
-// status widgets. The launcher is given the total available width and told the |
-// width of the status area. This allows the launcher to draw the background and |
-// layout to the status area. |
-// To respond to bounds changes in the status area StatusAreaLayoutManager works |
-// closely with ShelfLayoutManager. |
-class ASH_EXPORT ShelfLayoutManager : |
- public aura::LayoutManager, |
- public ash::ShellObserver, |
- public aura::client::ActivationChangeObserver { |
- public: |
- class ASH_EXPORT Observer { |
- public: |
- // Called when the target ShelfLayoutManager will be deleted. |
- virtual void WillDeleteShelf() {} |
- |
- // Called when the visibility change is scheduled. |
- virtual void WillChangeVisibilityState(ShelfVisibilityState new_state) {} |
- |
- // Called when the auto hide state is changed. |
- virtual void OnAutoHideStateChanged(ShelfAutoHideState new_state) {} |
- }; |
- |
- // We reserve a small area at the bottom of the workspace area to ensure that |
- // the bottom-of-window resize handle can be hit. |
- static const int kWorkspaceAreaBottomInset; |
- |
- // Size of the shelf when auto-hidden. |
- static const int kAutoHideSize; |
- |
- explicit ShelfLayoutManager(StatusAreaWidget* status); |
- virtual ~ShelfLayoutManager(); |
- |
- // Sets the ShelfAutoHideBehavior. See enum description for details. |
- void SetAutoHideBehavior(ShelfAutoHideBehavior behavior); |
- ShelfAutoHideBehavior auto_hide_behavior() const { |
- return auto_hide_behavior_; |
- } |
- |
- // Sets the alignment. Returns true if the alignment is changed. Otherwise, |
- // returns false. |
- bool SetAlignment(ShelfAlignment alignment); |
- ShelfAlignment GetAlignment() const { return alignment_; } |
- |
- void set_workspace_controller(WorkspaceController* controller) { |
- workspace_controller_ = controller; |
- } |
- |
- views::Widget* launcher_widget() { |
- return launcher_ ? launcher_->widget() : NULL; |
- } |
- const views::Widget* launcher_widget() const { |
- return launcher_ ? launcher_->widget() : NULL; |
- } |
- StatusAreaWidget* status_area_widget() { return status_area_widget_; } |
- |
- bool in_layout() const { return in_layout_; } |
- |
- // Returns whether the shelf and its contents (launcher, status) are visible |
- // on the screen. |
- bool IsVisible() const; |
- |
- // The launcher is typically created after the layout manager. |
- void SetLauncher(Launcher* launcher); |
- Launcher* launcher() { return launcher_; } |
- |
- // Returns the ideal bounds of the shelf assuming it is visible. |
- gfx::Rect GetIdealBounds(); |
- |
- // Stops any animations and sets the bounds of the launcher and status |
- // widgets. |
- void LayoutShelf(); |
- |
- // Returns shelf visibility state based on current value of auto hide |
- // behavior setting. |
- ShelfVisibilityState CalculateShelfVisibility(); |
- |
- // Returns shelf visibility state based on current value of auto hide |
- // behavior setting. |
- ShelfVisibilityState CalculateShelfVisibilityWhileDragging(); |
- |
- // Updates the visibility state. |
- void UpdateVisibilityState(); |
- |
- // Invoked by the shelf/launcher when the auto-hide state may have changed. |
- void UpdateAutoHideState(); |
- |
- ShelfVisibilityState visibility_state() const { |
- return state_.visibility_state; |
- } |
- ShelfAutoHideState auto_hide_state() const { return state_.auto_hide_state; } |
- |
- // Sets whether any windows overlap the shelf. If a window overlaps the shelf |
- // the shelf renders slightly differently. |
- void SetWindowOverlapsShelf(bool value); |
- bool window_overlaps_shelf() const { return window_overlaps_shelf_; } |
- |
- void AddObserver(Observer* observer); |
- void RemoveObserver(Observer* observer); |
- |
- // Gesture dragging related functions: |
- void StartGestureDrag(const ui::GestureEvent& gesture); |
- enum DragState { |
- DRAG_SHELF, |
- DRAG_TRAY |
- }; |
- // Returns DRAG_SHELF if the gesture should continue to drag the entire shelf. |
- // Returns DRAG_TRAY if the gesture can start dragging the tray-bubble from |
- // this point on. |
- DragState UpdateGestureDrag(const ui::GestureEvent& gesture); |
- void CompleteGestureDrag(const ui::GestureEvent& gesture); |
- void CancelGestureDrag(); |
- |
- // Overridden from aura::LayoutManager: |
- virtual void OnWindowResized() OVERRIDE; |
- virtual void OnWindowAddedToLayout(aura::Window* child) OVERRIDE; |
- virtual void OnWillRemoveWindowFromLayout(aura::Window* child) OVERRIDE; |
- virtual void OnWindowRemovedFromLayout(aura::Window* child) OVERRIDE; |
- virtual void OnChildWindowVisibilityChanged(aura::Window* child, |
- bool visible) OVERRIDE; |
- virtual void SetChildBounds(aura::Window* child, |
- const gfx::Rect& requested_bounds) OVERRIDE; |
- |
- // Overridden from ash::ShellObserver: |
- virtual void OnLockStateChanged(bool locked) OVERRIDE; |
- |
- // Overriden from aura::client::ActivationChangeObserver: |
- virtual void OnWindowActivated(aura::Window* gained_active, |
- aura::Window* lost_active) OVERRIDE; |
- |
- // TODO(harrym|oshima): These templates will be moved to |
- // new Shelf class. |
- // A helper function that provides a shortcut for choosing |
- // values specific to a shelf alignment. |
- template<typename T> |
- T SelectValueForShelfAlignment(T bottom, T left, T right, T top) const { |
- switch (alignment_) { |
- case SHELF_ALIGNMENT_BOTTOM: |
- return bottom; |
- case SHELF_ALIGNMENT_LEFT: |
- return left; |
- case SHELF_ALIGNMENT_RIGHT: |
- return right; |
- case SHELF_ALIGNMENT_TOP: |
- return top; |
- } |
- NOTREACHED(); |
- return right; |
- } |
- |
- template<typename T> |
- T PrimaryAxisValue(T horizontal, T vertical) const { |
- return IsHorizontalAlignment() ? horizontal : vertical; |
- } |
- |
- // Is the shelf's alignment horizontal? |
- bool IsHorizontalAlignment() const; |
- |
- // Returns a ShelfLayoutManager on the display which has a launcher for |
- // given |window|. See RootWindowController::ForLauncher for more info. |
- static ShelfLayoutManager* ForLauncher(aura::Window* window); |
- |
- private: |
- class AutoHideEventFilter; |
- class UpdateShelfObserver; |
- friend class ash::ScreenAsh; |
- friend class ShelfLayoutManagerTest; |
- |
- struct TargetBounds { |
- TargetBounds(); |
- |
- float opacity; |
- gfx::Rect launcher_bounds_in_root; |
- gfx::Rect status_bounds_in_root; |
- gfx::Insets work_area_insets; |
- }; |
- |
- struct State { |
- State() : visibility_state(SHELF_VISIBLE), |
- auto_hide_state(SHELF_AUTO_HIDE_HIDDEN), |
- is_screen_locked(false) {} |
- |
- // Returns true if the two states are considered equal. As |
- // |auto_hide_state| only matters if |visibility_state| is |
- // |SHELF_AUTO_HIDE|, Equals() ignores the |auto_hide_state| as |
- // appropriate. |
- bool Equals(const State& other) const { |
- return other.visibility_state == visibility_state && |
- (visibility_state != SHELF_AUTO_HIDE || |
- other.auto_hide_state == auto_hide_state) && |
- other.is_screen_locked == is_screen_locked; |
- } |
- |
- ShelfVisibilityState visibility_state; |
- ShelfAutoHideState auto_hide_state; |
- bool is_screen_locked; |
- }; |
- |
- // Sets the visibility of the shelf to |state|. |
- void SetState(ShelfVisibilityState visibility_state); |
- |
- // Stops any animations. |
- void StopAnimating(); |
- |
- // Returns the width (if aligned to the side) or height (if aligned to the |
- // bottom). |
- void GetShelfSize(int* width, int* height); |
- |
- // Insets |bounds| by |inset| on the edge the shelf is aligned to. |
- void AdjustBoundsBasedOnAlignment(int inset, gfx::Rect* bounds) const; |
- |
- // Calculates the target bounds assuming visibility of |visible|. |
- void CalculateTargetBounds(const State& state, TargetBounds* target_bounds); |
- |
- // Updates the target bounds if a gesture-drag is in progress. This is only |
- // used by |CalculateTargetBounds()|. |
- void UpdateTargetBoundsForGesture(TargetBounds* target_bounds) const; |
- |
- // Updates the background of the shelf. |
- void UpdateShelfBackground(BackgroundAnimator::ChangeType type); |
- |
- // Returns whether the launcher should draw a background. |
- bool GetLauncherPaintsBackground() const; |
- |
- // Updates the auto hide state immediately. |
- void UpdateAutoHideStateNow(); |
- |
- // Returns the AutoHideState. This value is determined from the launcher and |
- // tray. |
- ShelfAutoHideState CalculateAutoHideState( |
- ShelfVisibilityState visibility_state) const; |
- |
- // Updates the hit test bounds override for launcher and status area. |
- void UpdateHitTestBounds(); |
- |
- // Returns true if |window| is a descendant of the shelf. |
- bool IsShelfWindow(aura::Window* window); |
- |
- int GetWorkAreaSize(const State& state, int size) const; |
- |
- // The RootWindow is cached so that we don't invoke Shell::GetInstance() from |
- // our destructor. We avoid that as at the time we're deleted Shell is being |
- // deleted too. |
- aura::RootWindow* root_window_; |
- |
- // True when inside LayoutShelf method. Used to prevent calling LayoutShelf |
- // again from SetChildBounds(). |
- bool in_layout_; |
- |
- // See description above setter. |
- ShelfAutoHideBehavior auto_hide_behavior_; |
- |
- ShelfAlignment alignment_; |
- |
- // Current state. |
- State state_; |
- |
- Launcher* launcher_; |
- StatusAreaWidget* status_area_widget_; |
- |
- WorkspaceController* workspace_controller_; |
- |
- // Do any windows overlap the shelf? This is maintained by WorkspaceManager. |
- bool window_overlaps_shelf_; |
- |
- base::OneShotTimer<ShelfLayoutManager> auto_hide_timer_; |
- |
- // EventFilter used to detect when user moves the mouse over the launcher to |
- // trigger showing the launcher. |
- scoped_ptr<AutoHideEventFilter> event_filter_; |
- |
- ObserverList<Observer> observers_; |
- |
- // The shelf reacts to gesture-drags, and can be set to auto-hide for certain |
- // gestures. Some shelf behaviour (e.g. visibility state, background color |
- // etc.) are affected by various stages of the drag. The enum keeps track of |
- // the present status of the gesture drag. |
- enum GestureDragStatus { |
- GESTURE_DRAG_NONE, |
- GESTURE_DRAG_IN_PROGRESS, |
- GESTURE_DRAG_COMPLETE_IN_PROGRESS |
- }; |
- GestureDragStatus gesture_drag_status_; |
- |
- // Tracks the amount of the drag. The value is only valid when |
- // |gesture_drag_status_| is set to GESTURE_DRAG_IN_PROGRESS. |
- float gesture_drag_amount_; |
- |
- // Manage the auto-hide state during the gesture. |
- ShelfAutoHideState gesture_drag_auto_hide_state_; |
- |
- // Used to delay updating shelf background. |
- UpdateShelfObserver* update_shelf_observer_; |
- |
- DISALLOW_COPY_AND_ASSIGN(ShelfLayoutManager); |
-}; |
- |
-} // namespace internal |
-} // namespace ash |
- |
-#endif // ASH_WM_SHELF_LAYOUT_MANAGER_H_ |