Skip to content

Commit c797780

Browse files
authored
fix: support pixel density & responsiveness (#33)
1 parent 9a1580e commit c797780

File tree

5 files changed

+24
-10
lines changed

5 files changed

+24
-10
lines changed

src/WebGPU/canvasSizeObserver.ts

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,26 @@ export default function canvasSizeObserver(
1717
const observer = new ResizeObserver((entries) => {
1818
for (const entry of entries) {
1919
const canvas = entry.target as HTMLCanvasElement
20-
const width = entry.contentBoxSize[0].inlineSize | 0
21-
const height = entry.contentBoxSize[0].blockSize | 0
20+
// Safari does not support devicePixelContentBoxSize
21+
const width =
22+
entry.devicePixelContentBoxSize[0].inlineSize ||
23+
entry.contentBoxSize[0].inlineSize * devicePixelRatio
24+
const height =
25+
entry.devicePixelContentBoxSize[0].blockSize ||
26+
entry.contentBoxSize[0].blockSize * devicePixelRatio
27+
2228
updateCanvasSize(canvas, width, height, device)
2329
callback()
2430
}
2531
})
26-
observer.observe(canvas)
32+
33+
try {
34+
observer.observe(canvas, { box: 'device-pixel-content-box' })
35+
} catch {
36+
observer.observe(canvas, { box: 'content-box' })
37+
}
2738

2839
// observer calls it anyway but it just happens late enough that user see a flicker
40+
// it it just displayed for a brief second, so we don't play with devicePixelContentBoxSize or devicePixelRatio
2941
updateCanvasSize(canvas, canvas.clientWidth, canvas.clientHeight, device)
3042
}

src/WebGPU/pointer.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ export default function initMouseController(
5454

5555
const move = () => {
5656
updatePointer(e)
57-
on_pointer_move(pointer.x, canvas.height - pointer.y)
57+
on_pointer_move(pointer.x, canvas.clientHeight - pointer.y)
5858
}
5959
if (pointer.afterPickEventsQueue.length > 0) {
6060
pointer.afterPickEventsQueue.push({
@@ -72,7 +72,7 @@ export default function initMouseController(
7272
updatePointer(e)
7373
pointer.afterPickEventsQueue.push({
7474
requireNewPick: true,
75-
cb: on_pointer_down.bind(null, pointer.x, canvas.height - pointer.y),
75+
cb: on_pointer_down.bind(null, pointer.x, canvas.clientHeight - pointer.y),
7676
})
7777
})
7878

src/getCanvasMatrix.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ import mat4 from 'utils/mat4'
33
export default function getCanvasMatrix(canvas: HTMLCanvasElement) {
44
const matrix = mat4.ortho(
55
0, // left
6-
canvas.clientWidth, // right
6+
canvas.width, // right
77
0, // bottom
8-
canvas.clientHeight, // top
8+
canvas.height, // top
99
1, // near
1010
-1 // far
1111
)

src/logic/transform_ui.zig

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -227,8 +227,8 @@ pub fn get_transform_ui(
227227
const icon_size = thickness - 5.0;
228228
const msdf_data = Msdf.get_msdf_vertex_data(
229229
Msdf.IconId.rotate,
230-
p1.x - icon_size * 0.5 - 0.5,
231-
p1.y - icon_size * 0.5 + 0.5,
230+
p1.x - icon_size * 0.5 - 0.25,
231+
p1.y - icon_size * 0.5 + 0.75,
232232
icon_size,
233233
if (hovered_elem_id == transform_line.id) black else white,
234234
);

src/run.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ export default function runCreator(
2424
textures: TextureSource[],
2525
onEmptyEvents: VoidFunction // call when there is no more events to process
2626
): VoidFunction {
27-
const canvasMatrix = getCanvasMatrix(canvas)
2827
let canvasPass: GPURenderPassEncoder
28+
let canvasMatrix: Float32Array
2929

3030
const pickManager = new PickManager(device)
3131
let pickMatrix: Float32Array
@@ -68,6 +68,8 @@ export default function runCreator(
6868

6969
const canvasDescriptor = getCanvasRenderDescriptor(context, device)
7070
canvasPass = encoder.beginRenderPass(canvasDescriptor)
71+
canvasMatrix = getCanvasMatrix(canvas)
72+
7173
canvas_render()
7274
canvasPass.end()
7375

0 commit comments

Comments
 (0)