Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 99cc50d

Browse files
authored
[ios] Surface factory holds the canonical reference to the external view embedder (#22206)
This furthers the refactor of making platform view hold the reference to the external view embedder on iOS.
1 parent fe85f94 commit 99cc50d

10 files changed

+38
-36
lines changed

shell/platform/darwin/ios/ios_surface.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class IOSSurface {
2828
static std::unique_ptr<IOSSurface> Create(
2929
std::shared_ptr<IOSContext> context,
3030
fml::scoped_nsobject<CALayer> layer,
31-
const std::shared_ptr<FlutterPlatformViewsController>& platform_views_controller);
31+
const std::shared_ptr<IOSExternalViewEmbedder>& external_view_embedder);
3232

3333
std::shared_ptr<IOSContext> GetContext() const;
3434

@@ -49,7 +49,7 @@ class IOSSurface {
4949

5050
protected:
5151
IOSSurface(std::shared_ptr<IOSContext> ios_context,
52-
const std::shared_ptr<FlutterPlatformViewsController>& platform_views_controller);
52+
const std::shared_ptr<IOSExternalViewEmbedder>& external_view_embedder);
5353

5454
private:
5555
std::shared_ptr<IOSContext> ios_context_;

shell/platform/darwin/ios/ios_surface.mm

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
std::unique_ptr<IOSSurface> IOSSurface::Create(
1919
std::shared_ptr<IOSContext> context,
2020
fml::scoped_nsobject<CALayer> layer,
21-
const std::shared_ptr<FlutterPlatformViewsController>& platform_views_controller) {
21+
const std::shared_ptr<IOSExternalViewEmbedder>& external_view_embedder) {
2222
FML_DCHECK(layer);
2323
FML_DCHECK(context);
2424

@@ -27,7 +27,7 @@
2727
fml::scoped_nsobject<CAEAGLLayer>(
2828
reinterpret_cast<CAEAGLLayer*>([layer.get() retain])), // EAGL layer
2929
std::move(context), // context
30-
platform_views_controller // platform views controller
30+
external_view_embedder // external view embedder
3131
);
3232
}
3333

@@ -38,26 +38,22 @@
3838
fml::scoped_nsobject<CAMetalLayer>(
3939
reinterpret_cast<CAMetalLayer*>([layer.get() retain])), // Metal layer
4040
std::move(context), // context
41-
platform_views_controller // platform views controller
41+
external_view_embedder // external view embedder
4242
);
4343
}
4444
}
4545
#endif // FLUTTER_SHELL_ENABLE_METAL
4646

47-
return std::make_unique<IOSSurfaceSoftware>(
48-
std::move(layer), // layer
49-
std::move(context), // context
50-
platform_views_controller // platform views controller
47+
return std::make_unique<IOSSurfaceSoftware>(std::move(layer), // layer
48+
std::move(context), // context
49+
external_view_embedder // external view embedder
5150
);
5251
}
5352

54-
IOSSurface::IOSSurface(
55-
std::shared_ptr<IOSContext> ios_context,
56-
const std::shared_ptr<FlutterPlatformViewsController>& platform_views_controller)
57-
: ios_context_(std::move(ios_context)) {
53+
IOSSurface::IOSSurface(std::shared_ptr<IOSContext> ios_context,
54+
const std::shared_ptr<IOSExternalViewEmbedder>& external_view_embedder)
55+
: ios_context_(std::move(ios_context)), external_view_embedder_(external_view_embedder) {
5856
FML_DCHECK(ios_context_);
59-
external_view_embedder_ =
60-
std::make_shared<IOSExternalViewEmbedder>(platform_views_controller, ios_context_);
6157
}
6258

6359
IOSSurface::~IOSSurface() = default;

shell/platform/darwin/ios/ios_surface_factory.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
#import "flutter/shell/platform/darwin/ios/ios_surface.h"
1111
#import "flutter/shell/platform/darwin/ios/rendering_api_selection.h"
12+
#include "shell/platform/darwin/ios/ios_external_view_embedder.h"
1213

1314
namespace flutter {
1415

@@ -28,8 +29,10 @@ class IOSSurfaceFactory {
2829
std::unique_ptr<IOSSurface> CreateSurface(
2930
fml::scoped_nsobject<CALayer> ca_layer);
3031

32+
std::shared_ptr<IOSExternalViewEmbedder> GetExternalViewEmbedder();
33+
3134
private:
32-
std::shared_ptr<FlutterPlatformViewsController> platform_views_controller_;
35+
std::shared_ptr<IOSExternalViewEmbedder> external_view_embedder_;
3336
std::shared_ptr<IOSContext> ios_context_;
3437

3538
FML_DISALLOW_COPY_AND_ASSIGN(IOSSurfaceFactory);

shell/platform/darwin/ios/ios_surface_factory.mm

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
#import "flutter/shell/platform/darwin/ios/ios_surface_factory.h"
66
#import "flutter/shell/platform/darwin/ios/ios_context.h"
7+
#include "shell/platform/darwin/ios/ios_external_view_embedder.h"
78

89
namespace flutter {
910

@@ -19,12 +20,17 @@
1920

2021
void IOSSurfaceFactory::SetPlatformViewsController(
2122
const std::shared_ptr<FlutterPlatformViewsController>& platform_views_controller) {
22-
platform_views_controller_ = platform_views_controller;
23+
external_view_embedder_.reset(
24+
new IOSExternalViewEmbedder(platform_views_controller, ios_context_));
25+
}
26+
27+
std::shared_ptr<IOSExternalViewEmbedder> IOSSurfaceFactory::GetExternalViewEmbedder() {
28+
return external_view_embedder_;
2329
}
2430

2531
std::unique_ptr<IOSSurface> IOSSurfaceFactory::CreateSurface(
2632
fml::scoped_nsobject<CALayer> ca_layer) {
27-
return flutter::IOSSurface::Create(ios_context_, ca_layer, platform_views_controller_);
33+
return flutter::IOSSurface::Create(ios_context_, ca_layer, external_view_embedder_);
2834
}
2935

3036
} // namespace flutter

shell/platform/darwin/ios/ios_surface_gl.h

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,9 @@ namespace flutter {
1818

1919
class IOSSurfaceGL final : public IOSSurface, public GPUSurfaceGLDelegate {
2020
public:
21-
IOSSurfaceGL(
22-
fml::scoped_nsobject<CAEAGLLayer> layer,
23-
std::shared_ptr<IOSContext> context,
24-
const std::shared_ptr<FlutterPlatformViewsController>& platform_views_controller = nullptr);
21+
IOSSurfaceGL(fml::scoped_nsobject<CAEAGLLayer> layer,
22+
std::shared_ptr<IOSContext> context,
23+
const std::shared_ptr<IOSExternalViewEmbedder>& external_view_embedder = nullptr);
2524

2625
~IOSSurfaceGL() override;
2726

shell/platform/darwin/ios/ios_surface_gl.mm

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,10 @@
1414
return reinterpret_cast<IOSContextGL*>(context.get());
1515
}
1616

17-
IOSSurfaceGL::IOSSurfaceGL(
18-
fml::scoped_nsobject<CAEAGLLayer> layer,
19-
std::shared_ptr<IOSContext> context,
20-
const std::shared_ptr<FlutterPlatformViewsController>& platform_views_controller)
21-
: IOSSurface(context, platform_views_controller) {
17+
IOSSurfaceGL::IOSSurfaceGL(fml::scoped_nsobject<CAEAGLLayer> layer,
18+
std::shared_ptr<IOSContext> context,
19+
const std::shared_ptr<IOSExternalViewEmbedder>& external_view_embedder)
20+
: IOSSurface(context, external_view_embedder) {
2221
render_target_ = CastToGLContext(context)->CreateRenderTarget(std::move(layer));
2322
}
2423

shell/platform/darwin/ios/ios_surface_metal.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class SK_API_AVAILABLE_CA_METAL_LAYER IOSSurfaceMetal final : public IOSSurface,
1919
public:
2020
IOSSurfaceMetal(fml::scoped_nsobject<CAMetalLayer> layer,
2121
std::shared_ptr<IOSContext> context,
22-
const std::shared_ptr<FlutterPlatformViewsController>& platform_views_controller);
22+
const std::shared_ptr<IOSExternalViewEmbedder>& external_view_embedder);
2323

2424
// |IOSSurface|
2525
~IOSSurfaceMetal() override;

shell/platform/darwin/ios/ios_surface_metal.mm

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@
1616
IOSSurfaceMetal::IOSSurfaceMetal(
1717
fml::scoped_nsobject<CAMetalLayer> layer,
1818
std::shared_ptr<IOSContext> context,
19-
const std::shared_ptr<FlutterPlatformViewsController>& platform_views_controller)
20-
: IOSSurface(std::move(context), platform_views_controller), layer_(std::move(layer)) {
19+
const std::shared_ptr<IOSExternalViewEmbedder>& external_view_embedder)
20+
: IOSSurface(std::move(context), external_view_embedder), layer_(std::move(layer)) {
2121
if (!layer_) {
2222
return;
2323
}

shell/platform/darwin/ios/ios_surface_software.h

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,9 @@ namespace flutter {
1818

1919
class IOSSurfaceSoftware final : public IOSSurface, public GPUSurfaceSoftwareDelegate {
2020
public:
21-
IOSSurfaceSoftware(
22-
fml::scoped_nsobject<CALayer> layer,
23-
std::shared_ptr<IOSContext> context,
24-
const std::shared_ptr<FlutterPlatformViewsController>& platform_views_controller);
21+
IOSSurfaceSoftware(fml::scoped_nsobject<CALayer> layer,
22+
std::shared_ptr<IOSContext> context,
23+
const std::shared_ptr<IOSExternalViewEmbedder>& external_view_embedder);
2524

2625
~IOSSurfaceSoftware() override;
2726

shell/platform/darwin/ios/ios_surface_software.mm

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@
1818
IOSSurfaceSoftware::IOSSurfaceSoftware(
1919
fml::scoped_nsobject<CALayer> layer,
2020
std::shared_ptr<IOSContext> context,
21-
const std::shared_ptr<FlutterPlatformViewsController>& platform_views_controller)
22-
: IOSSurface(std::move(context), platform_views_controller), layer_(std::move(layer)) {}
21+
const std::shared_ptr<IOSExternalViewEmbedder>& external_view_embedder)
22+
: IOSSurface(std::move(context), external_view_embedder), layer_(std::move(layer)) {}
2323

2424
IOSSurfaceSoftware::~IOSSurfaceSoftware() = default;
2525

0 commit comments

Comments
 (0)