All files / src/shared/lib/helpers subpixels.ts

84.21% Statements 16/19
40% Branches 2/5
80% Functions 4/5
78.57% Lines 11/14

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 2943x     43x 6x   43x 5x   43x 30x     43x                 43x 4x 4x        
import { NUM_SUBPIXEL_BITS } from "consts";
import type { DistanceUnitType } from "shared/lib/entities/entitiesTypes";
 
export const tileToSubpx = (x: number) =>
  Math.floor(x * (1 << (3 + NUM_SUBPIXEL_BITS)));
 
export const pxToSubpx = (x: number) =>
  Math.floor(x * (1 << NUM_SUBPIXEL_BITS));
 
export const subpxShiftForUnits = (units: DistanceUnitType) => {
  return units === "tiles" ? NUM_SUBPIXEL_BITS + 3 : NUM_SUBPIXEL_BITS;
};
 
export const subpxSnapMaskForUnits = (units: DistanceUnitType) => {
  const bitsToClear =
    units === "tiles"
      ? NUM_SUBPIXEL_BITS + 3 // 3 extra bits for 8px tiles
      : NUM_SUBPIXEL_BITS;
 
  return ~((1 << bitsToClear) - 1) & 0xffff;
};
 
export const unitsValueToSubpx = (x: number, units: DistanceUnitType) => {
  if (units === "tiles") {
    return tileToSubpx(x);
  }
  return pxToSubpx(x);
};