Skip to content

Commit 2601418

Browse files
committed
refactor(timeline): use federated events system
1 parent 4e2b680 commit 2601418

File tree

3 files changed

+43
-24
lines changed

3 files changed

+43
-24
lines changed

packages/app-frontend/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
"version": "0.0.0",
44
"private": true,
55
"dependencies": {
6+
"@pixi/events": "^6.2.0",
67
"@pixi/unsafe-eval": "^6.2.0",
78
"@vue-devtools/shared-utils": "^0.0.0",
89
"@vue/composition-api": "^1.1.3",

packages/app-frontend/src/features/timeline/TimelineView.vue

Lines changed: 37 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
<script lang="ts">
22
import * as PIXI from 'pixi.js-legacy'
33
import { install as installUnsafeEval } from '@pixi/unsafe-eval'
4+
import { EventSystem, FederatedPointerEvent, FederatedWheelEvent } from '@pixi/events'
5+
import { Renderer } from '@pixi/core'
46
import {
57
ref,
68
onMounted,
@@ -43,6 +45,8 @@ PIXI.BitmapFont.from('Roboto Mono', {
4345
resolution: window.devicePixelRatio,
4446
})
4547
48+
delete Renderer.__plugins.interaction
49+
4650
const LAYER_SIZE = 16
4751
const GROUP_SIZE = 6
4852
const MIN_CAMERA_SIZE = 10
@@ -145,6 +149,10 @@ export default defineComponent({
145149
autoDensity: true,
146150
resolution: window.devicePixelRatio,
147151
})
152+
if (!('events' in app.renderer)) {
153+
// @ts-ignore
154+
app.renderer.addSystem(EventSystem, 'events')
155+
}
148156
app.stage.interactive = true
149157
app.stage.hitArea = new PIXI.Rectangle(0, 0, 100000, 100000)
150158
updateBackground()
@@ -787,11 +795,13 @@ export default defineComponent({
787795
}
788796
789797
onMounted(() => {
790-
app.stage.addListener('click', event => {
798+
// @ts-ignore
799+
app.stage.addEventListener('click', (event: FederatedPointerEvent) => {
791800
if (cameraDragging) return
792-
const choice = getEventAtPosition(event.data.global.x, event.data.global.y)
801+
const choice = getEventAtPosition(event.globalX, event.globalY)
793802
if (choice) {
794803
selectEvent(choice)
804+
draw()
795805
}
796806
})
797807
})
@@ -937,12 +947,13 @@ export default defineComponent({
937947
eventTooltipText.y = eventTooltipTitle.height + 4
938948
eventTooltip.addChild(eventTooltipText)
939949
940-
app.stage.addListener('mousemove', mouseEvent => {
950+
// @ts-ignore
951+
app.stage.addEventListener('pointermove', (mouseEvent: FederatedPointerEvent) => {
941952
const text: string[] = []
942953
943954
if (!cameraDragging) {
944955
// Event tooltip
945-
const event = getEventAtPosition(mouseEvent.data.global.x, mouseEvent.data.global.y)
956+
const event = getEventAtPosition(mouseEvent.globalX, mouseEvent.globalY)
946957
if (event) {
947958
text.push(event.title ?? 'Event')
948959
if (event.subtitle) {
@@ -959,7 +970,7 @@ export default defineComponent({
959970
}
960971
} else {
961972
// Marker tooltip
962-
const marker = getMarkerAtPosition(mouseEvent.data.global.x)
973+
const marker = getMarkerAtPosition(mouseEvent.globalX)
963974
if (marker) {
964975
text.push(marker.label)
965976
text.push(formatTime(marker.time, 'ms'))
@@ -987,13 +998,13 @@ export default defineComponent({
987998
const height = eventTooltipTitle.height + (text.length > 1 ? eventTooltipText.height : 0) + 8
988999
eventTooltipGraphics.drawRoundedRect(0, 0, width, height, 4)
9891000
990-
eventTooltip.x = mouseEvent.data.global.x + 12
1001+
eventTooltip.x = mouseEvent.globalX + 12
9911002
if (eventTooltip.x + eventTooltip.width > app.renderer.width) {
992-
eventTooltip.x = mouseEvent.data.global.x - eventTooltip.width - 12
1003+
eventTooltip.x = mouseEvent.globalX - eventTooltip.width - 12
9931004
}
994-
eventTooltip.y = mouseEvent.data.global.y + 12
1005+
eventTooltip.y = mouseEvent.globalY + 12
9951006
if (eventTooltip.y + eventTooltip.height > app.renderer.height) {
996-
eventTooltip.y = mouseEvent.data.global.y - eventTooltip.height - 12
1007+
eventTooltip.y = mouseEvent.globalY - eventTooltip.height - 12
9971008
}
9981009
eventTooltip.visible = true
9991010
} else {
@@ -1168,14 +1179,16 @@ export default defineComponent({
11681179
11691180
onMounted(() => {
11701181
queueCameraUpdate()
1182+
// @ts-ignore
1183+
app.stage.addEventListener('wheel', onMouseWheel)
11711184
})
11721185
1173-
function onMouseWheel (event: WheelEvent) {
1186+
function onMouseWheel (event: FederatedWheelEvent) {
11741187
const size = endTime.value - startTime.value
11751188
const viewWidth = app.view.width
11761189
1177-
if (!event.shiftKey && !event.altKey) {
1178-
const centerRatio = event.offsetX / viewWidth / window.devicePixelRatio
1190+
if (!event.ctrlKey && !event.altKey) {
1191+
const centerRatio = event.globalX / viewWidth
11791192
const center = size * centerRatio + startTime.value
11801193
11811194
let newSize = size + event.deltaY / viewWidth * size * 4
@@ -1257,21 +1270,23 @@ export default defineComponent({
12571270
onMounted(() => {
12581271
layersScroller = document.querySelector('[data-scroller="layers"]')
12591272
1260-
app.stage.addListener('mousedown', (event) => {
1261-
const { x, y } = event.data.global
1262-
startDragX = x
1263-
startDragY = y
1273+
// @ts-ignore
1274+
app.stage.addEventListener('pointerdown', (event: FederatedPointerEvent) => {
1275+
startDragX = event.globalX
1276+
startDragY = event.globalY
12641277
startDragTime = startTime.value
12651278
startDragScrollTop = layersScroller.scrollTop
1266-
app.stage.addListener('mousemove', onCameraDraggingMouseMove)
1279+
// @ts-ignore
1280+
app.stage.addEventListener('pointermove', onCameraDraggingMouseMove)
1281+
window.addEventListener('mouseup', onCameraDraggingMouseUp)
12671282
})
12681283
})
12691284
1270-
function onCameraDraggingMouseMove (event) {
1271-
const { x, y } = event.data.global
1285+
function onCameraDraggingMouseMove (event: FederatedPointerEvent) {
1286+
const x = event.globalX
1287+
const y = event.globalY
12721288
if (!cameraDragging && (Math.abs(x - startDragX) > 5 || Math.abs(y - startDragY) > 5)) {
12731289
cameraDragging = true
1274-
window.addEventListener('mouseup', onCameraDraggingMouseUp)
12751290
}
12761291
12771292
if (cameraDragging) {
@@ -1302,7 +1317,7 @@ export default defineComponent({
13021317
}
13031318
13041319
function removeOnCameraDraggingEvents () {
1305-
app.stage?.removeListener('mousemove', onCameraDraggingMouseMove)
1320+
app.stage?.removeListener('pointermove', onCameraDraggingMouseMove)
13061321
window.removeEventListener('mouseup', onCameraDraggingMouseUp)
13071322
}
13081323
@@ -1325,7 +1340,7 @@ export default defineComponent({
13251340
draw()
13261341
}
13271342
1328-
// Events
1343+
// Misc. mouse events
13291344
13301345
function onMouseMove (event: MouseEvent) {
13311346
updateLayerHover(event)
@@ -1339,7 +1354,6 @@ export default defineComponent({
13391354
13401355
return {
13411356
wrapper,
1342-
onMouseWheel,
13431357
onMouseMove,
13441358
onMouseOut,
13451359
onResize,
@@ -1353,7 +1367,6 @@ export default defineComponent({
13531367
ref="wrapper"
13541368
class="relative overflow-hidden"
13551369
data-id="timeline-view-wrapper"
1356-
@wheel="onMouseWheel"
13571370
@mousemove="onMouseMove"
13581371
@mouseout="onMouseOut"
13591372
>

yarn.lock

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2058,6 +2058,11 @@
20582058
resolved "https://registry.yarnpkg.com/@pixi/display/-/display-6.2.0.tgz#3a917dad5056b82dd25ba322f095d74af7c08fd0"
20592059
integrity sha512-uEphbxCvr9jnWD+0zStwUn8xQlMqA3wrhm4+xsUWJmQZkS1yV5dWwtFth5bbP3lAcP2/CpK9tUF/ScnLbys7NQ==
20602060

2061+
"@pixi/events@^6.2.0":
2062+
version "6.2.0"
2063+
resolved "https://registry.yarnpkg.com/@pixi/events/-/events-6.2.0.tgz#bdd5a641a7462d868e6618607c2b3fbe8a5f3185"
2064+
integrity sha512-hwLpf0Sc326qwhXFyxcAxKXCi0/vlxwJR4Yvot4jOVcPJ/nRHBWeLkTIn0v6zD/XpvbUizMOeMi3Tym5gl0Luw==
2065+
20612066
20622067
version "6.2.0"
20632068
resolved "https://registry.yarnpkg.com/@pixi/extract/-/extract-6.2.0.tgz#cc7f64379a59f8d27b0c5cfd04eaddefb74b109d"

0 commit comments

Comments
 (0)