| // Copyright 2013 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "flutter/flow/embedded_views.h" |
| |
| namespace flutter { |
| |
| DisplayListEmbedderViewSlice::DisplayListEmbedderViewSlice(SkRect view_bounds) { |
| builder_ = std::make_unique<DisplayListBuilder>( |
| /*bounds=*/view_bounds, |
| /*prepare_rtree=*/true); |
| } |
| |
| DlCanvas* DisplayListEmbedderViewSlice::canvas() { |
| return builder_ ? builder_.get() : nullptr; |
| } |
| |
| void DisplayListEmbedderViewSlice::end_recording() { |
| display_list_ = builder_->Build(); |
| FML_DCHECK(display_list_->has_rtree()); |
| builder_ = nullptr; |
| } |
| |
| const DlRegion& DisplayListEmbedderViewSlice::getRegion() const { |
| return display_list_->rtree()->region(); |
| } |
| |
| void DisplayListEmbedderViewSlice::render_into(DlCanvas* canvas) { |
| canvas->DrawDisplayList(display_list_); |
| } |
| |
| void DisplayListEmbedderViewSlice::dispatch(DlOpReceiver& receiver) { |
| display_list_->Dispatch(receiver); |
| } |
| |
| bool DisplayListEmbedderViewSlice::is_empty() { |
| return display_list_->bounds().isEmpty(); |
| } |
| |
| bool DisplayListEmbedderViewSlice::recording_ended() { |
| return builder_ == nullptr; |
| } |
| |
| void ExternalViewEmbedder::SubmitFlutterView( |
| GrDirectContext* context, |
| const std::shared_ptr<impeller::AiksContext>& aiks_context, |
| std::unique_ptr<SurfaceFrame> frame) { |
| frame->Submit(); |
| } |
| |
| bool ExternalViewEmbedder::SupportsDynamicThreadMerging() { |
| return false; |
| } |
| |
| void ExternalViewEmbedder::Teardown() {} |
| |
| void MutatorsStack::PushClipRect(const SkRect& rect) { |
| std::shared_ptr<Mutator> element = std::make_shared<Mutator>(rect); |
| vector_.push_back(element); |
| } |
| |
| void MutatorsStack::PushClipRRect(const SkRRect& rrect) { |
| std::shared_ptr<Mutator> element = std::make_shared<Mutator>(rrect); |
| vector_.push_back(element); |
| } |
| |
| void MutatorsStack::PushClipPath(const SkPath& path) { |
| std::shared_ptr<Mutator> element = std::make_shared<Mutator>(path); |
| vector_.push_back(element); |
| } |
| |
| void MutatorsStack::PushTransform(const SkMatrix& matrix) { |
| std::shared_ptr<Mutator> element = std::make_shared<Mutator>(matrix); |
| vector_.push_back(element); |
| } |
| |
| void MutatorsStack::PushOpacity(const int& alpha) { |
| std::shared_ptr<Mutator> element = std::make_shared<Mutator>(alpha); |
| vector_.push_back(element); |
| } |
| |
| void MutatorsStack::PushBackdropFilter( |
| const std::shared_ptr<const DlImageFilter>& filter, |
| const SkRect& filter_rect) { |
| std::shared_ptr<Mutator> element = |
| std::make_shared<Mutator>(filter, filter_rect); |
| vector_.push_back(element); |
| } |
| |
| void MutatorsStack::Pop() { |
| vector_.pop_back(); |
| } |
| |
| void MutatorsStack::PopTo(size_t stack_count) { |
| while (vector_.size() > stack_count) { |
| Pop(); |
| } |
| } |
| |
| const std::vector<std::shared_ptr<Mutator>>::const_reverse_iterator |
| MutatorsStack::Top() const { |
| return vector_.rend(); |
| } |
| |
| const std::vector<std::shared_ptr<Mutator>>::const_reverse_iterator |
| MutatorsStack::Bottom() const { |
| return vector_.rbegin(); |
| } |
| |
| const std::vector<std::shared_ptr<Mutator>>::const_iterator |
| MutatorsStack::Begin() const { |
| return vector_.begin(); |
| } |
| |
| const std::vector<std::shared_ptr<Mutator>>::const_iterator MutatorsStack::End() |
| const { |
| return vector_.end(); |
| } |
| |
| } // namespace flutter |