// Copyright 2013 The Flutter 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 COMMON_PLATFORM_VIEW_H_ #define COMMON_PLATFORM_VIEW_H_ #include #include "flutter/common/task_runners.h" #include "flutter/flow/texture.h" #include "flutter/fml/macros.h" #include "flutter/fml/memory/weak_ptr.h" #include "flutter/lib/ui/semantics/custom_accessibility_action.h" #include "flutter/lib/ui/semantics/semantics_node.h" #include "flutter/lib/ui/window/platform_message.h" #include "flutter/lib/ui/window/pointer_data_packet.h" #include "flutter/lib/ui/window/viewport_metrics.h" #include "flutter/shell/common/surface.h" #include "flutter/shell/common/vsync_waiter.h" #include "third_party/skia/include/core/SkSize.h" #include "third_party/skia/include/gpu/GrContext.h" namespace shell { class Shell; class PlatformView { public: class Delegate { public: virtual void OnPlatformViewCreated(std::unique_ptr surface) = 0; virtual void OnPlatformViewDestroyed() = 0; virtual void OnPlatformViewSetNextFrameCallback(fml::closure closure) = 0; virtual void OnPlatformViewSetViewportMetrics( const blink::ViewportMetrics& metrics) = 0; virtual void OnPlatformViewDispatchPlatformMessage( fml::RefPtr message) = 0; virtual void OnPlatformViewDispatchPointerDataPacket( std::unique_ptr packet) = 0; virtual void OnPlatformViewDispatchSemanticsAction( int32_t id, blink::SemanticsAction action, std::vector args) = 0; virtual void OnPlatformViewSetSemanticsEnabled(bool enabled) = 0; virtual void OnPlatformViewSetAccessibilityFeatures(int32_t flags) = 0; virtual void OnPlatformViewRegisterTexture( std::shared_ptr texture) = 0; virtual void OnPlatformViewUnregisterTexture(int64_t texture_id) = 0; virtual void OnPlatformViewMarkTextureFrameAvailable( int64_t texture_id) = 0; }; explicit PlatformView(Delegate& delegate, blink::TaskRunners task_runners); virtual ~PlatformView(); virtual std::unique_ptr CreateVSyncWaiter(); void DispatchPlatformMessage(fml::RefPtr message); void DispatchSemanticsAction(int32_t id, blink::SemanticsAction action, std::vector args); virtual void SetSemanticsEnabled(bool enabled); virtual void SetAccessibilityFeatures(int32_t flags); void SetViewportMetrics(const blink::ViewportMetrics& metrics); void NotifyCreated(); virtual void NotifyDestroyed(); // Unlike all other methods on the platform view, this one may be called on a // non-platform task runner. virtual sk_sp CreateResourceContext() const; // Unlike all other methods on the platform view, this one may be called on a // non-platform task runner. virtual void ReleaseResourceContext() const; fml::WeakPtr GetWeakPtr() const; virtual void UpdateSemantics(blink::SemanticsNodeUpdates updates, blink::CustomAccessibilityActionUpdates actions); virtual void HandlePlatformMessage( fml::RefPtr message); virtual void OnPreEngineRestart() const; void SetNextFrameCallback(fml::closure closure); void DispatchPointerDataPacket( std::unique_ptr packet); // Called once per texture, on the platform thread. void RegisterTexture(std::shared_ptr texture); // Called once per texture, on the platform thread. void UnregisterTexture(int64_t texture_id); // Called once per texture update (e.g. video frame), on the platform thread. void MarkTextureFrameAvailable(int64_t texture_id); protected: PlatformView::Delegate& delegate_; const blink::TaskRunners task_runners_; SkISize size_; fml::WeakPtrFactory weak_factory_; // Unlike all other methods on the platform view, this is called on the GPU // task runner. virtual std::unique_ptr CreateRenderingSurface(); private: FML_DISALLOW_COPY_AND_ASSIGN(PlatformView); }; } // namespace shell #endif // COMMON_PLATFORM_VIEW_H_