// Copyright 2015 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 COMPONENTS_EXO_SHELL_SURFACE_H_ #define COMPONENTS_EXO_SHELL_SURFACE_H_ #include "ash/wm/window_state_observer.h" #include "base/macros.h" #include "components/exo/shell_surface_base.h" namespace exo { class Surface; // This class implements toplevel surface for which position and state are // managed by the shell. class ShellSurface : public ShellSurfaceBase, public ash::wm::WindowStateObserver { public: // The |origin| is the initial position in screen coordinates. The position // specified as part of the geometry is relative to the shell surface. ShellSurface(Surface* surface, const gfx::Point& origin, bool activatable, bool can_minimize, int container); explicit ShellSurface(Surface* surface); ~ShellSurface() override; // Set the "parent" of this surface. This window should be stacked above a // parent. void SetParent(ShellSurface* parent); // Maximizes the shell surface. void Maximize(); // Minimize the shell surface. void Minimize(); // Restore the shell surface. void Restore(); // Set fullscreen state for shell surface. void SetFullscreen(bool fullscreen); // Start an interactive resize of surface. |component| is one of the windows // HT constants (see ui/base/hit_test.h) and describes in what direction the // surface should be resized. void Resize(int component); // Overridden from ShellSurfaceBase: void InitializeWindowState(ash::wm::WindowState* window_state) override; // Overridden from ash::wm::WindowStateObserver: void OnPreWindowStateTypeChange( ash::wm::WindowState* window_state, ash::mojom::WindowStateType old_type) override; void OnPostWindowStateTypeChange( ash::wm::WindowState* window_state, ash::mojom::WindowStateType old_type) override; private: class ScopedAnimationsDisabled; std::unique_ptr scoped_animations_disabled_; DISALLOW_COPY_AND_ASSIGN(ShellSurface); }; } // namespace exo #endif // COMPONENTS_EXO_SHELL_SURFACE_H_