Skip to content

feat: WindowFrame 异形窗口(shape clip-path + snap 开关) - #3

Merged
ShiningRay merged 1 commit into
mainfrom
feat/shaped-windows
Sep 15, 2026
Merged

ShiningRay merged 1 commit into
mainfrom
feat/shaped-windows

Conversation

@ShiningRay

Copy link
Copy Markdown
Owner

栈叠在 #2(feat/drag-scale)之上——emit_panel 携 drag_scale 透传,合入顺序请先 #2 后本 PR(或 #2 合并后 retarget main)。

内容

  • WindowFrame#shape prop:任意 clip-path 值。设置后结构变为 .panel-wrap(定位/z 序/drop-shadow 滤镜阴影)包 .panel(clip-path 裁剪)
    • box-shadow 会被 clip-path 裁掉,阴影必须由包裹层 filter 承担(跟随裁剪轮廓)
    • 拖拽/缩放手柄经 drag_pane 改投包裹层
    • 几何保持矩形包围盒:z 序 / clamp / 任务栏 / 吸附判定零改动
  • WindowManager#frame(snap: false):按窗关闭边缘吸附(吸附是矩形假设,异形窗口不适用)
  • 结构修复:panel 抽取为 emit_panel 在包裹层 block 内部 emit——先建节点再塞 block 会二次 emit、以 to_s 文本泄漏(块返回值坑同款),测试锁定回归

测试

  • 新增 3 项:shape 包裹层结构/裁剪/阴影 + 层级顺序断言、无 shape 无包裹层、snap 开关行为
  • bundle exec rake:97 项全绿 + Opal 编译验收通过
  • 消费者验证:emerald 便利贴示例包(折角 + 胶带标题栏 + 微倾斜),浏览器实测通过

@ShiningRay
ShiningRay added this pull request to stack #6 September 15, 2026 23:11
Base automatically changed from feat/drag-scale to main September 15, 2026 23:12
…p 开关

- shape 设置后结构变为 .panel-wrap(定位/z 序/滤镜阴影)包 .panel(clip-path 裁剪):
  box-shadow 会被 clip-path 裁掉,阴影必须由包裹层 filter 承担;拖拽/缩放手柄
  经 drag_pane 改投包裹层;几何保持矩形包围盒,z 序/clamp/任务栏零改动
- panel 在包裹层 block 内部 emit(emit_panel 抽取)——先建节点再塞 block 会
  二次 emit 并以 to_s 文本泄漏(块返回值坑同款),测试加文本泄漏回归锁定
- WindowManager#frame(snap: false):按窗关闭边缘吸附(吸附是矩形假设)
- 首个消费者:emerald 便利贴示例包
@ShiningRay
ShiningRay merged commit b19e826 into main Sep 15, 2026
5 checks passed
@ShiningRay
ShiningRay deleted the feat/shaped-windows branch September 16, 2026 16:35
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.

1 participant