修复文字行数计算和实际绘制不一致问题
This commit is contained in:
parent
0ca93907d2
commit
1836c3458a
22
lib/pen.js
22
lib/pen.js
@ -184,6 +184,7 @@ export default class Painter {
|
||||
let width = 0;
|
||||
let height;
|
||||
let extra;
|
||||
const paddings = this._doPaddings(view);
|
||||
switch (view.type) {
|
||||
case 'text': {
|
||||
const textArray = view.text.split('\n');
|
||||
@ -203,8 +204,9 @@ export default class Painter {
|
||||
const linesArray = [];
|
||||
for (let i = 0; i < textArray.length; ++i) {
|
||||
const textLength = this.ctx.measureText(textArray[i]).width;
|
||||
const partWidth = view.css.width ? view.css.width.toPx(false, this.style.width) : textLength;
|
||||
const partWidth = view.css.width ? view.css.width.toPx(false, this.style.width) - paddings[1] - paddings[3] : textLength;
|
||||
const calLines = Math.ceil(textLength / partWidth);
|
||||
// 取最长的作为 width
|
||||
width = partWidth > width ? partWidth : width;
|
||||
lines += calLines;
|
||||
linesArray[i] = calLines;
|
||||
@ -346,13 +348,13 @@ export default class Painter {
|
||||
x: view.css && view.css.right ? x - width : x,
|
||||
y: y
|
||||
};
|
||||
const pd = this._doPaddings(view);
|
||||
view.rect.left = view.rect.left - pd[3];
|
||||
view.rect.top = view.rect.top - pd[0];
|
||||
view.rect.right = view.rect.right + pd[1];
|
||||
view.rect.bottom = view.rect.bottom + pd[2];
|
||||
|
||||
view.rect.left = view.rect.left - paddings[3];
|
||||
view.rect.top = view.rect.top - paddings[0];
|
||||
view.rect.right = view.rect.right + paddings[1];
|
||||
view.rect.bottom = view.rect.bottom + paddings[2];
|
||||
if (view.type === 'text') {
|
||||
view.rect.minWidth = view.css.fontSize.toPx() + pd[1] + pd[3];
|
||||
view.rect.minWidth = view.css.fontSize.toPx() + paddings[1] + paddings[3];
|
||||
}
|
||||
|
||||
this.ctx.rotate(angle);
|
||||
@ -545,7 +547,7 @@ export default class Painter {
|
||||
}
|
||||
let lineIndex = 0;
|
||||
for (let j = 0; j < textArray.length; ++j) {
|
||||
const preLineLength = Math.round(textArray[j].length / linesArray[j]);
|
||||
const preLineLength = Math.ceil(textArray[j].length / linesArray[j]);
|
||||
let start = 0;
|
||||
let alreadyCount = 0;
|
||||
for (let i = 0; i < linesArray[j]; ++i) {
|
||||
@ -562,12 +564,8 @@ export default class Painter {
|
||||
if (measuredWith < width) {
|
||||
text = textArray[j].substr(start, ++alreadyCount);
|
||||
} else {
|
||||
if (text.length <= 1) {
|
||||
// 如果只有一个字符时,直接跳出循环
|
||||
break;
|
||||
}
|
||||
text = textArray[j].substr(start, --alreadyCount);
|
||||
}
|
||||
measuredWith = this.ctx.measureText(text).width;
|
||||
}
|
||||
start += text.length
|
||||
|
||||
Loading…
Reference in New Issue
Block a user