-
Notifications
You must be signed in to change notification settings - Fork 0
/
utils.js
43 lines (35 loc) · 1.13 KB
/
utils.js
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
export function drawButton(ctx, details) {
const {x, y, height, width, color, text} = details;
ctx.textAlign="center";
ctx.font = `20px slkscr`;
ctx.fillStyle = color;
ctx.fillRect(x - width/2, y - height/2, width, height)
ctx.fillStyle = "White";
ctx.textBaseline = 'middle';
ctx.fillText(text, x, y);
}
export function parseText(text, fontSize, targetWdith, topGap, ctx) {
ctx.font = `${fontSize}px slkscr`;
const lineHeight = fontSize + 2;
const lines = text.flatMap((st) => splitStringByLength(st, targetWdith, ctx));
const parsedLines = lines.map((text, i) => ({
text,
y: topGap + lineHeight * i,
}));
return { lines: parsedLines, fontSize };
}
function splitStringByLength(str, length, ctx) {
const words = str.split(" ");
const chunks = [];
let currentChunk = "";
for (let i = 0; i < words.length; i++) {
const word = words[i];
if (ctx.measureText(currentChunk + " " + word).width > length) {
chunks.push(currentChunk.trim());
currentChunk = "";
}
currentChunk += (currentChunk === "" ? "" : " ") + word;
}
chunks.push(currentChunk.trim());
return chunks;
}