变换 Builder
变换 Builder 用来给控件设置声明式 Transform2D。它影响控件自身及其子控件的绘制和命中测试,但不改变 Taffy 布局计算出来的位置和尺寸。
基本写法
导入 TransformBuilder 后,所有实现了 View 的控件都可以调用 .transform(...)。
当前签名是:
TransformProp 支持两种写法:
动态变换
闭包版本会随依赖更新重新计算变换。
rotate_at_degrees(degrees, cx, cy) 和 scale_at(sx, sy, cx, cy) 可以表达类似 transform-origin 的效果。Flor 当前没有单独的 .origin(...) builder。
Transform2D 常用构造
链式组合使用 then_* 方法:
组合顺序是先应用当前矩阵,再应用新的矩阵。也就是说,上面的例子会先平移,再旋转,最后缩放。
不是 CSS transform 字符串
.transform(...) 接收的是 Transform2D,不是字符串。当前没有这些 builder 方法:
对应写法应改成:
机制说明
.transform(...) 会创建一个响应式 updater。初始化时会立刻计算一次 Transform2D,并调用当前控件的 ViewId::set_transform(transform);之后闭包依赖的 signal 更新时,会再次写入新的变换并请求重绘。
运行时变换存放在 VIEW_STORAGE.transform。布局刷新阶段会计算累积变换,绘制阶段会 push_transform,命中测试会用逆矩阵把窗口坐标转换回控件局部坐标。
如果矩阵不可逆,例如缩放到 0.0,命中测试无法把窗口坐标转换回局部坐标,这个控件分支会被跳过。动画里不要把可交互控件缩放到不可逆矩阵。

