| OLD | NEW |
| (Empty) |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #ifndef ASH_COMMON_WM_DEFAULT_STATE_H_ | |
| 6 #define ASH_COMMON_WM_DEFAULT_STATE_H_ | |
| 7 | |
| 8 #include "ash/common/wm/window_state.h" | |
| 9 #include "base/macros.h" | |
| 10 #include "ui/display/display.h" | |
| 11 #include "ui/gfx/geometry/rect.h" | |
| 12 | |
| 13 namespace ash { | |
| 14 namespace wm { | |
| 15 class SetBoundsEvent; | |
| 16 | |
| 17 // DefaultState implements Ash behavior without state machine. | |
| 18 class DefaultState : public WindowState::State { | |
| 19 public: | |
| 20 explicit DefaultState(WindowStateType initial_state_type); | |
| 21 ~DefaultState() override; | |
| 22 | |
| 23 // WindowState::State overrides: | |
| 24 void OnWMEvent(WindowState* window_state, const WMEvent* event) override; | |
| 25 WindowStateType GetType() const override; | |
| 26 void AttachState(WindowState* window_state, | |
| 27 WindowState::State* previous_state) override; | |
| 28 void DetachState(WindowState* window_state) override; | |
| 29 | |
| 30 private: | |
| 31 // Process state dependent events, such as TOGGLE_MAXIMIZED, | |
| 32 // TOGGLE_FULLSCREEN. | |
| 33 static bool ProcessCompoundEvents(WindowState* window_state, | |
| 34 const WMEvent* event); | |
| 35 | |
| 36 // Process workspace related events, such as DISPLAY_BOUNDS_CHANGED. | |
| 37 static bool ProcessWorkspaceEvents(WindowState* window_state, | |
| 38 const WMEvent* event); | |
| 39 | |
| 40 // Set the fullscreen/maximized bounds without animation. | |
| 41 static bool SetMaximizedOrFullscreenBounds(wm::WindowState* window_state); | |
| 42 | |
| 43 static void SetBounds(WindowState* window_state, | |
| 44 const SetBoundsEvent* bounds_event); | |
| 45 | |
| 46 static void CenterWindow(WindowState* window_state); | |
| 47 | |
| 48 // Enters next state. This is used when the state moves from one to another | |
| 49 // within the same desktop mode. | |
| 50 void EnterToNextState(wm::WindowState* window_state, | |
| 51 wm::WindowStateType next_state_type); | |
| 52 | |
| 53 // Reenters the current state. This is called when migrating from | |
| 54 // previous desktop mode, and the window's state needs to re-construct the | |
| 55 // state/bounds for this state. | |
| 56 void ReenterToCurrentState(wm::WindowState* window_state, | |
| 57 wm::WindowState::State* state_in_previous_mode); | |
| 58 | |
| 59 // Animates to new window bounds based on the current and previous state type. | |
| 60 void UpdateBoundsFromState(wm::WindowState* window_state, | |
| 61 wm::WindowStateType old_state_type); | |
| 62 | |
| 63 // The current type of the window. | |
| 64 WindowStateType state_type_; | |
| 65 | |
| 66 // The saved window state for the case that the state gets de-/activated. | |
| 67 gfx::Rect stored_bounds_; | |
| 68 gfx::Rect stored_restore_bounds_; | |
| 69 | |
| 70 // The display state in which the mode got started. | |
| 71 display::Display stored_display_state_; | |
| 72 | |
| 73 // The window state only gets remembered for DCHECK reasons. | |
| 74 WindowState* stored_window_state_; | |
| 75 | |
| 76 DISALLOW_COPY_AND_ASSIGN(DefaultState); | |
| 77 }; | |
| 78 | |
| 79 } // namespace wm | |
| 80 } // namespace ash | |
| 81 | |
| 82 #endif // ASH_COMMON_WM_DEFAULT_STATE_H_ | |
| OLD | NEW |