@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@omnimedia/omnitool",
3
- "version": "1.1.0-72",
3
+ "version": "1.1.0-74",
4
4
  "description": "open source video processing tools",
5
5
  "license": "MIT",
6
6
  "author": "Przemysław Gałęzki",
@@ -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]