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