Shad Amethyst
6aa87d052a
|
2 years ago | |
---|---|---|
src | 2 years ago | |
test | 2 years ago | |
.gitignore | 2 years ago | |
.npmignore | 2 years ago | |
LICENSE | 2 years ago | |
README.md | 2 years ago | |
package-lock.json | 2 years ago | |
package.json | 2 years ago | |
pptk-old.js | 2 years ago | |
tsconfig.json | 2 years ago | |
vite.config.ts | 2 years ago |
README.md
Pixel-Perfect ToolKit
This library aims to solve two problems in web-development, that are notoriously hard to both solve at once:
- support for mobile devices (high-DPI, multi-touch, etc.)
- pixel-perfect control, notably for pixel fonts
Limitations
Canvases must be contained
Because canvases must have an integer width and height, and because window.devicePixelRatio
may be a floating-point value.
For instance, if dpr = 1.5
and the desired with is 81
CSS pixels, then the desired canvas width would be 81 * 1.5 = 121.5
.
Naively setting canvas.width = 121.5
results in the browser truncating it to 121
, which only cover 121 / 1.5 ≈ 80.66
CSS pixels, resulting in blurred edges as the element has to be stretched horizontally by 0.4%
.
Instead, we set canvas.width = Math.ceil(121.5) = 122
, then set canvas.style.width
to 122 / 1.5 ≈ 81.33px
.
This requires a parent "container" element to read the desired width from and to hide the overflowing 0.33
CSS pixel.
This is what the container element should have as style:
.container {
/* Necessary properties */
overflow: hidden;
/* Optionally set a different background color to reduce flicker */
background-color: /* ... */;
/* Width and height should be set to anything besides `fit-content` */
width: /* ... */;
height: /* ... */;
}