Index: ash/common/wm/window_state.h |
diff --git a/ash/common/wm/window_state.h b/ash/common/wm/window_state.h |
deleted file mode 100644 |
index 53a5c159896772ae3b92705902db981d45830512..0000000000000000000000000000000000000000 |
--- a/ash/common/wm/window_state.h |
+++ /dev/null |
@@ -1,397 +0,0 @@ |
-// Copyright 2013 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_WM_WINDOW_STATE_H_ |
-#define ASH_COMMON_WM_WINDOW_STATE_H_ |
- |
-#include <memory> |
- |
-#include "ash/ash_export.h" |
-#include "ash/common/wm/drag_details.h" |
-#include "ash/common/wm/wm_types.h" |
-#include "base/gtest_prod_util.h" |
-#include "base/macros.h" |
-#include "base/observer_list.h" |
-#include "ui/base/ui_base_types.h" |
- |
-namespace aura { |
-class Window; |
-} |
- |
-namespace gfx { |
-class Rect; |
-} |
- |
-namespace ash { |
-class LockWindowState; |
-class MaximizeModeWindowState; |
-class WmWindow; |
- |
-namespace wm { |
-class WindowStateDelegate; |
-class WindowStateObserver; |
-class WMEvent; |
- |
-// WindowState manages and defines ash specific window state and |
-// behavior. Ash specific per-window state (such as ones that controls |
-// window manager behavior) and ash specific window behavior (such as |
-// maximize, minimize, snap sizing etc) should be added here instead |
-// of defining separate functions (like |MaximizeWindow(aura::Window* |
-// window)|) or using aura Window property. |
-// The WindowState gets created when first accessed by |
-// |wm::GetWindowState|, and deleted when the window is deleted. |
-// Prefer using this class instead of passing aura::Window* around in |
-// ash code as this is often what you need to interact with, and |
-// accessing the window using |window()| is cheap. |
-class ASH_EXPORT WindowState { |
- public: |
- // A subclass of State class represents one of the window's states |
- // that corresponds to WindowStateType in Ash environment, e.g. |
- // maximized, minimized or side snapped, as subclass. |
- // Each subclass defines its own behavior and transition for each WMEvent. |
- class State { |
- public: |
- State() {} |
- virtual ~State() {} |
- |
- // Update WindowState based on |event|. |
- virtual void OnWMEvent(WindowState* window_state, const WMEvent* event) = 0; |
- |
- virtual WindowStateType GetType() const = 0; |
- |
- // Gets called when the state object became active and the managed window |
- // needs to be adjusted to the State's requirement. |
- // The passed |previous_state| may be used to properly implement state |
- // transitions such as bound animations from the previous state. |
- // Note: This only gets called when the state object gets changed. |
- virtual void AttachState(WindowState* window_state, |
- State* previous_state) = 0; |
- |
- // Gets called before the state objects gets deactivated / detached from the |
- // window, so that it can save the various states it is interested in. |
- // Note: This only gets called when the state object gets changed. |
- virtual void DetachState(WindowState* window_state) = 0; |
- |
- private: |
- DISALLOW_COPY_AND_ASSIGN(State); |
- }; |
- |
- // Call GetWindowState() to instantiate this class. |
- virtual ~WindowState(); |
- |
- WmWindow* window() { return window_; } |
- const WmWindow* window() const { return window_; } |
- |
- bool HasDelegate() const; |
- void SetDelegate(std::unique_ptr<WindowStateDelegate> delegate); |
- |
- // Returns the window's current ash state type. |
- // Refer to WindowStateType definition in wm_types.h as for why Ash |
- // has its own state type. |
- WindowStateType GetStateType() const; |
- |
- // Predicates to check window state. |
- bool IsMinimized() const; |
- bool IsMaximized() const; |
- bool IsFullscreen() const; |
- bool IsSnapped() const; |
- bool IsPinned() const; |
- bool IsTrustedPinned() const; |
- |
- // True if the window's state type is WINDOW_STATE_TYPE_MAXIMIZED, |
- // WINDOW_STATE_TYPE_FULLSCREEN or WINDOW_STATE_TYPE_PINNED. |
- bool IsMaximizedOrFullscreenOrPinned() const; |
- |
- // True if the window's state type is WINDOW_STATE_TYPE_NORMAL or |
- // WINDOW_STATE_TYPE_DEFAULT. |
- bool IsNormalStateType() const; |
- |
- bool IsNormalOrSnapped() const; |
- |
- bool IsActive() const; |
- bool IsDocked() const; |
- |
- // Returns true if the window's location can be controlled by the user. |
- bool IsUserPositionable() const; |
- |
- // Checks if the window can change its state accordingly. |
- bool CanMaximize() const; |
- bool CanMinimize() const; |
- bool CanResize() const; |
- bool CanSnap() const; |
- bool CanActivate() const; |
- |
- // Returns true if the window has restore bounds. |
- bool HasRestoreBounds() const; |
- |
- // These methods use aura::WindowProperty to change the window's state |
- // instead of using WMEvent directly. This is to use the same mechanism as |
- // what views::Widget is using. |
- void Maximize(); |
- void Minimize(); |
- void Unminimize(); |
- |
- void Activate(); |
- void Deactivate(); |
- |
- // Set the window state to normal. |
- // TODO(oshima): Change to use RESTORE event. |
- void Restore(); |
- |
- // Caches, then disables always on top state and then stacks |window_| below |
- // |window_on_top| if a |window_| is currently in always on top state. |
- void DisableAlwaysOnTop(WmWindow* window_on_top); |
- |
- // Restores always on top state that a window might have cached. |
- void RestoreAlwaysOnTop(); |
- |
- // Invoked when a WMevent occurs, which drives the internal |
- // state machine. |
- void OnWMEvent(const WMEvent* event); |
- |
- // TODO(oshima): Try hiding these methods and making them accessible only to |
- // state impl. State changes should happen through events (as much |
- // as possible). |
- |
- // Saves the current bounds to be used as a restore bounds. |
- void SaveCurrentBoundsForRestore(); |
- |
- // Same as |GetRestoreBoundsInScreen| except that it returns the |
- // bounds in the parent's coordinates. |
- gfx::Rect GetRestoreBoundsInParent() const; |
- |
- // Returns the restore bounds property on the window in the virtual screen |
- // coordinates. The bounds can be NULL if the bounds property does not |
- // exist for the window. The window owns the bounds object. |
- gfx::Rect GetRestoreBoundsInScreen() const; |
- |
- // Same as |SetRestoreBoundsInScreen| except that the bounds is in the |
- // parent's coordinates. |
- void SetRestoreBoundsInParent(const gfx::Rect& bounds_in_parent); |
- |
- // Sets the restore bounds property on the window in the virtual screen |
- // coordinates. Deletes existing bounds value if exists. |
- void SetRestoreBoundsInScreen(const gfx::Rect& bounds_in_screen); |
- |
- // Deletes and clears the restore bounds property on the window. |
- void ClearRestoreBounds(); |
- |
- // Replace the State object of a window with a state handler which can |
- // implement a new window manager type. The passed object will be owned |
- // by this object and the returned object will be owned by the caller. |
- std::unique_ptr<State> SetStateObject(std::unique_ptr<State> new_state); |
- |
- // True if the window should be unminimized to the restore bounds, as |
- // opposed to the window's current bounds. |unminimized_to_restore_bounds_| is |
- // reset to the default value after the window is unminimized. |
- bool unminimize_to_restore_bounds() const { |
- return unminimize_to_restore_bounds_; |
- } |
- void set_unminimize_to_restore_bounds(bool value) { |
- unminimize_to_restore_bounds_ = value; |
- } |
- |
- // Gets/sets whether the shelf should be hidden when this window is |
- // fullscreen. |
- bool hide_shelf_when_fullscreen() const { |
- return hide_shelf_when_fullscreen_; |
- } |
- |
- void set_hide_shelf_when_fullscreen(bool value) { |
- hide_shelf_when_fullscreen_ = value; |
- } |
- |
- // If the minimum visibility is true, ash will try to keep a |
- // minimum amount of the window is always visible on the work area |
- // when shown. |
- // TODO(oshima): Consolidate this and window_position_managed |
- // into single parameter to control the window placement. |
- bool minimum_visibility() const { return minimum_visibility_; } |
- void set_minimum_visibility(bool minimum_visibility) { |
- minimum_visibility_ = minimum_visibility; |
- } |
- |
- // Specifies if the window can be dragged by the user via the caption or not. |
- bool can_be_dragged() const { return can_be_dragged_; } |
- void set_can_be_dragged(bool can_be_dragged) { |
- can_be_dragged_ = can_be_dragged; |
- } |
- |
- // Gets/Sets the bounds of the window before it was moved by the auto window |
- // management. As long as it was not auto-managed, it will return NULL. |
- const gfx::Rect* pre_auto_manage_window_bounds() const { |
- return pre_auto_manage_window_bounds_.get(); |
- } |
- void SetPreAutoManageWindowBounds(const gfx::Rect& bounds); |
- |
- // Layout related properties |
- |
- void AddObserver(WindowStateObserver* observer); |
- void RemoveObserver(WindowStateObserver* observer); |
- |
- // Whether the window is being dragged. |
- bool is_dragged() const { return !!drag_details_; } |
- |
- // Whether or not the window's position can be managed by the |
- // auto management logic. |
- bool window_position_managed() const { return window_position_managed_; } |
- void set_window_position_managed(bool window_position_managed) { |
- window_position_managed_ = window_position_managed; |
- } |
- |
- // Whether or not the window's position or size was changed by a user. |
- bool bounds_changed_by_user() const { return bounds_changed_by_user_; } |
- void set_bounds_changed_by_user(bool bounds_changed_by_user); |
- |
- // True if the window is ignored by the shelf layout manager for |
- // purposes of darkening the shelf. |
- bool ignored_by_shelf() const { return ignored_by_shelf_; } |
- void set_ignored_by_shelf(bool ignored_by_shelf) { |
- ignored_by_shelf_ = ignored_by_shelf; |
- } |
- |
- // True if the window should be offered a chance to consume special system |
- // keys such as brightness, volume, etc. that are usually handled by the |
- // shell. |
- bool can_consume_system_keys() const { return can_consume_system_keys_; } |
- void set_can_consume_system_keys(bool can_consume_system_keys) { |
- can_consume_system_keys_ = can_consume_system_keys; |
- } |
- |
- // True if the window is in "immersive full screen mode" which is slightly |
- // different from the normal fullscreen mode by allowing the user to reveal |
- // the top portion of the window through a touch / mouse gesture. It might |
- // also allow the shelf to be shown in some situations. |
- bool in_immersive_fullscreen() const { return in_immersive_fullscreen_; } |
- void set_in_immersive_fullscreen(bool enable) { |
- in_immersive_fullscreen_ = enable; |
- } |
- |
- // True if the window should not adjust the window's bounds when |
- // virtual keyboard bounds changes. |
- // TODO(oshima): This is hack. Replace this with proper |
- // implementation based on EnsureCaretNotInRect. |
- bool ignore_keyboard_bounds_change() const { |
- return ignore_keyboard_bounds_change_; |
- } |
- void set_ignore_keyboard_bounds_change(bool ignore_keyboard_bounds_change) { |
- ignore_keyboard_bounds_change_ = ignore_keyboard_bounds_change; |
- } |
- |
- // True if the window's bounds can be updated using SET_BOUNDS event in |
- // maiximzed/fullscreen mode. |
- void set_allow_set_bounds_in_maximized(bool value) { |
- allow_set_bounds_in_maximized_ = value; |
- } |
- bool allow_set_bounds_in_maximized() const { |
- return allow_set_bounds_in_maximized_; |
- } |
- |
- // Creates and takes ownership of a pointer to DragDetails when resizing is |
- // active. This should be done before a resizer gets created. |
- void CreateDragDetails(const gfx::Point& point_in_parent, |
- int window_component, |
- aura::client::WindowMoveSource source); |
- |
- // Deletes and clears a pointer to DragDetails. This should be done when the |
- // resizer gets destroyed. |
- void DeleteDragDetails(); |
- |
- // Sets the currently stored restore bounds and clears the restore bounds. |
- void SetAndClearRestoreBounds(); |
- |
- // Returns a pointer to DragDetails during drag operations. |
- const DragDetails* drag_details() const { return drag_details_.get(); } |
- DragDetails* drag_details() { return drag_details_.get(); } |
- |
- // Called from the associated WmWindow once the show state changes. |
- void OnWindowShowStateChanged(); |
- |
- protected: |
- explicit WindowState(WmWindow* window); |
- |
- private: |
- friend class DefaultState; |
- friend class ash::LockWindowState; |
- friend class ash::MaximizeModeWindowState; |
- FRIEND_TEST_ALL_PREFIXES(WindowAnimationsTest, CrossFadeToBounds); |
- FRIEND_TEST_ALL_PREFIXES(WindowAnimationsTest, |
- CrossFadeToBoundsFromTransform); |
- |
- WindowStateDelegate* delegate() { return delegate_.get(); } |
- |
- // Returns the window's current always_on_top state. |
- bool GetAlwaysOnTop() const; |
- |
- // Returns the window's current show state. |
- ui::WindowShowState GetShowState() const; |
- |
- // Sets the window's bounds in screen coordinates. |
- void SetBoundsInScreen(const gfx::Rect& bounds_in_screen); |
- |
- // Adjusts the |bounds| so that they are flush with the edge of the |
- // workspace if the window represented by |window_state| is side snapped. |
- void AdjustSnappedBounds(gfx::Rect* bounds); |
- |
- // Updates the window show state according to the current window state type. |
- // Note that this does not update the window bounds. |
- void UpdateWindowShowStateFromStateType(); |
- |
- void NotifyPreStateTypeChange(WindowStateType old_window_state_type); |
- void NotifyPostStateTypeChange(WindowStateType old_window_state_type); |
- |
- // Sets |bounds| as is and ensure the layer is aligned with pixel boundary. |
- void SetBoundsDirect(const gfx::Rect& bounds); |
- |
- // Sets the window's |bounds| with constraint where the size of the |
- // new bounds will not exceeds the size of the work area. |
- void SetBoundsConstrained(const gfx::Rect& bounds); |
- |
- // Sets the wndow's |bounds| and transitions to the new bounds with |
- // a scale animation. |
- void SetBoundsDirectAnimated(const gfx::Rect& bounds); |
- |
- // Sets the window's |bounds| and transition to the new bounds with |
- // a cross fade animation. |
- void SetBoundsDirectCrossFade(const gfx::Rect& bounds); |
- |
- // The owner of this window settings. |
- WmWindow* window_; |
- std::unique_ptr<WindowStateDelegate> delegate_; |
- |
- bool window_position_managed_; |
- bool bounds_changed_by_user_; |
- bool ignored_by_shelf_; |
- bool can_consume_system_keys_; |
- std::unique_ptr<DragDetails> drag_details_; |
- |
- bool unminimize_to_restore_bounds_; |
- bool in_immersive_fullscreen_; |
- bool ignore_keyboard_bounds_change_ = false; |
- bool hide_shelf_when_fullscreen_; |
- bool minimum_visibility_; |
- bool can_be_dragged_; |
- bool cached_always_on_top_; |
- bool allow_set_bounds_in_maximized_ = false; |
- |
- // A property to remember the window position which was set before the |
- // auto window position manager changed the window bounds, so that it can get |
- // restored when only this one window gets shown. |
- std::unique_ptr<gfx::Rect> pre_auto_manage_window_bounds_; |
- |
- base::ObserverList<WindowStateObserver> observer_list_; |
- |
- // True to ignore a property change event to avoid reentrance in |
- // UpdateWindowStateType() |
- bool ignore_property_change_; |
- |
- std::unique_ptr<State> current_state_; |
- |
- DISALLOW_COPY_AND_ASSIGN(WindowState); |
-}; |
- |
-} // namespace wm |
-} // namespace ash |
- |
-#endif // ASH_COMMON_WM_WINDOW_STATE_H_ |