| // Copyright 2015 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef COMPONENTS_EXO_SURFACE_DELEGATE_H_ |
| #define COMPONENTS_EXO_SURFACE_DELEGATE_H_ |
| |
| #include "chromeos/ui/frame/caption_buttons/snap_controller.h" |
| #include "chromeos/ui/frame/multitask_menu/float_controller_base.h" |
| #include "third_party/skia/include/core/SkColor.h" |
| #include "ui/gfx/geometry/point.h" |
| #include "ui/gfx/geometry/size_f.h" |
| |
| namespace exo { |
| class SecurityDelegate; |
| class Surface; |
| |
| // Frame types that can be used to decorate a surface. |
| enum class SurfaceFrameType { |
| NONE, |
| NORMAL, |
| SHADOW, |
| AUTOHIDE, |
| OVERLAY, |
| OVERLAP |
| }; |
| |
| // Handles events on surfaces in context-specific ways. |
| class SurfaceDelegate { |
| public: |
| // Called when surface was requested to commit all double-buffered state. |
| virtual void OnSurfaceCommit() = 0; |
| |
| // Returns true if surface is in synchronized mode. ie. commit of |
| // double-buffered state should be synchronized with parent surface. |
| virtual bool IsSurfaceSynchronized() const = 0; |
| |
| // Returns true if surface should receive input events. |
| virtual bool IsInputEnabled(Surface* surface) const = 0; |
| |
| // Called when surface was requested to use a specific frame type. |
| virtual void OnSetFrame(SurfaceFrameType type) = 0; |
| |
| // Called when surface was requested to use a specific set of frame colors. |
| virtual void OnSetFrameColors(SkColor active_color, |
| SkColor inactive_color) = 0; |
| |
| // Called when a new "parent" was requested for this surface. |position| |
| // is the initial position of surface relative to origin of parent. |
| virtual void OnSetParent(Surface* parent, const gfx::Point& position) = 0; |
| |
| // Called when surface was requested to set a specific startup ID label. |
| virtual void OnSetStartupId(const char* startup_id) = 0; |
| |
| // Called when surface was requested to set a specific application ID label. |
| virtual void OnSetApplicationId(const char* application_id) = 0; |
| |
| // Whether to show/hide the shelf when fullscreen. If true, the titlebar/shelf |
| // will show when the mouse moves to the top/bottom of the screen. If false |
| // (plain fullscreen), the titlebar and shelf are always hidden. |
| virtual void SetUseImmersiveForFullscreen(bool value) = 0; |
| |
| // Called when the surface's application wants it to be activated. |
| virtual void OnActivationRequested() = 0; |
| |
| // Called when the new outoupt resource is created. |
| virtual void OnNewOutputAdded() = 0; |
| |
| // Called when surface was requested to start resize. |
| virtual void OnSetServerStartResize() = 0; |
| |
| // Called to show the snap preview to the primary or secondary position, or |
| // to hide it. |
| virtual void ShowSnapPreviewToPrimary() = 0; |
| virtual void ShowSnapPreviewToSecondary() = 0; |
| virtual void HideSnapPreview() = 0; |
| |
| // Called when the client was snapped to primary or secondary position, and |
| // reset. |
| virtual void SetSnapPrimary(float snap_ratio) = 0; |
| virtual void SetSnapSecondary(float snap_ratio) = 0; |
| virtual void UnsetSnap() = 0; |
| |
| // Whether the current client window can go back, as per its navigation list. |
| virtual void SetCanGoBack() = 0; |
| virtual void UnsetCanGoBack() = 0; |
| |
| // Called when surface was requested to enter pip. |
| virtual void SetPip() = 0; |
| virtual void UnsetPip() = 0; |
| |
| // Floats the shell surface. The bounds of the surface are determined by |
| // `float_start_location`. |
| virtual void SetFloatToLocation( |
| chromeos::FloatStartLocation float_start_location) = 0; |
| |
| // Called when surface was requested to maintain an aspect ratio. |
| virtual void SetAspectRatio(const gfx::SizeF& aspect_ratio) = 0; |
| |
| // Called when surface was requested to move the window to a desk at |
| // |desk_index|. |
| virtual void MoveToDesk(int desk_index) = 0; |
| |
| // Called when surface was requested to be visible on all workspaces. |
| virtual void SetVisibleOnAllWorkspaces() = 0; |
| |
| // Called to set the initial workspace to restore a window to the |
| // corresponding desk. |
| virtual void SetInitialWorkspace(const char* initial_workspace) = 0; |
| |
| // Pins/locks a window to the screen so that the user cannot do anything |
| // else before the mode is released. If trusted is set, it is an invocation |
| // from a trusted app like a school test mode app. |
| virtual void Pin(bool trusted) = 0; |
| |
| // Releases the pinned mode and allows the user to do other things again. |
| virtual void Unpin() = 0; |
| |
| // Sets the system modality. |
| virtual void SetSystemModal(bool modal) = 0; |
| |
| // Sets the top inset (header height). |
| virtual void SetTopInset(int height) = 0; |
| |
| // Returns the SecurityDelegate which this surface should use to perform |
| // security-sensitive operations. See go/secure-exo-ids for more information. |
| virtual SecurityDelegate* GetSecurityDelegate() = 0; |
| |
| protected: |
| virtual ~SurfaceDelegate() {} |
| }; |
| |
| } // namespace exo |
| |
| #endif // COMPONENTS_EXO_SURFACE_DELEGATE_H_ |