scaleCanvasToViewBox method
void
scaleCanvasToViewBox(
- Canvas canvas,
- Rect canvasRect,
- Rect viewBoxRect
)
Implementation
void scaleCanvasToViewBox(Canvas canvas, Rect canvasRect, Rect viewBoxRect) {
final fittedSizes = applyBoxFit(fit, viewBoxRect.size, canvasRect.size);
// scale viewbox size (source) to canvas size (destination)
var sx = fittedSizes.destination.width / fittedSizes.source.width;
var sy = fittedSizes.destination.height / fittedSizes.source.height;
final Size scaledHalfViewBoxSize =
Size(viewBoxRect.size.width * sx, viewBoxRect.size.height * sy) / 2.0;
final Size halfCanvasSize = canvasRect.size / 2.0;
// center align
final Offset shift = Offset(
halfCanvasSize.width - scaledHalfViewBoxSize.width,
halfCanvasSize.height - scaledHalfViewBoxSize.height,
);
if (shift != Offset.zero) canvas.translate(shift.dx, shift.dy);
if (sx != 1.0 && sy != 1.0) canvas.scale(sx, sy);
}