onTimeScale method

void onTimeScale(
  1. double deltaX
)

Horizontal scale drag on time scale (X-axis zoom).

Implementation

void onTimeScale(double deltaX) {
  // deltaX > 0 -> dragged right -> zoom in (widen candle width)
  // deltaX < 0 -> dragged left -> zoom out (narrow candle width)
  final scaleRatio = 1.0 + (deltaX / 120.0);
  final newWidth = (_viewport.candleWidth * scaleRatio).clamp(2.0, 50.0);
  if (newWidth == _viewport.candleWidth) return;

  final oldTotal = _viewport.candleTotalWidth;
  final newTotal = newWidth + _viewport.candleSpacing;
  final ratio = newTotal / oldTotal;

  final newOffset = (_viewport.scrollOffset * ratio).clamp(
    -120.0,
    double.infinity,
  );
  _viewport = _viewport.copyWith(
    candleWidth: newWidth,
    scrollOffset: newOffset,
  );
  notifyListeners();
}