Handle linebreaks in wrapText

This commit is contained in:
Dragon Fire
2024-04-21 17:14:54 -04:00
parent adeb238185
commit cccd4f1393
2 changed files with 24 additions and 17 deletions
+1 -1
View File
@@ -213,7 +213,7 @@ module.exports = class TweetCommand extends Command {
ctx.fillText(line, x, y + (23 * currentLine) + (9 * currentLine)); ctx.fillText(line, x, y + (23 * currentLine) + (9 * currentLine));
continue; continue;
} }
let currentX = x + 0; let currentX = x;
for (let i = 0; i < lineNoEmoji.length; i++) { for (let i = 0; i < lineNoEmoji.length; i++) {
const linePart = lineNoEmoji[i]; const linePart = lineNoEmoji[i];
ctx.fillText(linePart, currentX, y + (23 * currentLine) + (9 * currentLine)); ctx.fillText(linePart, currentX, y + (23 * currentLine) + (9 * currentLine));
+23 -16
View File
@@ -213,26 +213,33 @@ module.exports = class CanvasUtil {
const words = text.split(' '); const words = text.split(' ');
const lines = []; const lines = [];
let line = ''; let line = '';
while (words.length > 0) { for (let i = 0; i < words.length; i++) {
let split = false; const word = words[i];
while (ctx.measureText(words[0]).width >= maxWidth) { if (word.includes('\n')) {
const temp = words[0]; const parts = word.split('\n');
words[0] = temp.slice(0, -1); for (let j = 0; j < parts.length; j++) {
if (split) { const part = parts[j];
words[1] = `${temp.slice(-1)}${words[1]}`; if (ctx.measureText(`${line}${part}`).width <= maxWidth) {
line += `${part} `;
} else {
lines.push(line.trim());
line = `${part} `;
}
if (j < parts.length - 1) {
lines.push(line.trim());
line = '';
}
}
} else {
if (ctx.measureText(`${line}${word}`).width <= maxWidth) {
line += `${word} `;
} else { } else {
split = true; lines.push(line.trim());
words.splice(1, 0, temp.slice(-1)); line = `${word} `;
} }
} }
if (ctx.measureText(`${line}${words[0]}`).width < maxWidth) {
line += `${words.shift()} `;
} else {
lines.push(line.trim());
line = '';
}
if (words.length === 0) lines.push(line.trim());
} }
lines.push(line.trim());
return resolve(lines); return resolve(lines);
}); });
} }