performPaint method
Hook for subclasses to implement actual painting.
Implementation
@override
void performPaint(Buffer buffer, Offset offset) {
// 1. Paint children first
super.performPaint(buffer, offset);
final effectWidget = widget as EffectWidget;
final bounds = Rect(offset.dx, offset.dy, size.width, size.height);
if (effectWidget.globalComposite) {
// 2a. Register the effect for global compositing
buffer.addEffect(
RegisteredEffect(
effectWidget.effect,
bounds,
0, // zIndex filled during compositing
0, // originalIndex filled during compositing
),
);
} else {
// 2b. Apply locally to the child's output immediately
final effectTraceId = Tracer.registerString(
'EffectWidget:applyEffect:${effectWidget.effect.runtimeType}',
);
Tracer.record(effectTraceId, Phase.begin, TraceCategory.paint);
try {
effectWidget.effect.applyEffect(buffer, bounds);
} finally {
Tracer.record(effectTraceId, Phase.end, TraceCategory.paint);
}
}
}