| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- import { mixNumber } from '../../utils/mix/number.mjs';
- const SCALE_PRECISION = 0.0001;
- const SCALE_MIN = 1 - SCALE_PRECISION;
- const SCALE_MAX = 1 + SCALE_PRECISION;
- const TRANSLATE_PRECISION = 0.01;
- const TRANSLATE_MIN = 0 - TRANSLATE_PRECISION;
- const TRANSLATE_MAX = 0 + TRANSLATE_PRECISION;
- function calcLength(axis) {
- return axis.max - axis.min;
- }
- function isNear(value, target, maxDistance) {
- return Math.abs(value - target) <= maxDistance;
- }
- function calcAxisDelta(delta, source, target, origin = 0.5) {
- delta.origin = origin;
- delta.originPoint = mixNumber(source.min, source.max, delta.origin);
- delta.scale = calcLength(target) / calcLength(source);
- delta.translate =
- mixNumber(target.min, target.max, delta.origin) - delta.originPoint;
- if ((delta.scale >= SCALE_MIN && delta.scale <= SCALE_MAX) ||
- isNaN(delta.scale)) {
- delta.scale = 1.0;
- }
- if ((delta.translate >= TRANSLATE_MIN &&
- delta.translate <= TRANSLATE_MAX) ||
- isNaN(delta.translate)) {
- delta.translate = 0.0;
- }
- }
- function calcBoxDelta(delta, source, target, origin) {
- calcAxisDelta(delta.x, source.x, target.x, origin ? origin.originX : undefined);
- calcAxisDelta(delta.y, source.y, target.y, origin ? origin.originY : undefined);
- }
- function calcRelativeAxis(target, relative, parent) {
- target.min = parent.min + relative.min;
- target.max = target.min + calcLength(relative);
- }
- function calcRelativeBox(target, relative, parent) {
- calcRelativeAxis(target.x, relative.x, parent.x);
- calcRelativeAxis(target.y, relative.y, parent.y);
- }
- function calcRelativeAxisPosition(target, layout, parent) {
- target.min = layout.min - parent.min;
- target.max = target.min + calcLength(layout);
- }
- function calcRelativePosition(target, layout, parent) {
- calcRelativeAxisPosition(target.x, layout.x, parent.x);
- calcRelativeAxisPosition(target.y, layout.y, parent.y);
- }
- export { calcAxisDelta, calcBoxDelta, calcLength, calcRelativeAxis, calcRelativeAxisPosition, calcRelativeBox, calcRelativePosition, isNear };
|