Skip to content

Commit dd5eb8e

Browse files
committed
Simplify drawing to canvas
1 parent 6724f28 commit dd5eb8e

File tree

3 files changed

+30
-22
lines changed

3 files changed

+30
-22
lines changed

src/canvas.ts

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,32 @@ import { nodes, isLeaf, Node } from "./quadtree";
33
export function initializeCanvas() {
44
const canvas = document.getElementById("canvas") as HTMLCanvasElement;
55
const scale = window.devicePixelRatio;
6-
canvas.width = window.innerWidth * scale;
7-
canvas.height = window.innerHeight * scale;
6+
canvas.width = Math.floor(window.innerWidth * scale);
7+
canvas.height = Math.floor(window.innerHeight * scale);
88
const context = canvas.getContext("2d") as CanvasRenderingContext2D;
99
context.scale(scale, scale);
10+
1011
return {
11-
canvas,
12-
context,
12+
draw: (tree: Node) => {
13+
clear(context, canvas.width, canvas.height);
14+
for (let node of nodes(tree)) {
15+
drawNode(context, node);
16+
drawPoints(context, node);
17+
}
18+
},
19+
width: canvas.width / scale,
20+
height: canvas.height / scale,
21+
element: canvas,
1322
};
1423
}
1524

16-
export function clearCanvas(context: CanvasRenderingContext2D) {
25+
function clear(
26+
context: CanvasRenderingContext2D,
27+
width: number,
28+
height: number
29+
) {
1730
context.fillStyle = "#eee";
18-
context.fillRect(0, 0, window.innerWidth, window.innerHeight);
31+
context.fillRect(0, 0, width, height);
1932
}
2033

2134
function drawNode(context: CanvasRenderingContext2D, node: Node) {
@@ -35,11 +48,3 @@ function drawPoints(context: CanvasRenderingContext2D, node: Node) {
3548
}
3649
}
3750
}
38-
39-
export function draw(tree: Node, context: CanvasRenderingContext2D) {
40-
clearCanvas(context);
41-
for (let node of nodes(tree)) {
42-
drawNode(context, node);
43-
drawPoints(context, node);
44-
}
45-
}

src/index.ts

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { insert, construct } from "./quadtree";
2-
import { draw, initializeCanvas } from "./canvas";
2+
import { initializeCanvas } from "./canvas";
33

4-
const { canvas, context } = initializeCanvas();
4+
const canvas = initializeCanvas();
55

66
const points = Array.from({ length: 256 }, () => {
77
return {
@@ -17,13 +17,12 @@ let tree = construct(points, {
1717
height: canvas.height,
1818
});
1919

20-
draw(tree, context);
21-
canvas.addEventListener("click", (event) => {
22-
const { left, top } = canvas.getBoundingClientRect();
20+
canvas.draw(tree);
21+
canvas.element.addEventListener("click", (event) => {
2322
const point = {
24-
x: event.clientX - left,
25-
y: event.clientY - top,
23+
x: event.clientX,
24+
y: event.clientY,
2625
};
2726
tree = insert(tree, point);
28-
draw(tree, context);
27+
canvas.draw(tree);
2928
});

src/styles.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,8 @@
33
}
44
body {
55
margin: 0;
6+
}
7+
#canvas {
8+
width: 100vw;
9+
height: 100vh;
610
}

0 commit comments

Comments
 (0)