scaleCanvasToViewBox method

void scaleCanvasToViewBox(
  1. Canvas canvas,
  2. Rect canvasRect,
  3. 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);
}