handleScaleUpdate method
void
handleScaleUpdate(
- ScaleUpdateDetails details,
- ZoomPanController zoomPan,
- 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);
}
}