File: base_state.h

package info (click to toggle)
chromium 120.0.6099.224-1~deb11u1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 6,112,112 kB
  • sloc: cpp: 32,907,025; ansic: 8,148,123; javascript: 3,679,536; python: 2,031,248; asm: 959,718; java: 804,675; xml: 617,256; sh: 111,417; objc: 100,835; perl: 88,443; cs: 53,032; makefile: 29,579; fortran: 24,137; php: 21,162; tcl: 21,147; sql: 20,809; ruby: 17,735; pascal: 12,864; yacc: 8,045; lisp: 3,388; lex: 1,323; ada: 727; awk: 329; jsp: 267; csh: 117; exp: 43; sed: 37
file content (88 lines) | stat: -rw-r--r-- 3,310 bytes parent folder | download
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
84
85
86
87
88
// 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.
  gfx::Rect GetSnappedWindowBoundsInParent(
      aura::Window* window,
      const chromeos::WindowStateType 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_