insetChartMatrix function

Matrix4 insetChartMatrix(
  1. Matrix4 preliminary,
  2. ILayoutData dimensions,
  3. ResolvedChartInsets insets
)

Implementation

Matrix4 insetChartMatrix(Matrix4 preliminary, ILayoutData dimensions, ResolvedChartInsets insets) {
  if (insets.isEmpty || dimensions.width <= 0.0 || dimensions.height <= 0.0) return preliminary;

  final horizontal = insets.left + insets.right;
  final vertical = insets.top + insets.bottom;
  final collapseX = horizontal >= dimensions.width;
  final collapseY = vertical >= dimensions.height;
  final offsetX = collapseX ? dimensions.width * insets.left / horizontal : insets.left;
  final offsetY = collapseY ? dimensions.height * insets.top / vertical : insets.top;
  final scaleX = collapseX ? 0.0 : (dimensions.width - horizontal) / dimensions.width;
  final scaleY = collapseY ? 0.0 : (dimensions.height - vertical) / dimensions.height;

  return Matrix4.identity()
    ..translateByVector3(Vector3(offsetX, offsetY, 0.0))
    ..scaleByVector3(Vector3(scaleX, scaleY, 1.0))
    ..multiply(preliminary);
}