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 | #include "flutter/flow/layers/platform_view_layer.h" |
6 | |
7 | namespace flutter { |
8 | |
9 | PlatformViewLayer::PlatformViewLayer(const SkPoint& offset, |
10 | const SkSize& size, |
11 | int64_t view_id) |
12 | : offset_(offset), size_(size), view_id_(view_id) {} |
13 | |
14 | void PlatformViewLayer::Preroll(PrerollContext* context, |
15 | const SkMatrix& matrix) { |
16 | #if defined(LEGACY_FUCHSIA_EMBEDDER) |
17 | context->child_scene_layer_exists_below = true; |
18 | CheckForChildLayerBelow(context); |
19 | #endif |
20 | |
21 | set_paint_bounds(SkRect::MakeXYWH(offset_.x(), offset_.y(), size_.width(), |
22 | size_.height())); |
23 | |
24 | if (context->view_embedder == nullptr) { |
25 | FML_LOG(ERROR) << "Trying to embed a platform view but the PrerollContext " |
26 | "does not support embedding" ; |
27 | return; |
28 | } |
29 | context->has_platform_view = true; |
30 | std::unique_ptr<EmbeddedViewParams> params = |
31 | std::make_unique<EmbeddedViewParams>(matrix, size_, |
32 | context->mutators_stack); |
33 | context->view_embedder->PrerollCompositeEmbeddedView(view_id_, |
34 | std::move(params)); |
35 | } |
36 | |
37 | void PlatformViewLayer::Paint(PaintContext& context) const { |
38 | if (context.view_embedder == nullptr) { |
39 | #if !defined(LEGACY_FUCHSIA_EMBEDDER) |
40 | FML_LOG(ERROR) << "Trying to embed a platform view but the PaintContext " |
41 | "does not support embedding" ; |
42 | #endif |
43 | return; |
44 | } |
45 | SkCanvas* canvas = context.view_embedder->CompositeEmbeddedView(view_id_); |
46 | context.leaf_nodes_canvas = canvas; |
47 | } |
48 | |
49 | #if defined(LEGACY_FUCHSIA_EMBEDDER) |
50 | void PlatformViewLayer::UpdateScene(SceneUpdateContext& context) { |
51 | TRACE_EVENT0("flutter" , "PlatformViewLayer::UpdateScene" ); |
52 | FML_DCHECK(needs_system_composite()); |
53 | context.UpdateView(view_id_, offset_, size_); |
54 | } |
55 | #endif |
56 | |
57 | } // namespace flutter |
58 | |