zoomForScale static method
KLineZoomResult
zoomForScale({
- required double startBeginIndex,
- required double startItemCount,
- required double scale,
- required double startFocalDx,
- required double currentFocalDx,
- required double viewportWidth,
- required int dataLength,
- required double minItemCount,
- required double maxItemCount,
- double trailingBlankItemCount = 0,
- double minTrailingVisibleItemCount = 3,
Implementation
static KLineZoomResult zoomForScale({
required double startBeginIndex,
required double startItemCount,
required double scale,
required double startFocalDx,
required double currentFocalDx,
required double viewportWidth,
required int dataLength,
required double minItemCount,
required double maxItemCount,
double trailingBlankItemCount = 0,
double minTrailingVisibleItemCount = 3,
}) {
if (dataLength <= 0 || startItemCount <= 0 || viewportWidth <= 0) {
return const KLineZoomResult(beginIndex: 0.0, itemCount: 0.0);
}
final safeScale = scale > 0 ? scale : 1.0;
final maxVisibleCount = min(maxItemCount, dataLength.toDouble());
final minVisibleCount = min(minItemCount, maxVisibleCount);
final nextItemCount = (startItemCount / safeScale)
.clamp(minVisibleCount, maxVisibleCount)
.toDouble();
final startFocalRatio = (startFocalDx / viewportWidth).clamp(0.0, 1.0);
final currentFocalRatio = (currentFocalDx / viewportWidth).clamp(0.0, 1.0);
final focalDataIndex = startBeginIndex + startItemCount * startFocalRatio;
final rawBeginIndex = focalDataIndex - nextItemCount * currentFocalRatio;
final maxBeginIndex = maxBeginIndexFor(
dataLength: dataLength,
itemCount: nextItemCount,
trailingBlankItemCount: trailingBlankItemCount,
minTrailingVisibleItemCount: minTrailingVisibleItemCount,
);
return KLineZoomResult(
beginIndex: rawBeginIndex.clamp(0.0, maxBeginIndex).toDouble(),
itemCount: nextItemCount,
);
}