19 transformed_filter_(nullptr) {}
24 if (!
context->IsSubtreeDirty()) {
26 if (
NotEquals(filter_, prev->filter_) || offset_ != prev->offset_) {
27 context->MarkSubtreeDirty(
context->GetOldLayerPaintRegion(old_layer));
32 if (
context->has_raster_cache()) {
33 context->WillPaintWithIntegralTransform();
37 auto filter = filter_->makeWithLocalMatrix(
context->GetMatrix());
49 context->SetLayerPaintRegion(
this,
context->CurrentSubtreeRegion());
53 auto mutator =
context->state_stack.save();
54 mutator.translate(offset_);
69 child_bounds = child_bounds.
Shift(offset_);
77 context->renderable_state_flags =
83 filter_->map_device_bounds(filter_in_bounds,
DlMatrix(), filter_out_bounds);
95 filter_->makeWithLocalMatrix(
context->state_stack.matrix());
98 if (transformed_filter_) {
107 auto mutator =
context.state_stack.save();
116 context.state_stack.fill(paint))) {
125 mutator.translate(offset_);
129 mutator.integralTransform();
138 context.state_stack.fill(paint);
std::unique_ptr< LayerRasterCacheItem > layer_raster_cache_item_
const DlRect & child_paint_bounds() const
void PrerollChildren(PrerollContext *context, DlRect *child_paint_bounds)
void PaintChildren(PaintContext &context) const override
virtual void DiffChildren(DiffContext *context, const ContainerLayer *old_layer)
DlPaint & setImageFilter(std::nullptr_t filter)
void Diff(DiffContext *context, const Layer *old_layer) override
void Paint(PaintContext &context) const override
void Preroll(PrerollContext *context) override
ImageFilterLayer(const std::shared_ptr< DlImageFilter > &filter, const DlPoint &offset=DlPoint())
static AutoPrerollSaveLayerState Create(PrerollContext *preroll_context, bool save_layer_is_active=true, bool layer_itself_performs_readback=false)
void set_paint_bounds(const DlRect &paint_bounds)
bool needs_painting(PaintContext &context) const
static constexpr int kCallerCanApplyColorFilter
static constexpr int kCallerCanApplyOpacity
#define FML_DCHECK(condition)
impeller::Matrix DlMatrix
bool NotEquals(const T *a, const U *b)
std::shared_ptr< ContextGLES > context
static constexpr Matrix MakeTranslation(const Vector3 &t)
static constexpr std::enable_if_t< std::is_floating_point_v< FT >, TRect > Make(const TRect< U > &rect)
RoundOut(const TRect< U > &r)
constexpr TRect< T > Shift(T dx, T dy) const
Returns a new rectangle translated by the given offset.