digital-vcd-render/src/hook/wave-view/x-offset-update.js

31 lines
1016 B
JavaScript

import { globalLookup } from "../global";
const xOffsetUpdate = (pstate, nextOffsetXFn) => {
let nextOffsetX = nextOffsetXFn();
const { width, xOffset, xScale, time, sidebarWidth } = pstate;
const maxTime = globalLookup.maxTime;
const maxOffsetX = width + xScale * maxTime * 1.0; // maximum offset
nextOffsetX = Math.min(nextOffsetX, maxOffsetX);
const minOffsetX = - width - xScale * maxTime * 1.0; // minimum offset
nextOffsetX = Math.max(nextOffsetX, minOffsetX);
// 检测 0 是否超出了左侧的 --sidebar-width 的位置
// 参考公式 xx = Math.round((xCursor - xOffset) / xScale) * tgcd; 带入 xx = 0
if (nextOffsetX >= sidebarWidth) {
nextOffsetX = sidebarWidth - 20;
}
if (nextOffsetX === xOffset) {
return false; // exit without scroll
}
pstate.oldXOffset = pstate.xOffset;
pstate.xOffset = nextOffsetX;
return true;
};
export default xOffsetUpdate;