handleScaleUpdate method

void handleScaleUpdate(
  1. ScaleUpdateDetails details,
  2. ZoomPanController zoomPan,
  3. ChartContext context
)

Implementation

void handleScaleUpdate(
  ScaleUpdateDetails details,
  ZoomPanController zoomPan,
  ChartContext context,
) {
  if (!enableZoomPan) return;

  final scaleDelta = details.scale / _lastScale;
  _lastScale = details.scale;

  if ((scaleDelta - 1.0).abs() > 0.01) {
    final focal = details.localFocalPoint;
    final bounds = context.bounds.rect;
    final cx = (focal.dx - bounds.left) / bounds.width;
    final cy = (bounds.bottom - focal.dy) / bounds.height;
    zoomPan.zoom(
      scaleDelta,
      centerX: cx.clamp(0.0, 1.0),
      centerY: cy.clamp(0.0, 1.0),
    );
    onZoom?.call(scaleDelta, focal);
  }

  if (details.focalPointDelta != Offset.zero) {
    final dx =
        -details.focalPointDelta.dx /
        context.bounds.width *
        context.viewport.width;
    final dy =
        details.focalPointDelta.dy /
        context.bounds.height *
        context.viewport.height;
    zoomPan.pan(dx, dy);
    onPan?.call(dx, dy);
  }
}