Skip to content

Conversation

@AXeonV
Copy link
Contributor

@AXeonV AXeonV commented Jan 30, 2026

[201_70] 修复图片缩放的撤销问题

如何测试

  1. 新建文档,插入一张图片
  2. 鼠标拖动图片的8个调整手柄(四个角和四条边)进行缩放
  3. 释放左键后,按住 Ctrl+Z 撤销,应该只需要一次就能完全恢复到原始尺寸
  4. 连续进行多次独立的拖拽缩放操作(独立指每次拖拽操作之间左键没有释放),每次撤销应该对应一次独立的拖拽操作

2026/1/30

What

在图片鼠标拖拽缩放功能中添加编辑会话标记,将整个拖拽过程作为一个事务处理,避免撤销时逐帧回退

Why

原实现中,鼠标拖拽缩放图片时,每帧修改都会调用 tree-set! 触发独立的撤销记录,导致用户需要按多次 Ctrl+Z 才能完全撤销一次拖拽操作

这不符合用户直觉,每次拖拽应该对应一次撤销操作,与表格格线拖动等操作保持一致

How

  1. format-geometry-edit.scm 中添加 image-resize-mark 全局变量(编辑会话标记)
  2. 在鼠标开始拖拽时(start-drag-left)调用 (mark-new) 创建标记并 (mark-start) 开始编辑会话
  3. 在鼠标结束拖拽时(end-drag-left)调用 (mark-end) 结束编辑会话,将整个拖拽过程合并为一个撤销记录

Copilot AI review requested due to automatic review settings January 30, 2026 12:26
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

该 PR 通过在图片拖拽缩放过程中引入“编辑会话标记”,将一次完整拖拽合并为单条撤销记录,从而修复图片缩放需要多次 Ctrl+Z 才能完全撤销的问题。

Changes:

  • 新增图片缩放拖拽的 undo 会话标记:开始拖拽时 mark-start,结束拖拽时 mark-end,避免逐帧产生撤销记录
  • 完善拖拽状态重置逻辑:在重置时对未结束的 mark 执行 mark-cancel
  • 新增开发说明文档与手工测试步骤

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.

File Description
devel/201_70.md 增加问题背景、方案与手工测试步骤说明
TeXmacs/progs/generic/format-geometry-edit.scm 为图片拖拽缩放增加 mark 会话,将一次拖拽合并为一次撤销

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

1. 新建文档,插入一张图片
2. 鼠标拖动图片的8个调整手柄(四个角和四条边)进行缩放
3. 释放左键后,按住 `Ctrl+Z` 撤销,应该只需要一次就能完全恢复到原始尺寸
4. 连续进行多次独立的拖拽缩放操作(独立指每次拖拽操作之间左键没有释放),每次撤销应该对应一次独立的拖拽操作
Copy link

Copilot AI Jan 30, 2026

Choose a reason for hiding this comment

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

测试步骤 4 的括号说明有语义错误:“独立的拖拽操作”一般指每次拖拽之间左键已经释放;当前写成“左键没有释放”会让测试步骤相互矛盾。建议改为“独立指每次拖拽操作之间左键已释放/每次拖拽都先松开左键再开始下一次”。

Suggested change
4. 连续进行多次独立的拖拽缩放操作(独立指每次拖拽操作之间左键没有释放),每次撤销应该对应一次独立的拖拽操作
4. 连续进行多次独立的拖拽缩放操作(“独立”指每次拖拽操作结束后先松开左键,再开始下一次拖拽),每次撤销应该对应一次独立的拖拽操作

Copilot uses AI. Check for mistakes.
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