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/embedded_views.h"
6
7namespace flutter {
8
9DisplayListEmbedderViewSlice::DisplayListEmbedderViewSlice(SkRect view_bounds) {
10 builder_ = std::make_unique<DisplayListBuilder>(
11 /*bounds=*/args&: view_bounds,
12 /*prepare_rtree=*/args: true);
13}
14
15DlCanvas* DisplayListEmbedderViewSlice::canvas() {
16 return builder_ ? builder_.get() : nullptr;
17}
18
19void DisplayListEmbedderViewSlice::end_recording() {
20 display_list_ = builder_->Build();
21 builder_ = nullptr;
22}
23
24std::list<SkRect> DisplayListEmbedderViewSlice::searchNonOverlappingDrawnRects(
25 const SkRect& query) const {
26 return display_list_->rtree()->searchAndConsolidateRects(query);
27}
28
29void DisplayListEmbedderViewSlice::render_into(DlCanvas* canvas) {
30 canvas->DrawDisplayList(display_list: display_list_);
31}
32
33void DisplayListEmbedderViewSlice::dispatch(DlOpReceiver& receiver) {
34 display_list_->Dispatch(ctx&: receiver);
35}
36
37bool DisplayListEmbedderViewSlice::is_empty() {
38 return display_list_->bounds().isEmpty();
39}
40
41bool DisplayListEmbedderViewSlice::recording_ended() {
42 return builder_ == nullptr;
43}
44
45void ExternalViewEmbedder::SubmitFrame(
46 GrDirectContext* context,
47 const std::shared_ptr<impeller::AiksContext>& aiks_context,
48 std::unique_ptr<SurfaceFrame> frame) {
49 frame->Submit();
50}
51
52void MutatorsStack::PushClipRect(const SkRect& rect) {
53 std::shared_ptr<Mutator> element = std::make_shared<Mutator>(args: rect);
54 vector_.push_back(x: element);
55}
56
57void MutatorsStack::PushClipRRect(const SkRRect& rrect) {
58 std::shared_ptr<Mutator> element = std::make_shared<Mutator>(args: rrect);
59 vector_.push_back(x: element);
60}
61
62void MutatorsStack::PushClipPath(const SkPath& path) {
63 std::shared_ptr<Mutator> element = std::make_shared<Mutator>(args: path);
64 vector_.push_back(x: element);
65}
66
67void MutatorsStack::PushTransform(const SkMatrix& matrix) {
68 std::shared_ptr<Mutator> element = std::make_shared<Mutator>(args: matrix);
69 vector_.push_back(x: element);
70}
71
72void MutatorsStack::PushOpacity(const int& alpha) {
73 std::shared_ptr<Mutator> element = std::make_shared<Mutator>(args: alpha);
74 vector_.push_back(x: element);
75}
76
77void MutatorsStack::PushBackdropFilter(
78 const std::shared_ptr<const DlImageFilter>& filter,
79 const SkRect& filter_rect) {
80 std::shared_ptr<Mutator> element =
81 std::make_shared<Mutator>(args: filter, args: filter_rect);
82 vector_.push_back(x: element);
83}
84
85void MutatorsStack::Pop() {
86 vector_.pop_back();
87}
88
89void MutatorsStack::PopTo(size_t stack_count) {
90 while (vector_.size() > stack_count) {
91 Pop();
92 }
93}
94
95const std::vector<std::shared_ptr<Mutator>>::const_reverse_iterator
96MutatorsStack::Top() const {
97 return vector_.rend();
98}
99
100const std::vector<std::shared_ptr<Mutator>>::const_reverse_iterator
101MutatorsStack::Bottom() const {
102 return vector_.rbegin();
103}
104
105const std::vector<std::shared_ptr<Mutator>>::const_iterator
106MutatorsStack::Begin() const {
107 return vector_.begin();
108}
109
110const std::vector<std::shared_ptr<Mutator>>::const_iterator MutatorsStack::End()
111 const {
112 return vector_.end();
113}
114
115bool ExternalViewEmbedder::SupportsDynamicThreadMerging() {
116 return false;
117}
118
119void ExternalViewEmbedder::Teardown() {}
120
121} // namespace flutter
122

source code of flutter_engine/flutter/flow/embedded_views.cc