fix: copy highlight element #193
This commit is contained in:
@@ -1178,6 +1178,17 @@ export class Draw {
|
|||||||
leftTop: [x, y]
|
leftTop: [x, y]
|
||||||
}
|
}
|
||||||
} = positionList[curRow.startIndex + j]
|
} = positionList[curRow.startIndex + j]
|
||||||
|
const preElement = curRow.elementList[j - 1]
|
||||||
|
// 元素高亮记录
|
||||||
|
if (element.highlight) {
|
||||||
|
// 高亮元素相连需立即绘制,并记录下一元素坐标
|
||||||
|
if (preElement && preElement.highlight && preElement.highlight !== element.highlight) {
|
||||||
|
this.highlight.render(ctx)
|
||||||
|
}
|
||||||
|
this.highlight.recordFillInfo(ctx, x, y, metrics.width, curRow.height, element.highlight)
|
||||||
|
} else if (preElement?.highlight) {
|
||||||
|
this.highlight.render(ctx)
|
||||||
|
}
|
||||||
// 元素绘制
|
// 元素绘制
|
||||||
if (element.type === ElementType.IMAGE) {
|
if (element.type === ElementType.IMAGE) {
|
||||||
this._drawRichText(ctx)
|
this._drawRichText(ctx)
|
||||||
@@ -1228,7 +1239,6 @@ export class Draw {
|
|||||||
} else {
|
} else {
|
||||||
this.textParticle.record(ctx, element, x, y + offsetY)
|
this.textParticle.record(ctx, element, x, y + offsetY)
|
||||||
}
|
}
|
||||||
const preElement = curRow.elementList[j - 1]
|
|
||||||
// 下划线记录
|
// 下划线记录
|
||||||
if (element.underline) {
|
if (element.underline) {
|
||||||
this.underline.recordFillInfo(ctx, x, y + curRow.height, metrics.width, 0, element.color)
|
this.underline.recordFillInfo(ctx, x, y + curRow.height, metrics.width, 0, element.color)
|
||||||
@@ -1241,16 +1251,6 @@ export class Draw {
|
|||||||
} else if (preElement?.strikeout) {
|
} else if (preElement?.strikeout) {
|
||||||
this.strikeout.render(ctx)
|
this.strikeout.render(ctx)
|
||||||
}
|
}
|
||||||
// 元素高亮记录
|
|
||||||
if (element.highlight) {
|
|
||||||
// 高亮元素相连需立即绘制,并记录下一元素坐标
|
|
||||||
if (preElement && preElement.highlight && preElement.highlight !== element.highlight) {
|
|
||||||
this.highlight.render(ctx)
|
|
||||||
}
|
|
||||||
this.highlight.recordFillInfo(ctx, x, y, metrics.width, curRow.height, element.highlight)
|
|
||||||
} else if (preElement?.highlight) {
|
|
||||||
this.highlight.render(ctx)
|
|
||||||
}
|
|
||||||
// 选区记录
|
// 选区记录
|
||||||
const { zone: currentZone, startIndex, endIndex } = this.range.getRange()
|
const { zone: currentZone, startIndex, endIndex } = this.range.getRange()
|
||||||
if (currentZone === zone && startIndex !== endIndex && startIndex <= index && index <= endIndex) {
|
if (currentZone === zone && startIndex !== endIndex && startIndex <= index && index <= endIndex) {
|
||||||
|
|||||||
@@ -204,10 +204,13 @@ export function writeElementList(elementList: IElement[], options: DeepRequired<
|
|||||||
export function convertTextNodeToElement(textNode: Element | Node): IElement | null {
|
export function convertTextNodeToElement(textNode: Element | Node): IElement | null {
|
||||||
if (!textNode || textNode.nodeType !== 3) return null
|
if (!textNode || textNode.nodeType !== 3) return null
|
||||||
const parentNode = <HTMLElement>textNode.parentNode
|
const parentNode = <HTMLElement>textNode.parentNode
|
||||||
const rowFlex = getElementRowFlex(parentNode)
|
const anchorNode = parentNode.nodeName === 'FONT'
|
||||||
|
? <HTMLElement>parentNode.parentNode
|
||||||
|
: parentNode
|
||||||
|
const rowFlex = getElementRowFlex(anchorNode)
|
||||||
const value = textNode.textContent
|
const value = textNode.textContent
|
||||||
const style = window.getComputedStyle(parentNode)
|
const style = window.getComputedStyle(anchorNode)
|
||||||
if (!value || parentNode.nodeName === 'STYLE') return null
|
if (!value || anchorNode.nodeName === 'STYLE') return null
|
||||||
const element: IElement = {
|
const element: IElement = {
|
||||||
value,
|
value,
|
||||||
color: style.color,
|
color: style.color,
|
||||||
@@ -216,9 +219,9 @@ export function convertTextNodeToElement(textNode: Element | Node): IElement | n
|
|||||||
size: Math.floor(parseFloat(style.fontSize))
|
size: Math.floor(parseFloat(style.fontSize))
|
||||||
}
|
}
|
||||||
// 元素类型-默认文本
|
// 元素类型-默认文本
|
||||||
if (parentNode.nodeName === 'SUB') {
|
if (anchorNode.nodeName === 'SUB' || style.verticalAlign === 'sub') {
|
||||||
element.type = ElementType.SUBSCRIPT
|
element.type = ElementType.SUBSCRIPT
|
||||||
} else if (parentNode.nodeName === 'SUP') {
|
} else if (anchorNode.nodeName === 'SUP' || style.verticalAlign === 'super') {
|
||||||
element.type = ElementType.SUPERSCRIPT
|
element.type = ElementType.SUPERSCRIPT
|
||||||
}
|
}
|
||||||
// 行对齐
|
// 行对齐
|
||||||
|
|||||||
Reference in New Issue
Block a user