修复whiteboard新建元素时双击无法正常显示光标的问题
This commit is contained in:
parent
788edf4cba
commit
bded968efe
@ -869,7 +869,8 @@ function startTextEdit(elementId: string): void {
|
||||
}
|
||||
|
||||
// 用渲染器 API 获取文字参数(与 canvas 渲染逻辑完全一致)
|
||||
// canvas padding=8px 对应 textarea 的水平 padding;垂直位置用 transform 精确控制
|
||||
// wrapper 有 padding-top:8px 使 textarea 内容区顶边与 canvas 文字区域顶部(padding 位置)对齐
|
||||
// transformY 补偿 transform-origin:top 到 textarea 内容区顶边的偏移
|
||||
if (renderer.value) {
|
||||
const zoom = renderer.value.getViewport().zoom
|
||||
const panX = renderer.value.getViewport().panX
|
||||
@ -878,15 +879,12 @@ function startTextEdit(elementId: string): void {
|
||||
const fontSize = s.fontSize ?? (isTextType ? 20 : 14)
|
||||
const align = s.textAlign ?? (isTextType ? 'left' : 'center')
|
||||
|
||||
// textBounds.startY 是 canvas 上第一行文字 baseline 的世界 Y(相对于元素 top)
|
||||
// textarea transform:translateY 使其内容区顶边对准 canvas 文字基线位置
|
||||
// textarea 自身 top=0,内容区顶边在 top+padding 处,alphabetic baseline = top+padding+fontSize
|
||||
// 对齐条件:textarea 内容区顶边 = canvas startY
|
||||
// → textarea top + padding = canvas startY - fontSize
|
||||
// textarea 用 transform 偏移:transformY = canvas startY - fontSize
|
||||
// 转换为屏幕坐标:transformY_screen = (canvas_startY - fontSize) * zoom
|
||||
const canvasStartY = textBounds ? textBounds.startY - el.y : 0
|
||||
const transformY = (canvasStartY - fontSize) * zoom
|
||||
// wrapper 有 padding-top:8px,textarea 顶部内容区与 canvas 文字区域顶部对齐
|
||||
// textarea 内第一行 alphabetic baseline 在内容区顶边 + fontSize 处
|
||||
// 这正好对应 canvas 上 padding 位置的 baseline,无需额外 transform
|
||||
// 但 canvas 上 startY = el.y + padding - fontSize/2,所以 transformY = padding * zoom
|
||||
const padding = 8
|
||||
const transformY = padding * zoom
|
||||
|
||||
editTextPosition.value = {
|
||||
x: el.x * zoom + panX,
|
||||
@ -2150,12 +2148,14 @@ function handleResize(): void {
|
||||
z-index: 20;
|
||||
box-sizing: border-box;
|
||||
overflow: hidden;
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
padding-top: 8px;
|
||||
}
|
||||
/* textarea:绝对定位填满 wrapper 内容区(无 padding,transform 精确控制文字垂直位置)
|
||||
样式由 inline :style 同步 BoardRenderer */
|
||||
.text-edit-overlay {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
position: relative;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user