blob: d85d4c9e628edf409ec2bb0ca00f7cf3db3e0451 [file] [log] [blame]
// Copyright 2017 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_BASE_STATE_H_
#define ASH_WM_BASE_STATE_H_
#include "ash/wm/window_state.h"
#include "ash/wm/wm_event.h"
#include "base/macros.h"
namespace aura {
class Window;
} // namespace aura
namespace ash {
namespace wm {
// BaseState implements the common framework for WindowState::State.
class BaseState : public WindowState::State {
public:
explicit BaseState(mojom::WindowStateType initial_state_type);
~BaseState() override;
// WindowState::State:
void OnWMEvent(WindowState* window_state, const WMEvent* event) override;
mojom::WindowStateType GetType() const override;
protected:
// Returns the WindowStateType corresponds to the WMEvent type.
static mojom::WindowStateType GetStateForTransitionEvent(
const WMEvent* event);
static void CenterWindow(WindowState* window_state);
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,
mojom::WindowStateType previous_state_type);
// Returns the window bounds for snapped window state.
gfx::Rect GetSnappedWindowBoundsInParent(
aura::Window* window,
const mojom::WindowStateType state_type);
// The current type of the window.
mojom::WindowStateType state_type_;
private:
DISALLOW_COPY_AND_ASSIGN(BaseState);
};
} // namespace wm
} // namespace ash
#endif // ASH_WM_BASE_STATE_H_