@omnimedia/omnitool 1.1.0-72 → 1.1.0-74
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.
- package/package.json +1 -1
- package/s/driver/parts/compositor.ts +20 -12
- package/s/timeline/utils/matrix.ts +21 -0
- package/x/demo/demo.bundle.min.js +5 -5
- package/x/demo/demo.bundle.min.js.map +3 -3
- package/x/driver/parts/compositor.d.ts +7 -1
- package/x/driver/parts/compositor.js +14 -9
- package/x/driver/parts/compositor.js.map +1 -1
- package/x/index.html +2 -2
- package/x/tests.bundle.min.js +10 -10
- package/x/tests.bundle.min.js.map +3 -3
- package/x/tests.html +1 -1
- package/x/timeline/utils/matrix.d.ts +9 -0
- package/x/timeline/utils/matrix.js +10 -0
- package/x/timeline/utils/matrix.js.map +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
|
|
2
2
|
import {pub} from "@e280/stz"
|
|
3
|
-
import {autoDetectRenderer, Container, Renderer, Sprite, Text, Texture} from "pixi.js"
|
|
3
|
+
import {autoDetectRenderer, Container, FederatedPointerEvent, Renderer, Sprite, Text, Texture} from "pixi.js"
|
|
4
4
|
|
|
5
5
|
import {Id} from "../../timeline/index.js"
|
|
6
6
|
import {Composition, Layer} from "../fns/schematic.js"
|
|
@@ -8,8 +8,9 @@ import {Mat6, mat6ToMatrix} from "../../timeline/utils/matrix.js"
|
|
|
8
8
|
import {makeTransition} from "../../features/transition/transition.js"
|
|
9
9
|
|
|
10
10
|
export class Compositor {
|
|
11
|
-
onPointerDown = pub<[{id: Id, object: Container}]>()
|
|
12
|
-
onPointerUp = pub<[{id: Id, object: Container}]>()
|
|
11
|
+
onPointerDown = pub<[{event: FederatedPointerEvent, id: Id, object: Container}]>()
|
|
12
|
+
onPointerUp = pub<[{event: FederatedPointerEvent, id: Id, object: Container}]>()
|
|
13
|
+
onDispose = pub<[{id: Id, object: Container}]>()
|
|
13
14
|
|
|
14
15
|
static async setup() {
|
|
15
16
|
const renderer = await autoDetectRenderer({
|
|
@@ -105,14 +106,19 @@ export class Compositor {
|
|
|
105
106
|
layer: Extract<Layer, {kind: 'image'}>,
|
|
106
107
|
parent: Container,
|
|
107
108
|
) {
|
|
108
|
-
const texture = Texture.from(layer.frame)
|
|
109
109
|
const sprite = this.#findOrCreate<Sprite>(layer)!
|
|
110
|
+
|
|
111
|
+
if (sprite.texture && sprite.texture !== Texture.EMPTY) {
|
|
112
|
+
sprite.texture.destroy(true)
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
const texture = Texture.from(layer.frame)
|
|
110
116
|
sprite.texture = texture
|
|
111
117
|
this.#applyTransform(sprite, layer.matrix)
|
|
112
118
|
parent.addChild(sprite)
|
|
119
|
+
|
|
113
120
|
return {
|
|
114
121
|
dispose: () => {
|
|
115
|
-
texture.destroy(true)
|
|
116
122
|
layer.frame.close()
|
|
117
123
|
}
|
|
118
124
|
}
|
|
@@ -151,8 +157,8 @@ export class Compositor {
|
|
|
151
157
|
style: layer.style
|
|
152
158
|
})
|
|
153
159
|
text.eventMode = "static"
|
|
154
|
-
const down = () => this.onPointerDown.publish({id: layer.id, object: text})
|
|
155
|
-
const up = () => this.onPointerUp.publish({id: layer.id, object: text})
|
|
160
|
+
const down = (event: FederatedPointerEvent) => this.onPointerDown.publish({event, id: layer.id, object: text})
|
|
161
|
+
const up = (event: FederatedPointerEvent) => this.onPointerUp.publish({event, id: layer.id, object: text})
|
|
156
162
|
|
|
157
163
|
text.on("pointerdown", down)
|
|
158
164
|
text.on("pointerup", up)
|
|
@@ -160,7 +166,8 @@ export class Compositor {
|
|
|
160
166
|
return this.#activeObjects
|
|
161
167
|
.set(layer.id, {
|
|
162
168
|
sprite: text,
|
|
163
|
-
dispose() {
|
|
169
|
+
dispose: () => {
|
|
170
|
+
this.onDispose.publish({id: layer.id, object: text})
|
|
164
171
|
text.off("pointerdown", down)
|
|
165
172
|
text.off("pointerup", up)
|
|
166
173
|
}
|
|
@@ -170,8 +177,8 @@ export class Compositor {
|
|
|
170
177
|
case 'image': {
|
|
171
178
|
const sprite = new Sprite()
|
|
172
179
|
sprite.eventMode = "static"
|
|
173
|
-
const down = () => this.onPointerDown.publish({id: layer.id, object: sprite})
|
|
174
|
-
const up = () => this.onPointerUp.publish({id: layer.id, object: sprite})
|
|
180
|
+
const down = (event: FederatedPointerEvent) => this.onPointerDown.publish({event, id: layer.id, object: sprite})
|
|
181
|
+
const up = (event: FederatedPointerEvent) => this.onPointerUp.publish({event, id: layer.id, object: sprite})
|
|
175
182
|
|
|
176
183
|
sprite.on("pointerdown", down)
|
|
177
184
|
sprite.on("pointerup", up)
|
|
@@ -179,7 +186,8 @@ export class Compositor {
|
|
|
179
186
|
return this.#activeObjects
|
|
180
187
|
.set(layer.id, {
|
|
181
188
|
sprite,
|
|
182
|
-
dispose() {
|
|
189
|
+
dispose: () => {
|
|
190
|
+
this.onDispose.publish({id: layer.id, object: sprite})
|
|
183
191
|
sprite.off("pointerdown", down)
|
|
184
192
|
sprite.off("pointerup", up)
|
|
185
193
|
}
|
|
@@ -207,8 +215,8 @@ export class Compositor {
|
|
|
207
215
|
for (const id of this.#activeObjects.keys()) {
|
|
208
216
|
if (!activeIds.has(id)) {
|
|
209
217
|
const {sprite, dispose} = this.#activeObjects.get(id)!
|
|
210
|
-
sprite.destroy(true)
|
|
211
218
|
dispose()
|
|
219
|
+
sprite.destroy(true)
|
|
212
220
|
this.#activeObjects.delete(id)
|
|
213
221
|
}
|
|
214
222
|
}
|
|
@@ -29,5 +29,26 @@ export const mul6 = (local: Mat6, parent: Mat6): Mat6 => {
|
|
|
29
29
|
]
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
+
export const mat6ToTransform = (mat: Mat6Obj): Transform => {
|
|
33
|
+
const scaleX = Math.hypot(mat.a, mat.b)
|
|
34
|
+
const scaleY = Math.hypot(mat.c, mat.d)
|
|
35
|
+
const rotation = Math.atan2(mat.b, mat.a) * (180 / Math.PI)
|
|
36
|
+
|
|
37
|
+
return [
|
|
38
|
+
[mat.tx, mat.ty],
|
|
39
|
+
[scaleX, scaleY],
|
|
40
|
+
rotation,
|
|
41
|
+
]
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export interface Mat6Obj {
|
|
45
|
+
a: number
|
|
46
|
+
b: number
|
|
47
|
+
c: number
|
|
48
|
+
d: number
|
|
49
|
+
tx: number
|
|
50
|
+
ty: number
|
|
51
|
+
}
|
|
52
|
+
|
|
32
53
|
export const I6: Mat6 = [1, 0, 0, 1, 0, 0]
|
|
33
54
|
export type Mat6 = [a: number, b: number, c: number, d: number, tx: number, ty: number]
|