@devexperts/dxcharts-lite
Version:
44 lines (43 loc) • 1.81 kB
JavaScript
/*
* Copyright (C) 2019 - 2025 Devexperts Solutions IE Limited
* This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
* If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
export const ratioFromZoomXY = (zoomX, zoomY) => zoomX / zoomY;
export const zoomXToZoomY = (zoomX, ratio) => zoomX / ratio;
export const zoomYToZoomX = (zoomY, ratio) => zoomY * ratio;
/**
* Locks the zoomY with zoomX and zooms y-scale depending on x-scale.
* @param prevState
* @param newState
*/
export const changeYToKeepRatio = (prevState, newState) => {
const prevZoomX = prevState.zoomX;
const prevZoomY = prevState.zoomY;
const prevZoomXY = ratioFromZoomXY(prevZoomX, prevZoomY);
const prevYHeight = prevState.yEnd - prevState.yStart;
// recalculate zoomY
newState.zoomY = zoomXToZoomY(newState.zoomX, prevZoomXY);
const zoomYMult = newState.zoomY / prevZoomY;
const newYHeight = prevYHeight * zoomYMult;
const delta = newYHeight - prevYHeight;
newState.yEnd = newState.yEnd + delta / 2;
newState.yStart = newState.yStart - delta / 2;
};
/**
* Locks the zoomY with zoomX and zooms x-scale depending on y-scale.
* @param prevState
* @param newState
*/
export const changeXToKeepRatio = (prevState, newState) => {
const prevZoomX = prevState.zoomX;
const prevZoomY = prevState.zoomY;
const prevZoomXY = ratioFromZoomXY(prevZoomX, prevZoomY);
const prevXWidth = prevState.xEnd - prevState.xStart;
// recalculate zoomX
newState.zoomX = zoomYToZoomX(newState.zoomY, prevZoomXY);
const zoomXMult = newState.zoomX / prevZoomX;
const newXWidth = prevXWidth * zoomXMult;
const delta = newXWidth - prevXWidth;
newState.xStart = newState.xStart - delta;
};