| Index: ash/common/shelf/shelf_layout_manager.h
|
| diff --git a/ash/common/shelf/shelf_layout_manager.h b/ash/common/shelf/shelf_layout_manager.h
|
| deleted file mode 100644
|
| index 87f598a8bd6267c271b5aa9a1230e5e023772d4b..0000000000000000000000000000000000000000
|
| --- a/ash/common/shelf/shelf_layout_manager.h
|
| +++ /dev/null
|
| @@ -1,365 +0,0 @@
|
| -// Copyright 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_COMMON_SHELF_SHELF_LAYOUT_MANAGER_H_
|
| -#define ASH_COMMON_SHELF_SHELF_LAYOUT_MANAGER_H_
|
| -
|
| -#include <memory>
|
| -
|
| -#include "ash/ash_export.h"
|
| -#include "ash/common/session/session_state_observer.h"
|
| -#include "ash/common/shelf/wm_shelf.h"
|
| -#include "ash/common/shell_observer.h"
|
| -#include "ash/common/wm/dock/docked_window_layout_manager_observer.h"
|
| -#include "ash/common/wm/lock_state_observer.h"
|
| -#include "ash/common/wm/wm_snap_to_pixel_layout_manager.h"
|
| -#include "ash/common/wm/workspace/workspace_types.h"
|
| -#include "ash/common/wm_activation_observer.h"
|
| -#include "ash/public/cpp/shelf_types.h"
|
| -#include "base/macros.h"
|
| -#include "base/observer_list.h"
|
| -#include "base/timer/timer.h"
|
| -#include "ui/gfx/geometry/insets.h"
|
| -#include "ui/gfx/geometry/rect.h"
|
| -#include "ui/keyboard/keyboard_controller_observer.h"
|
| -
|
| -namespace ui {
|
| -class ImplicitAnimationObserver;
|
| -class MouseEvent;
|
| -}
|
| -
|
| -namespace ash {
|
| -
|
| -enum class AnimationChangeType;
|
| -class PanelLayoutManagerTest;
|
| -class ShelfLayoutManagerObserver;
|
| -class ShelfLayoutManagerTest;
|
| -class ShelfWidget;
|
| -class WmShelf;
|
| -
|
| -// ShelfLayoutManager is the layout manager responsible for the shelf and
|
| -// status widgets. The shelf is given the total available width and told the
|
| -// width of the status area. This allows the shelf to draw the background and
|
| -// layout to the status area.
|
| -// To respond to bounds changes in the status area StatusAreaLayoutManager works
|
| -// closely with ShelfLayoutManager.
|
| -// On mus, widget bounds management is handled by the window manager.
|
| -class ASH_EXPORT ShelfLayoutManager
|
| - : public ShellObserver,
|
| - public WmActivationObserver,
|
| - public DockedWindowLayoutManagerObserver,
|
| - public keyboard::KeyboardControllerObserver,
|
| - public LockStateObserver,
|
| - public wm::WmSnapToPixelLayoutManager,
|
| - public SessionStateObserver {
|
| - public:
|
| - ShelfLayoutManager(ShelfWidget* shelf_widget, WmShelf* wm_shelf);
|
| - ~ShelfLayoutManager() override;
|
| -
|
| - bool updating_bounds() const { return updating_bounds_; }
|
| -
|
| - // Clears internal data for shutdown process.
|
| - void PrepareForShutdown();
|
| -
|
| - // Returns whether the shelf and its contents (shelf, status) are visible
|
| - // on the screen.
|
| - bool IsVisible() const;
|
| -
|
| - // Returns the ideal bounds of the shelf assuming it is visible.
|
| - gfx::Rect GetIdealBounds();
|
| -
|
| - // Returns the preferred size of the shelf for the target visibility state.
|
| - gfx::Size GetPreferredSize();
|
| -
|
| - // Returns the docked area bounds.
|
| - const gfx::Rect& dock_bounds() const { return dock_bounds_; }
|
| -
|
| - // Returns the bounds within the root window not occupied by the shelf nor the
|
| - // virtual keyboard.
|
| - const gfx::Rect& user_work_area_bounds() const {
|
| - return user_work_area_bounds_;
|
| - }
|
| -
|
| - // Stops any animations and sets the bounds of the shelf and status widgets.
|
| - void LayoutShelfAndUpdateBounds(bool change_work_area);
|
| -
|
| - // Stops any animations, sets the bounds of the shelf and status widgets, and
|
| - // changes the work area
|
| - void LayoutShelf();
|
| -
|
| - // Returns shelf visibility state based on current value of auto hide
|
| - // behavior setting.
|
| - ShelfVisibilityState CalculateShelfVisibility();
|
| -
|
| - // Updates the visibility state.
|
| - void UpdateVisibilityState();
|
| -
|
| - // Invoked by the shelf when the auto-hide state may have changed.
|
| - void UpdateAutoHideState();
|
| -
|
| - // Updates the auto-hide state for certain events.
|
| - // TODO(mash): Add similar event handling support for mash.
|
| - void UpdateAutoHideForMouseEvent(ui::MouseEvent* event, WmWindow* target);
|
| - void UpdateAutoHideForGestureEvent(ui::GestureEvent* event, WmWindow* target);
|
| -
|
| - ShelfVisibilityState visibility_state() const {
|
| - return state_.visibility_state;
|
| - }
|
| - ShelfAutoHideState auto_hide_state() const { return state_.auto_hide_state; }
|
| -
|
| - ShelfWidget* shelf_widget() { return shelf_widget_; }
|
| -
|
| - // 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(ShelfLayoutManagerObserver* observer);
|
| - void RemoveObserver(ShelfLayoutManagerObserver* observer);
|
| -
|
| - // Processes a gesture event and updates the status of the shelf when
|
| - // appropriate. Returns true if the gesture has been handled and it should not
|
| - // be processed any further, false otherwise.
|
| - bool ProcessGestureEvent(const ui::GestureEvent& event);
|
| -
|
| - // Set an animation duration override for the show / hide animation of the
|
| - // shelf. Specifying 0 leads to use the default.
|
| - void SetAnimationDurationOverride(int duration_override_in_ms);
|
| -
|
| - // Overridden from wm::WmSnapToPixelLayoutManager:
|
| - void OnWindowResized() override;
|
| - void SetChildBounds(WmWindow* child,
|
| - const gfx::Rect& requested_bounds) override;
|
| -
|
| - // Overridden from ShellObserver:
|
| - void OnShelfAutoHideBehaviorChanged(WmWindow* root_window) override;
|
| - void OnPinnedStateChanged(WmWindow* pinned_window) override;
|
| -
|
| - // Overridden from WmActivationObserver:
|
| - void OnWindowActivated(WmWindow* gained_active,
|
| - WmWindow* lost_active) override;
|
| -
|
| - // Overridden from keyboard::KeyboardControllerObserver:
|
| - void OnKeyboardBoundsChanging(const gfx::Rect& new_bounds) override;
|
| - void OnKeyboardClosed() override;
|
| -
|
| - // Overridden from LockStateObserver:
|
| - void OnLockStateEvent(LockStateObserver::EventType event) override;
|
| -
|
| - // Overridden from SessionStateObserver:
|
| - void SessionStateChanged(session_manager::SessionState state) override;
|
| -
|
| - // TODO(harrym|oshima): These templates will be moved to a new Shelf class.
|
| - // A helper function for choosing values specific to a shelf alignment.
|
| - template <typename T>
|
| - T SelectValueForShelfAlignment(T bottom, T left, T right) const {
|
| - switch (wm_shelf_->GetAlignment()) {
|
| - case SHELF_ALIGNMENT_BOTTOM:
|
| - case SHELF_ALIGNMENT_BOTTOM_LOCKED:
|
| - return bottom;
|
| - case SHELF_ALIGNMENT_LEFT:
|
| - return left;
|
| - case SHELF_ALIGNMENT_RIGHT:
|
| - return right;
|
| - }
|
| - NOTREACHED();
|
| - return right;
|
| - }
|
| -
|
| - template <typename T>
|
| - T PrimaryAxisValue(T horizontal, T vertical) const {
|
| - return wm_shelf_->IsHorizontalAlignment() ? horizontal : vertical;
|
| - }
|
| -
|
| - // Returns how the shelf background should be painted.
|
| - ShelfBackgroundType GetShelfBackgroundType() const;
|
| -
|
| - // Set the height of the ChromeVox panel, which takes away space from the
|
| - // available work area from the top of the screen.
|
| - void SetChromeVoxPanelHeight(int height);
|
| -
|
| - private:
|
| - class UpdateShelfObserver;
|
| - friend class PanelLayoutManagerTest;
|
| - friend class ShelfLayoutManagerTest;
|
| - friend class WebNotificationTrayTest;
|
| -
|
| - struct TargetBounds {
|
| - TargetBounds();
|
| - ~TargetBounds();
|
| -
|
| - float opacity;
|
| - float status_opacity;
|
| - gfx::Rect shelf_bounds_in_root;
|
| - gfx::Rect shelf_bounds_in_shelf;
|
| - gfx::Rect status_bounds_in_shelf;
|
| - gfx::Insets work_area_insets;
|
| - };
|
| -
|
| - struct State {
|
| - State();
|
| -
|
| - // Returns true when a secondary user is being added to an existing session.
|
| - bool IsAddingSecondaryUser() const;
|
| -
|
| - bool IsScreenLocked() const;
|
| -
|
| - // 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;
|
| -
|
| - ShelfVisibilityState visibility_state;
|
| - ShelfAutoHideState auto_hide_state;
|
| - wm::WorkspaceWindowState window_state;
|
| - // True when the system is in the cancelable, pre-lock screen animation.
|
| - bool pre_lock_screen_animation_active;
|
| - session_manager::SessionState session_state;
|
| - };
|
| -
|
| - // Sets the visibility of the shelf to |state|.
|
| - void SetState(ShelfVisibilityState visibility_state);
|
| -
|
| - // Updates the bounds and opacity of the shelf and status widgets.
|
| - // If |observer| is specified, it will be called back when the animations, if
|
| - // any, are complete. |change_work_area| specifies whether or not to update
|
| - // the work area of the screen.
|
| - void UpdateBoundsAndOpacity(const TargetBounds& target_bounds,
|
| - bool animate,
|
| - bool change_work_area,
|
| - ui::ImplicitAnimationObserver* observer);
|
| -
|
| - // Stops any animations and progresses them to the end.
|
| - void StopAnimating();
|
| -
|
| - // 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 if it has changed.
|
| - void MaybeUpdateShelfBackground(AnimationChangeType change_type);
|
| -
|
| - // Updates the auto hide state immediately.
|
| - void UpdateAutoHideStateNow();
|
| -
|
| - // Stops the auto hide timer and clears
|
| - // |mouse_over_shelf_when_auto_hide_timer_started_|.
|
| - void StopAutoHideTimer();
|
| -
|
| - // Returns the bounds of an additional region which can trigger showing the
|
| - // shelf. This region exists to make it easier to trigger showing the shelf
|
| - // when the shelf is auto hidden and the shelf is on the boundary between
|
| - // two displays.
|
| - gfx::Rect GetAutoHideShowShelfRegionInScreen() const;
|
| -
|
| - // Returns the AutoHideState. This value is determined from the shelf and
|
| - // tray.
|
| - ShelfAutoHideState CalculateAutoHideState(
|
| - ShelfVisibilityState visibility_state) const;
|
| -
|
| - // Returns true if |window| is a descendant of the shelf.
|
| - bool IsShelfWindow(WmWindow* window);
|
| -
|
| - int GetWorkAreaInsets(const State& state, int size) const;
|
| -
|
| - // Overridden from DockedWindowLayoutManagerObserver:
|
| - void OnDockBoundsChanging(
|
| - const gfx::Rect& dock_bounds,
|
| - DockedWindowLayoutManagerObserver::Reason reason) override;
|
| -
|
| - // Called when the LoginUI changes from visible to invisible.
|
| - void UpdateShelfVisibilityAfterLoginUIChange();
|
| -
|
| - // Compute |target_bounds| opacity based on gesture and shelf visibility.
|
| - float ComputeTargetOpacity(const State& state);
|
| -
|
| - // Returns true if there is a fullscreen window open that causes the shelf
|
| - // to be hidden.
|
| - bool IsShelfHiddenForFullscreen() const;
|
| -
|
| - // Gesture related functions:
|
| - void StartGestureDrag(const ui::GestureEvent& gesture);
|
| - void UpdateGestureDrag(const ui::GestureEvent& gesture);
|
| - void CompleteGestureDrag(const ui::GestureEvent& gesture);
|
| - void CancelGestureDrag();
|
| -
|
| - // True when inside UpdateBoundsAndOpacity() method. Used to prevent calling
|
| - // UpdateBoundsAndOpacity() again from SetChildBounds().
|
| - bool updating_bounds_;
|
| -
|
| - bool in_shutdown_ = false;
|
| -
|
| - // True if the last mouse event was a mouse drag.
|
| - bool in_mouse_drag_ = false;
|
| -
|
| - // Current state.
|
| - State state_;
|
| -
|
| - ShelfWidget* shelf_widget_;
|
| - WmShelf* wm_shelf_;
|
| -
|
| - // Do any windows overlap the shelf? This is maintained by WorkspaceManager.
|
| - bool window_overlaps_shelf_;
|
| -
|
| - base::OneShotTimer auto_hide_timer_;
|
| -
|
| - // Whether the mouse was over the shelf when the auto hide timer started.
|
| - // False when neither the auto hide timer nor the timer task are running.
|
| - bool mouse_over_shelf_when_auto_hide_timer_started_;
|
| -
|
| - base::ObserverList<ShelfLayoutManagerObserver> 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_CANCEL_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_;
|
| -
|
| - // The bounds of the keyboard.
|
| - gfx::Rect keyboard_bounds_;
|
| -
|
| - // The bounds of the dock.
|
| - gfx::Rect dock_bounds_;
|
| -
|
| - // The bounds within the root window not occupied by the shelf nor the virtual
|
| - // keyboard.
|
| - gfx::Rect user_work_area_bounds_;
|
| -
|
| - // The height of the ChromeVox panel at the top of the screen, which
|
| - // needs to be removed from the available work area.
|
| - int chromevox_panel_height_;
|
| -
|
| - // The show hide animation duration override or 0 for default.
|
| - int duration_override_in_ms_;
|
| -
|
| - // The current shelf background. Should not be assigned to directly, use
|
| - // MaybeUpdateShelfBackground() instead.
|
| - ShelfBackgroundType shelf_background_type_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(ShelfLayoutManager);
|
| -};
|
| -
|
| -} // namespace ash
|
| -
|
| -#endif // ASH_COMMON_SHELF_SHELF_LAYOUT_MANAGER_H_
|
|
|