Skip to content

Commit d7e63a8

Browse files
committed
perf(timeline): optimize draw group
1 parent 67f5682 commit d7e63a8

File tree

2 files changed

+26
-18
lines changed

2 files changed

+26
-18
lines changed

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

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -879,24 +879,26 @@ export default defineComponent({
879879
880880
/** @type {PIXI.Graphics} */
881881
const g = event.groupG
882-
g.clear()
883882
const size = getTimePosition(event.group.lastEvent.time) - getTimePosition(event.group.firstEvent.time)
884-
if (event.layer.groupsOnly) {
885-
if (drawAsSelected) {
886-
g.lineStyle(2, boostColor(event.layer.color, darkMode.value))
887-
g.beginFill(dimColor(event.layer.color, darkMode.value, 30))
883+
if (size !== event.group.oldSize) {
884+
g.clear()
885+
if (event.layer.groupsOnly) {
886+
if (drawAsSelected) {
887+
g.lineStyle(2, boostColor(event.layer.color, darkMode.value))
888+
g.beginFill(dimColor(event.layer.color, darkMode.value, 30))
889+
} else {
890+
g.beginFill(event.layer.color, 0.5)
891+
}
888892
} else {
889-
g.beginFill(event.layer.color, 0.5)
893+
g.lineStyle(1, dimColor(event.layer.color, darkMode.value))
894+
g.beginFill(dimColor(event.layer.color, darkMode.value, 25))
895+
}
896+
if (event.layer.groupsOnly) {
897+
g.drawRect(0, -LAYER_SIZE / 2, size - 1, LAYER_SIZE - 1)
898+
} else {
899+
// Some adjustements were made on the vertical position and size to snap border pixels to the screen's grid (LoDPI)
900+
g.drawRoundedRect(-GROUP_SIZE, -GROUP_SIZE + 0.5, size + GROUP_SIZE * 2, GROUP_SIZE * 2 - 1, GROUP_SIZE)
890901
}
891-
} else {
892-
g.lineStyle(1, dimColor(event.layer.color, darkMode.value))
893-
g.beginFill(dimColor(event.layer.color, darkMode.value, 25))
894-
}
895-
if (event.layer.groupsOnly) {
896-
g.drawRect(0, -LAYER_SIZE / 2, size - 1, LAYER_SIZE - 1)
897-
} else {
898-
// Some adjustements were made on the vertical position and size to snap border pixels to the screen's grid (LoDPI)
899-
g.drawRoundedRect(-GROUP_SIZE, -GROUP_SIZE + 0.5, size + GROUP_SIZE * 2, GROUP_SIZE * 2 - 1, GROUP_SIZE)
900902
}
901903
902904
// Title
@@ -917,15 +919,19 @@ export default defineComponent({
917919
}
918920
919921
const mask = t.mask as PIXI.Graphics
920-
mask.clear()
921-
mask.beginFill(0)
922-
mask.drawRect(0, -LAYER_SIZE / 2, size - 1, LAYER_SIZE - 1)
922+
if (size !== event.group.oldSize) {
923+
mask.clear()
924+
mask.beginFill(0)
925+
mask.drawRect(0, -LAYER_SIZE / 2, size - 1, LAYER_SIZE - 1)
926+
}
923927
} else if (event.groupT) {
924928
const mask = event.groupT.mask as PIXI.Graphics
925929
mask?.destroy()
926930
event.groupT.destroy()
927931
event.groupT = null
928932
}
933+
934+
event.group.oldSize = size
929935
}
930936
}
931937

packages/app-frontend/src/features/timeline/composable/store.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ export interface EventGroup {
1818
lastEvent: TimelineEvent
1919
duration: number
2020
y: number
21+
oldSize?: number
2122
}
2223

2324
export interface EventScreenshot {
@@ -36,6 +37,7 @@ export interface TimelineEvent extends TimelineEventFromBackend {
3637
g: PIXI.Graphics
3738
groupG: PIXI.Graphics
3839
groupT: PIXI.Text
40+
forcePositionUpdate?: boolean
3941
}
4042

4143
export interface LayerFromBackend {

0 commit comments

Comments
 (0)