ComputedIcon.fit constructor

ComputedIcon.fit(
  1. ResolvedIcon icon,
  2. double sizePx
)

Implementation

factory ComputedIcon.fit(ResolvedIcon icon, double sizePx) {
  if (!sizePx.isFinite || sizePx <= 0) {
    throw ArgumentError.value(
      sizePx,
      'sizePx',
      'Must be finite and positive.',
    );
  }
  final box = icon.viewBox;
  final scale = math.min(sizePx / box.width, sizePx / box.height);
  final x = -scale * (box.left / 2 + box.right / 2);
  final y = -scale * (box.top / 2 + box.bottom / 2);
  if (!scale.isFinite || scale <= 0 || !x.isFinite || !y.isFinite) {
    throw ArgumentError(
      'Icon fitting must be representable as finite geometry.',
    );
  }
  final sourceToLocal = vm.Matrix4.identity()
    ..translateByDouble(x, y, 0, 1)
    ..scaleByDouble(scale, scale, 1, 1);
  return ComputedIcon._(
    PathIR(icon.source.commands),
    sourceToLocal,
    icon.fillRule,
  );
}