performPaint method

  1. @override
void performPaint(
  1. Buffer buffer,
  2. Offset offset
)
override

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);
    }
  }
}