1// Copyright 2013 The Flutter Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef FLUTTER_SHELL_PLATFORM_EMBEDDER_PLATFORM_VIEW_EMBEDDER_H_
6#define FLUTTER_SHELL_PLATFORM_EMBEDDER_PLATFORM_VIEW_EMBEDDER_H_
7
8#include <functional>
9
10#include "flow/embedded_views.h"
11#include "flutter/fml/macros.h"
12#include "flutter/shell/common/platform_view.h"
13#include "flutter/shell/platform/embedder/embedder.h"
14#include "flutter/shell/platform/embedder/embedder_surface.h"
15#include "flutter/shell/platform/embedder/embedder_surface_software.h"
16#include "flutter/shell/platform/embedder/vsync_waiter_embedder.h"
17
18#ifdef SHELL_ENABLE_GL
19#include "flutter/shell/platform/embedder/embedder_surface_gl.h"
20#include "flutter/shell/platform/embedder/embedder_surface_gl_impeller.h"
21#endif
22
23#ifdef SHELL_ENABLE_METAL
24#include "flutter/shell/platform/embedder/embedder_surface_metal.h"
25#endif
26
27#ifdef SHELL_ENABLE_VULKAN
28#include "flutter/shell/platform/embedder/embedder_surface_vulkan.h"
29#endif
30
31namespace flutter {
32
33class PlatformViewEmbedder final : public PlatformView {
34 public:
35 using UpdateSemanticsCallback =
36 std::function<void(flutter::SemanticsNodeUpdates update,
37 flutter::CustomAccessibilityActionUpdates actions)>;
38 using PlatformMessageResponseCallback =
39 std::function<void(std::unique_ptr<PlatformMessage>)>;
40 using ComputePlatformResolvedLocaleCallback =
41 std::function<std::unique_ptr<std::vector<std::string>>(
42 const std::vector<std::string>& supported_locale_data)>;
43 using OnPreEngineRestartCallback = std::function<void()>;
44
45 struct PlatformDispatchTable {
46 UpdateSemanticsCallback update_semantics_callback; // optional
47 PlatformMessageResponseCallback
48 platform_message_response_callback; // optional
49 VsyncWaiterEmbedder::VsyncCallback vsync_callback; // optional
50 ComputePlatformResolvedLocaleCallback
51 compute_platform_resolved_locale_callback;
52 OnPreEngineRestartCallback on_pre_engine_restart_callback; // optional
53 };
54
55 // Create a platform view that sets up a software rasterizer.
56 PlatformViewEmbedder(
57 PlatformView::Delegate& delegate,
58 const flutter::TaskRunners& task_runners,
59 const EmbedderSurfaceSoftware::SoftwareDispatchTable&
60 software_dispatch_table,
61 PlatformDispatchTable platform_dispatch_table,
62 std::shared_ptr<EmbedderExternalViewEmbedder> external_view_embedder);
63
64#ifdef SHELL_ENABLE_GL
65 // Creates a platform view that sets up an OpenGL rasterizer.
66 PlatformViewEmbedder(
67 PlatformView::Delegate& delegate,
68 const flutter::TaskRunners& task_runners,
69 std::unique_ptr<EmbedderSurface> embedder_surface,
70 PlatformDispatchTable platform_dispatch_table,
71 std::shared_ptr<EmbedderExternalViewEmbedder> external_view_embedder);
72#endif
73
74#ifdef SHELL_ENABLE_METAL
75 // Creates a platform view that sets up an metal rasterizer.
76 PlatformViewEmbedder(
77 PlatformView::Delegate& delegate,
78 const flutter::TaskRunners& task_runners,
79 std::unique_ptr<EmbedderSurface> embedder_surface,
80 PlatformDispatchTable platform_dispatch_table,
81 std::shared_ptr<EmbedderExternalViewEmbedder> external_view_embedder);
82#endif
83
84#ifdef SHELL_ENABLE_VULKAN
85 // Creates a platform view that sets up an Vulkan rasterizer.
86 PlatformViewEmbedder(
87 PlatformView::Delegate& delegate,
88 const flutter::TaskRunners& task_runners,
89 std::unique_ptr<EmbedderSurfaceVulkan> embedder_surface,
90 PlatformDispatchTable platform_dispatch_table,
91 std::shared_ptr<EmbedderExternalViewEmbedder> external_view_embedder);
92#endif
93
94 ~PlatformViewEmbedder() override;
95
96 // |PlatformView|
97 void UpdateSemantics(
98 flutter::SemanticsNodeUpdates update,
99 flutter::CustomAccessibilityActionUpdates actions) override;
100
101 // |PlatformView|
102 void HandlePlatformMessage(std::unique_ptr<PlatformMessage> message) override;
103
104 // |PlatformView|
105 std::shared_ptr<PlatformMessageHandler> GetPlatformMessageHandler()
106 const override;
107
108 private:
109 class EmbedderPlatformMessageHandler;
110 std::shared_ptr<EmbedderExternalViewEmbedder> external_view_embedder_;
111 std::unique_ptr<EmbedderSurface> embedder_surface_;
112 std::shared_ptr<EmbedderPlatformMessageHandler> platform_message_handler_;
113 PlatformDispatchTable platform_dispatch_table_;
114
115 // |PlatformView|
116 std::unique_ptr<Surface> CreateRenderingSurface() override;
117
118 // |PlatformView|
119 std::shared_ptr<ExternalViewEmbedder> CreateExternalViewEmbedder() override;
120
121 // |PlatformView|
122 std::shared_ptr<impeller::Context> GetImpellerContext() const override;
123
124 // |PlatformView|
125 sk_sp<GrDirectContext> CreateResourceContext() const override;
126
127 // |PlatformView|
128 std::unique_ptr<VsyncWaiter> CreateVSyncWaiter() override;
129
130 // |PlatformView|
131 void OnPreEngineRestart() const override;
132
133 // |PlatformView|
134 std::unique_ptr<std::vector<std::string>> ComputePlatformResolvedLocales(
135 const std::vector<std::string>& supported_locale_data) override;
136
137 FML_DISALLOW_COPY_AND_ASSIGN(PlatformViewEmbedder);
138};
139
140} // namespace flutter
141
142#endif // FLUTTER_SHELL_PLATFORM_EMBEDDER_PLATFORM_VIEW_EMBEDDER_H_
143

source code of flutter_engine/flutter/shell/platform/embedder/platform_view_embedder.h