• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 "flutter/fml/macros.h"
11 #include "flutter/shell/common/platform_view.h"
12 #include "flutter/shell/platform/embedder/embedder.h"
13 #include "flutter/shell/platform/embedder/embedder_surface.h"
14 #include "flutter/shell/platform/embedder/embedder_surface_gl.h"
15 #include "flutter/shell/platform/embedder/embedder_surface_software.h"
16 #include "flutter/shell/platform/embedder/vsync_waiter_embedder.h"
17 
18 namespace flutter {
19 
20 class PlatformViewEmbedder final : public PlatformView {
21  public:
22   struct PlatformDispatchTable {
23     VsyncWaiterEmbedder::VsyncCallback vsync_callback;  // optional
24   };
25 
26   // Creates a platform view that sets up an OpenGL rasterizer.
27   PlatformViewEmbedder(
28       PlatformView::Delegate& delegate,
29       flutter::TaskRunners task_runners,
30       EmbedderSurfaceGL::GLDispatchTable gl_dispatch_table,
31       bool fbo_reset_after_present,
32       PlatformDispatchTable platform_dispatch_table,
33       std::unique_ptr<EmbedderExternalViewEmbedder> external_view_embedder);
34 
35   // Create a platform view that sets up a software rasterizer.
36   PlatformViewEmbedder(
37       PlatformView::Delegate& delegate,
38       flutter::TaskRunners task_runners,
39       EmbedderSurfaceSoftware::SoftwareDispatchTable software_dispatch_table,
40       PlatformDispatchTable platform_dispatch_table,
41       std::unique_ptr<EmbedderExternalViewEmbedder> external_view_embedder);
42 
43   ~PlatformViewEmbedder() override;
44 
45   // |PlatformView|
46   void HandlePlatformMessage(
47       fml::RefPtr<flutter::PlatformMessage> message) override;
48 
49  private:
50   std::unique_ptr<EmbedderSurface> embedder_surface_;
51   PlatformDispatchTable platform_dispatch_table_;
52 
53   // |PlatformView|
54   std::unique_ptr<Surface> CreateRenderingSurface() override;
55 
56   // |PlatformView|
57   sk_sp<GrContext> CreateResourceContext() const override;
58 
59   // |PlatformView|
60   std::unique_ptr<VsyncWaiter> CreateVSyncWaiter(int32_t platform) override;
61 
62   FML_DISALLOW_COPY_AND_ASSIGN(PlatformViewEmbedder);
63 };
64 
65 }  // namespace flutter
66 
67 #endif  // FLUTTER_SHELL_PLATFORM_EMBEDDER_PLATFORM_VIEW_EMBEDDER_H_
68