@omnimedia/omnitool 1.1.0-70 → 1.1.0-71

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-70",
3
+ "version": "1.1.0-71",
4
4
  "description": "open source video processing tools",
5
5
  "license": "MIT",
6
6
  "author": "Przemysław Gałęzki",
@@ -1,3 +1,5 @@
1
+
2
+ import {pub} from "@e280/stz"
1
3
  import {autoDetectRenderer, Container, Renderer, Sprite, Text, Texture} from "pixi.js"
2
4
 
3
5
  import {Id} from "../../timeline/index.js"
@@ -6,6 +8,8 @@ import {Mat6, mat6ToMatrix} from "../../timeline/utils/matrix.js"
6
8
  import {makeTransition} from "../../features/transition/transition.js"
7
9
 
8
10
  export class Compositor {
11
+ onPointerDown = pub<[{id: Id, object: Container}]>()
12
+ onPointerUp = pub<[{id: Id, object: Container}]>()
9
13
 
10
14
  static async setup() {
11
15
  const renderer = await autoDetectRenderer({
@@ -89,11 +93,11 @@ export class Compositor {
89
93
  layer: Extract<Layer, {kind: 'text'}>,
90
94
  parent: Container,
91
95
  ) {
92
- const text = this.#findOrCreate<Text>(layer)!
93
- this.#applyTransform(text, layer.matrix)
94
- parent.addChild(text)
96
+ const {sprite, dispose} = this.#findOrCreate<Text>(layer)!
97
+ this.#applyTransform(sprite, layer.matrix)
98
+ parent.addChild(sprite)
95
99
  return {
96
- dispose: () => {}
100
+ dispose: () => dispose()
97
101
  }
98
102
  }
99
103
 
@@ -102,7 +106,7 @@ export class Compositor {
102
106
  parent: Container,
103
107
  ) {
104
108
  const texture = Texture.from(layer.frame)
105
- const sprite = this.#findOrCreate<Sprite>(layer)!
109
+ const {sprite, dispose} = this.#findOrCreate<Sprite>(layer)!
106
110
  sprite.texture = texture
107
111
  this.#applyTransform(sprite, layer.matrix)
108
112
  parent.addChild(sprite)
@@ -110,6 +114,7 @@ export class Compositor {
110
114
  dispose: () => {
111
115
  texture.destroy(true)
112
116
  layer.frame.close()
117
+ dispose()
113
118
  }
114
119
  }
115
120
  }
@@ -146,20 +151,47 @@ export class Compositor {
146
151
  text: layer.content,
147
152
  style: layer.style
148
153
  })
149
- text.onmouseenter = () => console.log("enter text")
150
- return this.#activeObjects
151
- .set(layer.id, text)
152
- .get(layer.id) as T
154
+ text.eventMode = "static"
155
+ const down = () => this.onPointerDown.publish({id: layer.id, object: text})
156
+ const up = () => this.onPointerUp.publish({id: layer.id, object: text})
157
+ text.on("pointerdown", down)
158
+ text.on("pointerup", up)
159
+
160
+ return {
161
+ sprite: this.#activeObjects
162
+ .set(layer.id, text)
163
+ .get(layer.id) as T,
164
+ dispose: () => {
165
+ text.off("pointerdown", down)
166
+ text.off("pointerup", up)
167
+ }
168
+ }
153
169
  }
154
170
  case 'image': {
155
171
  const sprite = new Sprite()
156
- sprite.onmouseenter = () => console.log("enter")
157
- return this.#activeObjects
158
- .set(layer.id, sprite)
159
- .get(layer.id) as T
172
+ 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})
175
+ sprite.on("pointerdown", down)
176
+ sprite.on("pointerup", up)
177
+
178
+ return {
179
+ sprite: this.#activeObjects
180
+ .set(layer.id, sprite)
181
+ .get(layer.id) as T,
182
+ dispose: () => {
183
+ sprite.off("pointerdown", down)
184
+ sprite.off("pointerup", up)
185
+ }
186
+ }
160
187
  }
161
188
  }
162
- } else return object as T
189
+ } else return {
190
+ sprite: object,
191
+ dispose: () => {}} as {
192
+ sprite: T
193
+ dispose: () => void
194
+ }
163
195
  }
164
196
 
165
197
  #collectIds(layers: Layer | Composition): Set<number> {