Skip to content

[1287] 采用 QML 重新实现渐变选择器弹窗并恢复实时预览功能 - #4529

Merged
da-liii merged 7 commits into
mainfrom
da/1287/jianbian
Sep 9, 2026
Merged

da-liii merged 7 commits into
mainfrom
da/1287/jianbian

Conversation

@da-liii

@da-liii da-liii commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

任务简述

对应任务文档 devel/1287.md,解决 issue #4325 及渐变选择器缺失实时预览功能的问题。

1. 采用 QML 重新实现渐变选择器(GradientSelector)

  • 前端:src/Plugins/Qt/qml/GradientSelector.qml,采用 DialogShell + EnumCombo + DialogButtons 现代圆角无边框模态弹窗;
  • 支持常用渐变底图选择、自定义渐变文件浏览(QFileDialog)、宽高比例调节、前景色与背景色设置(支持点击「选色」呼出原生 QML ColorPicker 对话框);
  • 右侧大区域实时预览:按色彩映射公式 pixel = fg + gray * (bg - fg) 即时重绘 QImage 生成 base64 PNG data URL,并在 QML 中丝滑无延迟渲染。

2. 彻底根除 issue #4325 的 Use-After-Free 崩溃根因

  • 在 src/Plugins/MuPDF/mupdf_picture.cpp:462 的 mupdf_load_pixmap 中,效果构建时未对 dest 局部对象的 tpix 增加引用计数(缺少 fz_keep_pixmap(ctx, tpix)),导致 dest 析构后该指针变成悬垂野指针,并在后续被二次释放和渲染解引用;
  • 补全 fz_keep_pixmap(ctx, tpix) 后彻底根除崩溃隐患。

3. 测试与验证

  • 单元测试:tests/Plugins/Qt/gradient_selector_bridge_test.cpp(5/5 全部通过);
  • 端到端 UI 自动化测试:1287.py(TeXmacs/tests/python/1287.py)全流程测试通过,包含自动进入文档、打开菜单弹出 QML 选择器、校验实时预览、确认应用渐变至文档背景且进程健康无崩溃。

@PinkMagicFly PinkMagicFly left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@da-liii
da-liii merged commit b37ad9f into main Sep 9, 2026
6 checks passed
@da-liii
da-liii deleted the da/1287/jianbian branch September 9, 2026 06:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants