diff --git a/engine/src/flutter/impeller/display_list/dl_dispatcher.cc b/engine/src/flutter/impeller/display_list/dl_dispatcher.cc index 0ee867422c4..037286c352c 100644 --- a/engine/src/flutter/impeller/display_list/dl_dispatcher.cc +++ b/engine/src/flutter/impeller/display_list/dl_dispatcher.cc @@ -983,23 +983,23 @@ void CanvasDlDispatcher::SetBackdropData( //// Text Frame Dispatcher -TextFrameDispatcher::TextFrameDispatcher(const ContentContext& renderer, +FirstPassDispatcher::FirstPassDispatcher(const ContentContext& renderer, const Matrix& initial_matrix, const Rect cull_rect) : renderer_(renderer), matrix_(initial_matrix) { cull_rect_state_.push_back(cull_rect); } -TextFrameDispatcher::~TextFrameDispatcher() { +FirstPassDispatcher::~FirstPassDispatcher() { FML_DCHECK(cull_rect_state_.size() == 1); } -void TextFrameDispatcher::save() { +void FirstPassDispatcher::save() { stack_.emplace_back(matrix_); cull_rect_state_.push_back(cull_rect_state_.back()); } -void TextFrameDispatcher::saveLayer(const DlRect& bounds, +void FirstPassDispatcher::saveLayer(const DlRect& bounds, const flutter::SaveLayerOptions options, const flutter::DlImageFilter* backdrop, std::optional backdrop_id) { @@ -1040,31 +1040,31 @@ void TextFrameDispatcher::saveLayer(const DlRect& bounds, } } -void TextFrameDispatcher::restore() { +void FirstPassDispatcher::restore() { matrix_ = stack_.back(); stack_.pop_back(); cull_rect_state_.pop_back(); } -void TextFrameDispatcher::translate(DlScalar tx, DlScalar ty) { +void FirstPassDispatcher::translate(DlScalar tx, DlScalar ty) { matrix_ = matrix_.Translate({tx, ty}); } -void TextFrameDispatcher::scale(DlScalar sx, DlScalar sy) { +void FirstPassDispatcher::scale(DlScalar sx, DlScalar sy) { matrix_ = matrix_.Scale({sx, sy, 1.0f}); } -void TextFrameDispatcher::rotate(DlScalar degrees) { +void FirstPassDispatcher::rotate(DlScalar degrees) { matrix_ = matrix_ * Matrix::MakeRotationZ(Degrees(degrees)); } -void TextFrameDispatcher::skew(DlScalar sx, DlScalar sy) { +void FirstPassDispatcher::skew(DlScalar sx, DlScalar sy) { matrix_ = matrix_ * Matrix::MakeSkew(sx, sy); } // clang-format off // 2x3 2D affine subset of a 4x4 transform in row major order - void TextFrameDispatcher::transform2DAffine(DlScalar mxx, DlScalar mxy, DlScalar mxt, + void FirstPassDispatcher::transform2DAffine(DlScalar mxx, DlScalar mxy, DlScalar mxt, DlScalar myx, DlScalar myy, DlScalar myt) { matrix_ = matrix_ * Matrix::MakeColumn( mxx, myx, 0.0f, 0.0f, @@ -1075,7 +1075,7 @@ void TextFrameDispatcher::skew(DlScalar sx, DlScalar sy) { } // full 4x4 transform in row major order - void TextFrameDispatcher::transformFullPerspective( + void FirstPassDispatcher::transformFullPerspective( DlScalar mxx, DlScalar mxy, DlScalar mxz, DlScalar mxt, DlScalar myx, DlScalar myy, DlScalar myz, DlScalar myt, DlScalar mzx, DlScalar mzy, DlScalar mzz, DlScalar mzt, @@ -1089,11 +1089,11 @@ void TextFrameDispatcher::skew(DlScalar sx, DlScalar sy) { } // clang-format on -void TextFrameDispatcher::transformReset() { +void FirstPassDispatcher::transformReset() { matrix_ = Matrix(); } -void TextFrameDispatcher::drawTextFrame( +void FirstPassDispatcher::drawTextFrame( const std::shared_ptr& text_frame, DlScalar x, DlScalar y) { @@ -1122,7 +1122,7 @@ void TextFrameDispatcher::drawTextFrame( ); } -const Rect TextFrameDispatcher::GetCurrentLocalCullingBounds() const { +const Rect FirstPassDispatcher::GetCurrentLocalCullingBounds() const { auto cull_rect = cull_rect_state_.back(); if (!cull_rect.IsEmpty() && !cull_rect.IsMaximum()) { Matrix inverse = matrix_.Invert(); @@ -1131,7 +1131,7 @@ const Rect TextFrameDispatcher::GetCurrentLocalCullingBounds() const { return cull_rect; } -void TextFrameDispatcher::drawDisplayList( +void FirstPassDispatcher::drawDisplayList( const sk_sp display_list, DlScalar opacity) { [[maybe_unused]] size_t stack_depth = stack_.size(); @@ -1165,27 +1165,27 @@ void TextFrameDispatcher::drawDisplayList( } // |flutter::DlOpReceiver| -void TextFrameDispatcher::setDrawStyle(flutter::DlDrawStyle style) { +void FirstPassDispatcher::setDrawStyle(flutter::DlDrawStyle style) { paint_.style = ToStyle(style); } // |flutter::DlOpReceiver| -void TextFrameDispatcher::setColor(flutter::DlColor color) { +void FirstPassDispatcher::setColor(flutter::DlColor color) { paint_.color = skia_conversions::ToColor(color); } // |flutter::DlOpReceiver| -void TextFrameDispatcher::setStrokeWidth(DlScalar width) { +void FirstPassDispatcher::setStrokeWidth(DlScalar width) { paint_.stroke_width = width; } // |flutter::DlOpReceiver| -void TextFrameDispatcher::setStrokeMiter(DlScalar limit) { +void FirstPassDispatcher::setStrokeMiter(DlScalar limit) { paint_.stroke_miter = limit; } // |flutter::DlOpReceiver| -void TextFrameDispatcher::setStrokeCap(flutter::DlStrokeCap cap) { +void FirstPassDispatcher::setStrokeCap(flutter::DlStrokeCap cap) { switch (cap) { case flutter::DlStrokeCap::kButt: paint_.stroke_cap = Cap::kButt; @@ -1200,7 +1200,7 @@ void TextFrameDispatcher::setStrokeCap(flutter::DlStrokeCap cap) { } // |flutter::DlOpReceiver| -void TextFrameDispatcher::setStrokeJoin(flutter::DlStrokeJoin join) { +void FirstPassDispatcher::setStrokeJoin(flutter::DlStrokeJoin join) { switch (join) { case flutter::DlStrokeJoin::kMiter: paint_.stroke_join = Join::kMiter; @@ -1215,7 +1215,7 @@ void TextFrameDispatcher::setStrokeJoin(flutter::DlStrokeJoin join) { } // |flutter::DlOpReceiver| -void TextFrameDispatcher::setImageFilter(const flutter::DlImageFilter* filter) { +void FirstPassDispatcher::setImageFilter(const flutter::DlImageFilter* filter) { if (filter == nullptr) { has_image_filter_ = false; } else { @@ -1224,7 +1224,7 @@ void TextFrameDispatcher::setImageFilter(const flutter::DlImageFilter* filter) { } std::pair, size_t> -TextFrameDispatcher::TakeBackdropData() { +FirstPassDispatcher::TakeBackdropData() { std::unordered_map temp; std::swap(temp, backdrop_data_); return std::make_pair(temp, backdrop_count_); @@ -1267,7 +1267,7 @@ std::shared_ptr DisplayListToTexture( } SkIRect sk_cull_rect = SkIRect::MakeWH(size.width, size.height); - impeller::TextFrameDispatcher collector( + impeller::FirstPassDispatcher collector( context.GetContentContext(), impeller::Matrix(), Rect::MakeSize(size)); display_list->Dispatch(collector, sk_cull_rect); impeller::CanvasDlDispatcher impeller_dispatcher( @@ -1298,7 +1298,7 @@ bool RenderToOnscreen(ContentContext& context, bool reset_host_buffer) { Rect ip_cull_rect = Rect::MakeLTRB(cull_rect.left(), cull_rect.top(), cull_rect.right(), cull_rect.bottom()); - TextFrameDispatcher collector(context, impeller::Matrix(), ip_cull_rect); + FirstPassDispatcher collector(context, impeller::Matrix(), ip_cull_rect); display_list->Dispatch(collector, cull_rect); impeller::CanvasDlDispatcher impeller_dispatcher( diff --git a/engine/src/flutter/impeller/display_list/dl_dispatcher.h b/engine/src/flutter/impeller/display_list/dl_dispatcher.h index 4a612905208..ba43f1c15c9 100644 --- a/engine/src/flutter/impeller/display_list/dl_dispatcher.h +++ b/engine/src/flutter/impeller/display_list/dl_dispatcher.h @@ -295,16 +295,17 @@ class CanvasDlDispatcher : public DlDispatcherBase { Canvas& GetCanvas() override; }; -/// Performs a first pass over the display list to collect all text frames. -class TextFrameDispatcher : public flutter::IgnoreAttributeDispatchHelper, +/// Performs a first pass over the display list to collect infomation. +/// Collects things like text frames and backdrop filters. +class FirstPassDispatcher : public flutter::IgnoreAttributeDispatchHelper, public flutter::IgnoreClipDispatchHelper, public flutter::IgnoreDrawDispatchHelper { public: - TextFrameDispatcher(const ContentContext& renderer, + FirstPassDispatcher(const ContentContext& renderer, const Matrix& initial_matrix, const Rect cull_rect); - ~TextFrameDispatcher(); + ~FirstPassDispatcher(); void save() override;