drawRoughOptimized method

void drawRoughOptimized(
  1. Drawable drawable,
  2. Paint pathPaint,
  3. Paint fillPaint
)

Web-optimized rough drawing with performance enhancements

Implementation

void drawRoughOptimized(Drawable drawable, Paint pathPaint, Paint fillPaint) {
  final List<OpSet> sets = drawable.sets;

  // Batch similar operations together for web performance
  final List<OpSet> pathOps = [];
  final List<OpSet> fillPathOps = [];
  final List<OpSet> fillSketchOps = [];

  // Group operations by type
  for (final OpSet drawing in sets) {
    switch (drawing.type) {
      case OpSetType.path:
        pathOps.add(drawing);
        break;
      case OpSetType.fillPath:
        fillPathOps.add(drawing);
        break;
      case OpSetType.fillSketch:
        fillSketchOps.add(drawing);
        break;
    }
  }

  // Draw fill operations first (painter's algorithm)
  if (fillPathOps.isNotEmpty) {
    final Paint fillPaintCached = _getCachedPaint(fillPaint, PaintingStyle.fill);
    for (final OpSet drawing in fillPathOps) {
      final Path fillPath = _drawToContextOptimized(drawing)..close();
      drawPath(fillPath, fillPaintCached);
    }
  }

  // Draw fill sketches
  if (fillSketchOps.isNotEmpty) {
    final Paint fillPaintCached = _getCachedPaint(fillPaint, null);
    for (final OpSet drawing in fillSketchOps) {
      drawPath(_drawToContextOptimized(drawing), fillPaintCached);
    }
  }

  // Draw paths last
  if (pathOps.isNotEmpty) {
    final Paint pathPaintCached = _getCachedPaint(pathPaint, null);
    for (final OpSet drawing in pathOps) {
      drawPath(_drawToContextOptimized(drawing), pathPaintCached);
    }
  }
}