From 50898934dca40d16c6336e0e6679ca92ac65f057 Mon Sep 17 00:00:00 2001 From: xiaoqidun Date: Wed, 28 Oct 2026 14:22:29 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E7=BC=96=E8=BE=91=E8=83=BD=E5=8A=9B):=20?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=B7=B7=E6=8E=92=E5=AD=97=E4=BD=93=E9=80=89?= =?UTF-8?q?=E6=8B=A9=E4=B8=8E=E7=BB=9F=E4=B8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/webui/ofdgo.js | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/assets/webui/ofdgo.js b/assets/webui/ofdgo.js index 6102e9a..fc731f0 100644 --- a/assets/webui/ofdgo.js +++ b/assets/webui/ofdgo.js @@ -4351,10 +4351,16 @@ async function beginCanvasText(index, box, surface, page) { function editorFonts(item) { const fonts = fontManager.editorFonts(); - if (item) { - fonts.unshift({ id: `embedded:${item.font}`, name: item.fontName || item.font, embedded: true, disabled: !canEditObject(item, "textContent") }); + const embedded = new Map(); + for (const member of item?.items || (item ? [item] : [])) { + for (const id of member.richText ? member.richText.runs.map(run => run.format.font) : [member.font]) { + if (!id || embedded.has(id)) continue; + const font = state.doc?.fonts?.find(font => font.id === id); + embedded.set(id, { id: `embedded:${id}`, name: font?.fontName || (id === member.font ? member.fontName : "") || id, + embedded: true, disabled: !canEditObject(member, "textContent") }); + } } - return fonts; + return [...embedded.values(), ...fonts]; } async function loadEditorFonts() { @@ -4426,12 +4432,12 @@ function updateTextFonts(item, refresh = false) { } return; } - if (item?.richText) item = { ...item, font: currentTextStyle().font }; - const id = item?.type === "TextObject" && !item.draft ? item.font : null; - const key = item?.items ? `selection:${item.items.map(member => member.id).join(",")}:${id || ""}` : id; + const id = item?.type === "TextObject" && !item.draft ? item.richText ? currentTextStyle().font : item.font : null; + const key = item?.items ? `selection:${item.items.map(member => member.id).join(",")}:${id || ""}` + : item?.richText ? `rich:${item.id}:${item.richText.runs.map(run => run.format.font).join(",")}` : id; if (refresh || state.textFontID !== key) { state.textFontID = key; - state.textFonts = editorFonts(id ? item : null); + state.textFonts = editorFonts(item?.type === "TextObject" && !item.draft ? item : null); const selected = canvasEditor.input?.fontChoice || (id ? state.textFonts[0] : state.textDefaults.fontChoice); if (selected && (canvasEditor.input || selected.embedded) && !state.textFonts.some(font => (font.id || font.postscriptName) === (selected.id || selected.postscriptName))) { @@ -4490,8 +4496,8 @@ async function changeTextFont() { setBusy(false, "", 0, "", tab); } } else if (item?.type === "TextObject") { - if (canEditObject(item, "replaceFont") && (!font.embedded || item.font !== font.id.slice(9))) { - const changed = await changeDocument("ofdgoStyleText", { ...item, id: (item.items || [item]).map(member => member.id) }, readTextFont(font, tab), 0, null); + if (canEditObject(item, "replaceFont") && (!font.embedded || currentTextStyle().font !== font.id.slice(9))) { + const changed = await changeDocument("ofdgoStyleText", { ...item, id: (item.items || [item]).map(member => member.id) }, () => readTextFont(font, tab), 0, null); if (isForegroundDocument(tab) && (changed || openSeq === state.openSeq)) updateTextFonts(canvasEditor.selected, true); } } else {