Рефакторинг

This commit is contained in:
Book Pauk
2020-12-23 21:17:39 +07:00
parent 48612ee118
commit 17c14722fd
2 changed files with 115 additions and 79 deletions

View File

@@ -228,28 +228,31 @@ class TextPage extends Vue {
//parsed
if (this.parsed) {
this.parsed.p = this.p;
this.parsed.w = this.w;// px, ширина текста
this.parsed.font = this.font;
this.parsed.fontSize = this.fontSize;
this.parsed.wordWrap = this.wordWrap;
this.parsed.cutEmptyParagraphs = this.cutEmptyParagraphs;
this.parsed.addEmptyParagraphs = this.addEmptyParagraphs;
let t = wideLetter;
if (!this.drawHelper.measureText(t, {}))
throw new Error('Ошибка measureText');
while (this.drawHelper.measureText(t, {}) < this.w) t += wideLetter;
this.parsed.maxWordLength = t.length - 1;
this.parsed.measureText = this.drawHelper.measureText.bind(this.drawHelper);
this.parsed.lineHeight = this.lineHeight;
this.parsed.showImages = this.showImages;
this.parsed.showInlineImagesInCenter = this.showInlineImagesInCenter;
this.parsed.imageHeightLines = this.imageHeightLines;
this.parsed.imageFitWidth = this.imageFitWidth;
this.parsed.compactTextPerc = this.compactTextPerc;
this.testText = 'Это тестовый текст. Его ширина выдается системой неправильно некоторое время.';
this.parsed.testText = 'Это тестовый текст. Его ширина выдается системой неверно некоторое время.';
this.parsed.testWidth = this.drawHelper.measureText(this.parsed.testText, {});
let wideLine = wideLetter;
if (!this.drawHelper.measureText(wideLine, {}))
throw new Error('Ошибка measureText');
while (this.drawHelper.measureText(wideLine, {}) < this.w) wideLine += wideLetter;
this.parsed.setSettings({
p: this.p,
w: this.w,
font: this.font,
fontSize: this.fontSize,
wordWrap: this.wordWrap,
cutEmptyParagraphs: this.cutEmptyParagraphs,
addEmptyParagraphs: this.addEmptyParagraphs,
maxWordLength: wideLine.length - 1,
lineHeight: this.lineHeight,
showImages: this.showImages,
showInlineImagesInCenter: this.showInlineImagesInCenter,
imageHeightLines: this.imageHeightLines,
imageFitWidth: this.imageFitWidth,
compactTextPerc: this.compactTextPerc,
testWidth: this.drawHelper.measureText(this.testText, {}),
measureText: this.drawHelper.measureText.bind(this.drawHelper),
});
}
//scrolling page
@@ -333,19 +336,25 @@ class TextPage extends Vue {
if (!omitLoadFonts)
await this.loadFonts();
this.draw();
// ширина шрифта некоторое время выдается неверно, поэтому
if (!omitLoadFonts) {
if (omitLoadFonts) {
this.draw();
} else {
// ширина шрифта некоторое время выдается неверно,
// не получилось событийно отловить этот момент, поэтому костыль
const parsed = this.parsed;
let i = 0;
const t = this.parsed.testText;
while (i++ < 50 && this.parsed === parsed && this.drawHelper.measureText(t, {}) === this.parsed.testWidth)
const t = this.testText;
const tw = this.drawHelper.measureText(t, {});
//5 секунд проверяем изменения шрифта
while (i++ < 50 && this.parsed === parsed && this.drawHelper.measureText(t, {}) === tw) {
if (i == 10) //через 1 сек
this.draw();
await utils.sleep(100);
}
if (this.parsed === parsed) {
this.parsed.testWidth = this.drawHelper.measureText(t, {});
this.parsed.setSettings({testWidth: this.drawHelper.measureText(t, {})});
this.draw();
}
}