123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- // 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_WM_LOCK_WINDOW_STATE_H_
- #define ASH_WM_LOCK_WINDOW_STATE_H_
- #include "ash/wm/window_state.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 and window containers
- // associated with apps handling lock screen tray actions.
- // LockWindowState implements Ash behavior without state machine.
- class LockWindowState : public WindowState::State {
- public:
- // The |window|'s state object will be modified to use this new window mode
- // state handler.
- // |exclude_shelf| - if set, the maximized window size will be
- // restricted to work area defined by ash shelf, rather than taking only
- // virtual keyboard window into consideration when calculating the window
- // size.
- LockWindowState(aura::Window* window, bool exclude_shelf);
- LockWindowState(const LockWindowState&) = delete;
- LockWindowState& operator=(const LockWindowState&) = delete;
- ~LockWindowState() override;
- // WindowState::State overrides:
- void OnWMEvent(WindowState* window_state, const WMEvent* event) override;
- chromeos::WindowStateType GetType() const override;
- void AttachState(WindowState* window_state,
- WindowState::State* previous_state) override;
- void DetachState(WindowState* window_state) override;
- // Creates new LockWindowState instance and attaches it to |window|.
- static WindowState* SetLockWindowState(aura::Window* window);
- static WindowState* SetLockWindowStateWithShelfExcluded(aura::Window* 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(WindowState* window_state,
- chromeos::WindowStateType new_state_type);
- // Depending on the capabilities of the window we either return
- // |WindowStateType::kMaximized| or |WindowStateType::kNormal|.
- chromeos::WindowStateType GetMaximizedOrCenteredWindowType(
- WindowState* window_state);
- // Returns boudns to be used for the provided window.
- gfx::Rect GetWindowBounds(aura::Window* window);
- // Updates the bounds taking virtual keyboard bounds into consideration.
- void UpdateBounds(WindowState* window_state);
- // The current state type. Due to the nature of this state, this can only be
- // WM_STATE_TYPE{NORMAL, MINIMIZED, MAXIMIZED}.
- chromeos::WindowStateType current_state_type_;
- // Restrict window size to the work area defined by the shelf - i.e. window
- // bounds exclude system shelf bounds.
- bool exclude_shelf_ = false;
- };
- } // namespace ash
- #endif // ASH_WM_LOCK_WINDOW_STATE_H_
|