1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
ash / wm / base_state.h [blame]
// Copyright 2017 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef ASH_WM_BASE_STATE_H_
#define ASH_WM_BASE_STATE_H_
#include "ash/wm/window_state.h"
#include "ash/wm/wm_event.h"
namespace aura {
class Window;
} // namespace aura
namespace ash {
// BaseState implements the common framework for WindowState::State.
class BaseState : public WindowState::State {
public:
explicit BaseState(chromeos::WindowStateType initial_state_type);
BaseState(const BaseState&) = delete;
BaseState& operator=(const BaseState&) = delete;
~BaseState() override;
// WindowState::State:
void OnWMEvent(WindowState* window_state, const WMEvent* event) override;
chromeos::WindowStateType GetType() const override;
protected:
// Returns the chromeos::WindowStateType corresponds to the WMEvent type.
static chromeos::WindowStateType GetStateForTransitionEvent(
WindowState* window_state,
const WMEvent* event);
static void CycleSnap(WindowState* window_state, WMEventType event);
// Handles workspace related events, such as DISPLAY_BOUNDS_CHANGED.
virtual void HandleWorkspaceEvents(WindowState* window_state,
const WMEvent* event) = 0;
// Handles state dependent events, such as TOGGLE_MAXIMIZED,
// TOGGLE_FULLSCREEN.
virtual void HandleCompoundEvents(WindowState* window_state,
const WMEvent* event) = 0;
// Handles bounds change events: SET_BOUNDS and CENTER.
virtual void HandleBoundsEvents(WindowState* window_state,
const WMEvent* event) = 0;
// Handles state transition events, such as MAXIMZIED, MINIMIZED.
virtual void HandleTransitionEvents(WindowState* window_state,
const WMEvent* event) = 0;
// Shows/Hides window when minimized state changes.
void UpdateMinimizedState(WindowState* window_state,
chromeos::WindowStateType previous_state_type);
// Returns the window bounds for snapped window state for given `snap_ratio`.
// Note that even when `snap_ratio` is provided, it might get ignored to meet
// the window's minimum size requirement.
gfx::Rect GetSnappedWindowBoundsInParent(
aura::Window* window,
const chromeos::WindowStateType state_type,
float snap_ratio);
// Prepares for the window snap event. Check if the window can be snapped in
// split screen and if so, SplitViewController will start observe this window.
// This needs to be done before the window's state and bounds change to its
// snapped window state and bounds to make sure split screen can be properly
// set up. `snap_action_source` specifies the source for this snap event.
void HandleWindowSnapping(WindowState* window_state,
WMEventType event_type,
WindowSnapActionSource snap_action_source);
// The current type of the window.
chromeos::WindowStateType state_type_;
};
} // namespace ash
#endif // ASH_WM_BASE_STATE_H_