@galacean/effects-core 2.10.0-alpha.2 → 2.10.0-alpha.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,145 +0,0 @@
1
- import { Vector2 } from '@galacean/effects-math/es/core/vector2';
2
- import type * as spec from '@galacean/effects-specification';
3
- import { Transform } from './transform';
4
- /**
5
- * 2D 矩形,`position` 为左下角(Y 向上),`size` 为宽高
6
- */
7
- export type Rect = {
8
- position: Vector2;
9
- size: Vector2;
10
- };
11
- /**
12
- * 16 个内建锚点预设,字面意义对应屏幕视觉位置(Y 向上)
13
- */
14
- export type LayoutPreset = 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight' | 'centerLeft' | 'centerTop' | 'centerRight' | 'centerBottom' | 'center' | 'leftWide' | 'topWide' | 'rightWide' | 'bottomWide' | 'vcenterWide' | 'hcenterWide' | 'fullRect';
15
- /**
16
- * 锚点布局变换。`RectTransform extends Transform`,在 Transform 的 position/rotation/scale/size/anchor(=pivot 偏移)
17
- * 之上额外维护 4 边锚点 + 4 边像素偏移,提供 rect 解算与编辑 API。
18
- *
19
- * 解算公式(Y 向上,父 vertex 坐标原点 = 父 rect 左下角):
20
- * ```
21
- * left = offsetMin.x + anchorMin.x * parentSize.x
22
- * bottom = offsetMin.y + anchorMin.y * parentSize.y
23
- * right = offsetMax.x + anchorMax.x * parentSize.x
24
- * top = offsetMax.y + anchorMax.y * parentSize.y
25
- * ```
26
- *
27
- * 写回 Transform:
28
- * - `position` ← `(left, bottom)`(rect 左下角,父 vertex 坐标)
29
- * - `size` ← rect 尺寸
30
- * - `anchor`(Vector3 像素 pivot 偏移)由用户独立设置,仅作旋转/缩放中心
31
- *
32
- * **解算入口** 是 `sizeChanged()` 方法:
33
- * - 父是 RectTransform → 用 `parent.size` 作 parentSize 解算自身,写回 `position` / `size`
34
- * - 否则(顶层 / 没父):自身 size 视为权威值(由外部 — 通常是 CanvasLayer — 直接写),不再自解算
35
- * - 末尾遍历 `children` 中的 RectTransform,直接调它们的 `sizeChanged()`,链式向下传播
36
- *
37
- * **重写 `setPosition` / `setSize`** 让其语义变为"用户输入 rect 位置 / 尺寸":
38
- * - 顶层(无 RectTransform 父):直接写 `super.setPosition / super.setSize`,然后 `sizeChanged` 传播给子节点
39
- * - 否则:反推 offset 维持当前 anchor,然后 `sizeChanged` 重算并向下传
40
- */
41
- export declare class RectTransform extends Transform {
42
- /**
43
- * 父 rect 上的归一化最小角 `(anchorLeft, anchorBottom)`
44
- */
45
- readonly anchorMin: Vector2;
46
- /**
47
- * 父 rect 上的归一化最大角 `(anchorRight, anchorTop)`
48
- */
49
- readonly anchorMax: Vector2;
50
- /**
51
- * rect 左/下边相对 anchorMin 锚点的像素偏移 `(offsetLeft, offsetBottom)`
52
- */
53
- readonly offsetMin: Vector2;
54
- /**
55
- * rect 右/上边相对 anchorMax 锚点的像素偏移 `(offsetRight, offsetTop)`
56
- */
57
- readonly offsetMax: Vector2;
58
- /**
59
- * 自身 rect 上的归一化轴心 `(0..1)`,默认 `(0.5, 0.5)`(中心)。两层效果:
60
- * 1. **Layout**:`setSize` 时 rect 围绕此点对称缩放(pivot=(0.5, 0.5) → 居中扩展;pivot=(0, 0) → 从左下扩展;pivot=(1, 1) → 向左下缩)
61
- * 2. **矩阵**:`pivot` 自动同步到 `transform.anchor = pivot * size`(像素值,矩阵旋转/缩放中心),
62
- * 所以旋转/缩放也围绕同一点。`setPivot` 和每次 `sizeChanged`(size 重算后)都会刷新 `transform.anchor`
63
- */
64
- readonly pivot: Vector2;
65
- /**
66
- * 用既有 Transform 的状态创建 RectTransform。
67
- * 用于 Control / CanvasLayer 接管 VFXItem 时,把 VFXItem 自带的 Transform 升级为 RectTransform 而不丢失 position/rotation/scale 等已设置好的状态。
68
- */
69
- static fromTransform(t: Transform): RectTransform;
70
- /**
71
- * 反序列化:在 `Transform.fromData` 基础上还原 RectTransform 特有的 `pivot` /
72
- * `anchorMin` / `anchorMax` / `offsetMin` / `offsetMax`。
73
- *
74
- * 顺序:
75
- * 1. `super.fromData` 还原 `position` / `rotation` / `scale` / `size` / `anchor`
76
- * 2. 若数据有 size,从 `anchor / size` 反推 `pivot`,保持 `anchor = pivot * size` 一致
77
- * 3. 应用 `anchorMin/Max` / `offsetMin/Max`,每个 setter 末尾会触发 `sizeChanged`
78
- * 重新解算 rect 与同步 `transform.anchor`
79
- */
80
- fromData(data: spec.TransformData): void;
81
- setAnchorMin(x: number, y: number): void;
82
- setAnchorMax(x: number, y: number): void;
83
- setOffsetMin(x: number, y: number): void;
84
- setOffsetMax(x: number, y: number): void;
85
- /**
86
- * 设置 rect 内的归一化轴心 `(0..1)`,同时把 `transform.anchor`(矩阵旋转/缩放中心)同步到 `pivot * size`。
87
- * 不重算 rect(pivot 只决定 setSize 行为,不直接影响当前 rect 位置 / 尺寸)
88
- */
89
- setPivot(x: number, y: number): void;
90
- /**
91
- * 重写父类 `setPosition`:
92
- * - 顶层(无 RectTransform 父):直接 `super.setPosition` 写位置,触发 `sizeChanged` 传播
93
- * - 非顶层:语义为"设置 rect 左下角到 (x, y)",反推 offset 维持当前 anchor,然后 `sizeChanged` 重算
94
- *
95
- * @param keepOffsets - 默认 false。true 时反推 anchor 而非 offset(rect 在屏幕上不动,但 anchor 比例改变)
96
- */
97
- setPosition(x: number, y: number, z: number, keepOffsets?: boolean): void;
98
- /**
99
- * 重写父类 `setSize`:
100
- * - 顶层:直接 `super.setSize`,触发 `sizeChanged` 传播
101
- * - 非顶层:反推 offset 维持当前 anchor,然后 `sizeChanged` 重算
102
- */
103
- setSize(x: number, y: number): void;
104
- /**
105
- * 当前自身 rect(在父 vertex 坐标下,Y 向上)。`sizeChanged` 之后才有意义
106
- */
107
- getRect(): Rect;
108
- private onCanvasResize;
109
- /**
110
- * 解算入口:
111
- *
112
- * 1. 父是 RectTransform → 从 `parent.size` 求自身 rect,通过 `super.setPosition / super.setSize` 写回
113
- * (避免触发本类 setPosition / setSize 重写)
114
- * 2. 顶层(无 RectTransform 父):自身 size 视为权威值(由 CanvasLayer 等外部直接写),不自解算
115
- * 3. 遍历 `children` 中所有 RectTransform 子节点,直接调它们的 `sizeChanged()` 链式传播
116
- */
117
- sizeChanged(): void;
118
- /**
119
- * 给定目标 rect 反推 offsetMin/Max,保持当前 anchor 不变
120
- */
121
- private computeOffsets;
122
- /**
123
- * 给定目标 rect 反推 anchorMin/Max,保持当前 offset 不变。父 size 为 0 的方向不修改
124
- */
125
- private computeAnchors;
126
- /**
127
- * 把 anchorMin/Max 设为内建预设。
128
- * @param keepOffsets - 默认 true:offset 不动,rect 实际位置会跳到新 anchor 计算的位置(要求保留视觉位置请用 setAnchorsAndOffsetsPreset)
129
- */
130
- setAnchorsPreset(preset: LayoutPreset, keepOffsets?: boolean): void;
131
- /**
132
- * 把 offsetMin/Max 设为预设值,使 rect 在父 rect 内落在视觉上对应的位置(留 margin 像素边距)。
133
- * 当 anchor 已经按相同 preset 设定时,等价于“贴边放置带 margin 的 rect”。
134
- * 使用当前 size 作为 rect 尺寸。
135
- */
136
- setOffsetsPreset(preset: LayoutPreset, margin?: number): void;
137
- /**
138
- * 同时设置 anchor 和 offset,达到“按 preset 摆放并贴边带 margin”的效果。
139
- *
140
- * 注意第一步用 `keepOffsets=false`(反推 offset 维持 rect 视觉位置),不能用默认 `true`:
141
- * 后者会让 rect 的 size 在中间步先跳到错值(因为 anchor 改了 offset 没改),
142
- * 第二步 `setOffsetsPreset` 又用这个错 size 算 offset,最终 rect size 不对
143
- */
144
- setAnchorsAndOffsetsPreset(preset: LayoutPreset, margin?: number): void;
145
- }