| // Copyright 2014 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_LOCK_WINDOW_STATE_H_ |
| #define ASH_COMMON_WM_LOCK_WINDOW_STATE_H_ |
| |
| #include "ash/common/wm/window_state.h" |
| #include "base/macros.h" |
| |
| namespace ash { |
| |
| // The LockWindowState implementation which reduces all possible window |
| // states to maximized (or normal if can't be maximized)/minimized/full-screen |
| // and is applied only on lock (login) window container. |
| // LockWindowState implements Ash behavior without state machine. |
| class LockWindowState : public wm::WindowState::State { |
| public: |
| // The |window|'s state object will be modified to use this new window mode |
| // state handler. |
| explicit LockWindowState(WmWindow* window); |
| ~LockWindowState() override; |
| |
| // WindowState::State overrides: |
| void OnWMEvent(wm::WindowState* window_state, |
| const wm::WMEvent* event) override; |
| wm::WindowStateType GetType() const override; |
| void AttachState(wm::WindowState* window_state, |
| wm::WindowState::State* previous_state) override; |
| void DetachState(wm::WindowState* window_state) override; |
| |
| // Creates new LockWindowState instance and attaches it to |window|. |
| static wm::WindowState* SetLockWindowState(WmWindow* window); |
| |
| private: |
| // Updates the window to |new_state_type| and resulting bounds: |
| // Either full screen, maximized centered or minimized. If the state does not |
| // change, only the bounds will be changed. |
| void UpdateWindow(wm::WindowState* window_state, |
| wm::WindowStateType new_state_type); |
| |
| // Depending on the capabilities of the window we either return |
| // |WINDOW_STATE_TYPE_MAXIMIZED| or |WINDOW_STATE_TYPE_NORMAL|. |
| wm::WindowStateType GetMaximizedOrCenteredWindowType( |
| wm::WindowState* window_state); |
| |
| // Updates the bounds taking virtual keyboard bounds into consideration. |
| void UpdateBounds(wm::WindowState* window_state); |
| |
| // The current state type. Due to the nature of this state, this can only be |
| // WM_STATE_TYPE{NORMAL, MINIMIZED, MAXIMIZED}. |
| wm::WindowStateType current_state_type_; |
| |
| DISALLOW_COPY_AND_ASSIGN(LockWindowState); |
| }; |
| |
| } // namespace ash |
| |
| #endif // ASH_COMMON_WM_LOCK_WINDOW_STATE_H_ |