From 711ef37eef81707bc46530a2b4e95c59985606bd Mon Sep 17 00:00:00 2001 From: Donovan Hutchence Date: Mon, 22 Jul 2024 15:58:15 +0100 Subject: [PATCH 1/7] dev --- package-lock.json | 4 ++-- package.json | 2 +- src/tools/brush-selection.ts | 15 +++++++++++---- src/tools/rect-selection.ts | 14 ++++++++++---- 4 files changed, 24 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index d950dc97..6a3a656d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "supersplat", - "version": "0.24.2", + "version": "0.24.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "supersplat", - "version": "0.24.2", + "version": "0.24.3", "license": "MIT", "devDependencies": { "@playcanvas/eslint-config": "^1.7.1", diff --git a/package.json b/package.json index bc39080d..69288032 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "supersplat", - "version": "0.24.2", + "version": "0.24.3", "author": "PlayCanvas", "homepage": "https://playcanvas.com/supersplat/editor", "description": "3D Gaussian Splat Editor", diff --git a/src/tools/brush-selection.ts b/src/tools/brush-selection.ts index 2f726c91..fd546b7b 100644 --- a/src/tools/brush-selection.ts +++ b/src/tools/brush-selection.ts @@ -87,15 +87,18 @@ class BrushSelection { update(e); }; + const dragEnd = () => { + parent.releasePointerCapture(dragId); + dragId = undefined; + selectCanvas.style.display = 'none'; + }; + const pointerup = (e: PointerEvent) => { if (e.pointerId === dragId) { e.preventDefault(); e.stopPropagation(); - parent.releasePointerCapture(dragId); - dragId = undefined; - - selectCanvas.style.display = 'none'; + dragEnd(); events.fire( 'select.byMask', @@ -114,6 +117,10 @@ class BrushSelection { }; this.deactivate = () => { + // cancel active operation + if (dragId !== undefined) { + dragEnd(); + } svg.style.display = 'none'; parent.style.display = 'none'; parent.removeEventListener('pointerdown', pointerdown); diff --git a/src/tools/rect-selection.ts b/src/tools/rect-selection.ts index b7a5fe5c..14b5ad35 100644 --- a/src/tools/rect-selection.ts +++ b/src/tools/rect-selection.ts @@ -62,6 +62,12 @@ class RectSelection { } }; + const dragEnd = () => { + parent.releasePointerCapture(dragId); + dragId = undefined; + svg.style.display = 'none'; + }; + const pointerup = (e: PointerEvent) => { if (e.pointerId === dragId) { e.preventDefault(); @@ -70,10 +76,7 @@ class RectSelection { const w = parent.clientWidth; const h = parent.clientHeight; - parent.releasePointerCapture(dragId); - dragId = undefined; - - svg.style.display = 'none'; + dragEnd(); events.fire('select.rect', e.shiftKey ? 'add' : (e.ctrlKey ? 'remove' : 'set'), { start: { x: Math.min(start.x, end.x) / w, y: Math.min(start.y, end.y) / h }, @@ -90,6 +93,9 @@ class RectSelection { }; this.deactivate = () => { + if (dragId !== undefined) { + dragEnd(); + } parent.style.display = 'none'; parent.removeEventListener('pointerdown', pointerdown); parent.removeEventListener('pointermove', pointermove); From 3d73012c1b874ffe17af29112a9b67fb6246ae76 Mon Sep 17 00:00:00 2001 From: Donovan Hutchence Date: Mon, 22 Jul 2024 16:04:49 +0100 Subject: [PATCH 2/7] fix pointer events on the view cube --- src/style.scss | 1 + src/ui/view-cube.ts | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/style.scss b/src/style.scss index 54427658..9be0baf0 100644 --- a/src/style.scss +++ b/src/style.scss @@ -388,6 +388,7 @@ body { height: 140px; right: 0px; top: 0px; + pointer-events: none; } #brush-select-canvas { diff --git a/src/ui/view-cube.ts b/src/ui/view-cube.ts index 7a8c1a89..02e3d036 100644 --- a/src/ui/view-cube.ts +++ b/src/ui/view-cube.ts @@ -35,6 +35,7 @@ class ViewCube extends Container { circle.setAttribute('r', '10'); circle.setAttribute('cx', '0'); circle.setAttribute('cy', '0'); + circle.setAttribute('pointer-events', 'all'); result.appendChild(circle); @@ -45,7 +46,6 @@ class ViewCube extends Container { t.setAttribute('font-weight', 'bold'); t.setAttribute('text-anchor', 'middle'); t.setAttribute('alignment-baseline', 'central'); - t.setAttribute('pointer-events', 'none'); t.textContent = text; result.appendChild(t); } From 62c20e6756cee4c109f60f4596b955db48148804 Mon Sep 17 00:00:00 2001 From: Donovan Hutchence Date: Tue, 23 Jul 2024 10:34:22 +0100 Subject: [PATCH 3/7] readding transform panel --- src/splat.ts | 2 + src/style.scss | 14 +++- src/ui/control-panel.ts | 4 + src/ui/transform-panel.ts | 164 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 182 insertions(+), 2 deletions(-) create mode 100644 src/ui/transform-panel.ts diff --git a/src/splat.ts b/src/splat.ts index 18442a09..d8e21f53 100644 --- a/src/splat.ts +++ b/src/splat.ts @@ -374,6 +374,8 @@ class Splat extends Element { this.worldBoundDirty = true; this.scene.boundDirty = true; + + this.scene.events.fire('splat.moved', this); } // get local space bound diff --git a/src/style.scss b/src/style.scss index 9be0baf0..e087adcc 100644 --- a/src/style.scss +++ b/src/style.scss @@ -142,6 +142,7 @@ body { margin-right: 10px; color: $text-secondary; + #transform-panel & { content: '\E111'; }; #camera-panel & { content: '\E212'; }; #show-panel & { content: '\E117'; }; #selection-panel & { content: '\E398'; }; @@ -328,6 +329,15 @@ body { flex-direction: column; } +#transform-panel > .pcui-panel-content { + display: flex; + flex-direction: column; +} + +.transform-panel-axis-label { + text-align: center; +} + #camera-panel > .pcui-panel-content { display: flex; flex-direction: column; @@ -353,8 +363,8 @@ body { width: 100px; flex-shrink: 0; flex-grow: 0; - line-height: 24px; - margin: 2px 6px 2px 6px; + line-height: 32px; + margin: 0px 6px 0px 6px; } .control-element { diff --git a/src/ui/control-panel.ts b/src/ui/control-panel.ts index 531fcf5d..1146531a 100644 --- a/src/ui/control-panel.ts +++ b/src/ui/control-panel.ts @@ -1,5 +1,6 @@ import { BooleanInput, Button, Container, Element as PcuiElement, Label, NumericInput, Panel, RadioButton, SelectInput, SliderInput, TreeViewItem, VectorInput } from 'pcui'; import { Events } from '../events'; +import { TransformPanel } from './transform-panel'; import { Element, ElementType } from '../element'; import { Splat } from '../splat'; import { version as appVersion } from '../../package.json'; @@ -237,6 +238,8 @@ class ControlPanel extends Panel { } }); + const transformPanel = new TransformPanel(events); + // camera panel const cameraPanel = new Panel({ id: 'camera-panel', @@ -578,6 +581,7 @@ class ControlPanel extends Panel { id: 'control-panel-controls' }); + controlsContainer.append(transformPanel); controlsContainer.append(cameraPanel) controlsContainer.append(selectionPanel); controlsContainer.append(showPanel); diff --git a/src/ui/transform-panel.ts b/src/ui/transform-panel.ts new file mode 100644 index 00000000..35a9b243 --- /dev/null +++ b/src/ui/transform-panel.ts @@ -0,0 +1,164 @@ +import { Container, Label, NumericInput, Panel, PanelArgs, VectorInput } from 'pcui'; +import { Vec3 } from 'playcanvas'; +import { Events } from '../events'; +import { Splat } from '../splat'; + +class TransformPanel extends Panel { + constructor(events: Events, args: PanelArgs = {}) { + args = { + id: 'transform-panel', + class: 'control-panel', + headerText: 'TRANSFORM', + ...args + }; + + super(args); + + const axis = new Container({ + class: 'control-parent' + }); + + const axisLabel = new Label({ + class: 'control-label', + text: '' + }); + + const xLabel = new Label({ + class: ['control-element-expand', 'transform-panel-axis-label'], + text: 'x' + }); + + const yLabel = new Label({ + class: ['control-element-expand', 'transform-panel-axis-label'], + text: 'y' + }); + + const zLabel = new Label({ + class: ['control-element-expand', 'transform-panel-axis-label'], + text: 'z' + }); + + axis.append(axisLabel); + axis.append(xLabel); + axis.append(yLabel); + axis.append(zLabel); + + // position + const position = new Container({ + class: 'control-parent' + }); + + const positionLabel = new Label({ + class: 'control-label', + text: 'Position' + }); + + const positionVector = new VectorInput({ + class: 'control-element-expand', + precision: 2, + dimensions: 3, + value: [0, 0, 0], + enabled: false + }); + + position.append(positionLabel); + position.append(positionVector); + + // rotation + const rotation = new Container({ + class: 'control-parent' + }); + + const rotationLabel = new Label({ + class: 'control-label', + text: 'Rotation' + }); + + const rotationVector = new VectorInput({ + class: 'control-element-expand', + precision: 2, + dimensions: 3, + value: [0, 0, 0], + enabled: false + }); + + rotation.append(rotationLabel); + rotation.append(rotationVector); + + // scale + const scale = new Container({ + class: 'control-parent' + }); + + const scaleLabel = new Label({ + class: 'control-label', + text: 'Scale' + }); + + const scaleInput = new NumericInput({ + class: 'control-element-expand', + precision: 2, + value: 1, + min: 0.01, + max: 10000, + enabled: false + }); + + scale.append(scaleLabel); + scale.append(scaleInput); + + this.append(axis); + this.append(position); + this.append(rotation); + this.append(scale); + + let selection: Splat | null = null; + + const toArray = (v: Vec3) => { + return [v.x, v.y, v.z]; + }; + + const toVec3 = (a: number[]) => { + return new Vec3(a[0], a[1], a[2]); + }; + + const updateUI = () => { + positionVector.value = toArray(selection.pivot.getLocalPosition()); + rotationVector.value = toArray(selection.pivot.getLocalEulerAngles()); + scaleInput.value = selection.pivot.getLocalScale().x; + }; + + events.on('selection.changed', (splat) => { + selection = splat; + + if (selection) { + // enable inputs + updateUI(); + positionVector.enabled = rotationVector.enabled = scaleInput.enabled = true; + } else { + // enable inputs + positionVector.enabled = rotationVector.enabled = scaleInput.enabled = false; + } + }); + + events.on('splat.moved', (splat: Splat) => { + if (splat === selection) { + updateUI(); + } + }); + + positionVector.on('change', () => { + selection.pivot.setLocalPosition(toVec3(positionVector.value)); + }); + + rotationVector.on('change', () => { + selection.pivot.setLocalEulerAngles(toVec3(rotationVector.value)); + }); + + scaleInput.on('change', () => { + selection.pivot.setLocalScale(scaleInput.value, scaleInput.value, scaleInput.value); + }); + } +} + +export { TransformPanel }; From 670ab543a700da08b78a3d66053758a94de89d0d Mon Sep 17 00:00:00 2001 From: Donovan Hutchence Date: Tue, 23 Jul 2024 14:33:37 +0100 Subject: [PATCH 4/7] latest --- package-lock.json | 4 ++-- package.json | 2 +- src/controllers.ts | 4 ++-- src/splat.ts | 7 +++++-- src/tools/transform-tool.ts | 4 ++++ src/ui/transform-panel.ts | 19 +++++++++++++++---- 6 files changed, 29 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6a3a656d..3d36d20c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "supersplat", - "version": "0.24.3", + "version": "0.25.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "supersplat", - "version": "0.24.3", + "version": "0.25.0", "license": "MIT", "devDependencies": { "@playcanvas/eslint-config": "^1.7.1", diff --git a/package.json b/package.json index 69288032..2ed15850 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "supersplat", - "version": "0.24.3", + "version": "0.25.0", "author": "PlayCanvas", "homepage": "https://playcanvas.com/supersplat/editor", "description": "3D Gaussian Splat Editor", diff --git a/src/controllers.ts b/src/controllers.ts index f9b13799..132aaf1b 100644 --- a/src/controllers.ts +++ b/src/controllers.ts @@ -9,8 +9,8 @@ const worldDiff = new Vec3(); const dist = (x0: number, y0: number, x1: number, y1: number) => Math.sqrt((x1 - x0) ** 2 + (y1 - y0) ** 2); class PointerController { - destroy: () => void; update: (deltaTime: number) => void; + destroy: () => void; constructor(camera: Camera, target: HTMLElement) { @@ -154,7 +154,7 @@ class PointerController { }; const keydown = (event: KeyboardEvent) => { - if (keys.hasOwnProperty(event.key)) { + if (keys.hasOwnProperty(event.key) && event.target === document.body) { keys[event.key] = event.shiftKey ? 10 : (event.ctrlKey || event.metaKey || event.altKey ? 0.1 : 1); event.preventDefault(); event.stopPropagation(); diff --git a/src/splat.ts b/src/splat.ts index d8e21f53..88fb1189 100644 --- a/src/splat.ts +++ b/src/splat.ts @@ -389,10 +389,11 @@ class Splat extends Element { localBound.halfExtents.set(0.5, 0.5, 0.5); } + this.localBoundDirty = false; + + // align the pivot point to the splat center this.entity.getWorldTransform().transformPoint(localBound.center, vec); this.setPivot(vec); - - this.localBoundDirty = false; } return this.localBoundStorage; @@ -418,6 +419,8 @@ class Splat extends Element { mat.transformPoint(position, veca); this.entity.setLocalPosition(-veca.x, -veca.y, -veca.z); this.pivot.setLocalPosition(position); + + this.scene.events.fire('splat.moved', this); } get visible() { diff --git a/src/tools/transform-tool.ts b/src/tools/transform-tool.ts index 2ab5a235..b30aaa6c 100644 --- a/src/tools/transform-tool.ts +++ b/src/tools/transform-tool.ts @@ -100,6 +100,10 @@ class TransformTool { this.update(); }); + events.on('splat.moved', (splat: Splat) => { + this.update(); + }); + const updateGizmoSize = () => { const canvas = document.getElementById('canvas'); if (canvas) { diff --git a/src/ui/transform-panel.ts b/src/ui/transform-panel.ts index 35a9b243..28261642 100644 --- a/src/ui/transform-panel.ts +++ b/src/ui/transform-panel.ts @@ -1,5 +1,5 @@ import { Container, Label, NumericInput, Panel, PanelArgs, VectorInput } from 'pcui'; -import { Vec3 } from 'playcanvas'; +import { Quat, Vec3 } from 'playcanvas'; import { Events } from '../events'; import { Splat } from '../splat'; @@ -122,10 +122,14 @@ class TransformPanel extends Panel { return new Vec3(a[0], a[1], a[2]); }; + let uiUpdating = false; + const updateUI = () => { + uiUpdating = true; positionVector.value = toArray(selection.pivot.getLocalPosition()); rotationVector.value = toArray(selection.pivot.getLocalEulerAngles()); scaleInput.value = selection.pivot.getLocalScale().x; + uiUpdating = false; }; events.on('selection.changed', (splat) => { @@ -148,15 +152,22 @@ class TransformPanel extends Panel { }); positionVector.on('change', () => { - selection.pivot.setLocalPosition(toVec3(positionVector.value)); + if (!uiUpdating) { + selection.move(toVec3(positionVector.value), null, null); + } }); rotationVector.on('change', () => { - selection.pivot.setLocalEulerAngles(toVec3(rotationVector.value)); + if (!uiUpdating) { + const v = rotationVector.value; + selection.move(null, new Quat().setFromEulerAngles(v[0], v[1], v[2]), null); + } }); scaleInput.on('change', () => { - selection.pivot.setLocalScale(scaleInput.value, scaleInput.value, scaleInput.value); + if (!uiUpdating) { + selection.move(null, null, toVec3([scaleInput.value, scaleInput.value, scaleInput.value])); + } }); } } From eb0d4c00fd2b5ae220ba678fc5e8e97930a78fbc Mon Sep 17 00:00:00 2001 From: Donovan Hutchence Date: Tue, 23 Jul 2024 15:45:13 +0100 Subject: [PATCH 5/7] split out splat-list --- src/ui/control-panel.ts | 138 +++------------------------------------- src/ui/splat-list.ts | 129 +++++++++++++++++++++++++++++++++++++ 2 files changed, 139 insertions(+), 128 deletions(-) create mode 100644 src/ui/splat-list.ts diff --git a/src/ui/control-panel.ts b/src/ui/control-panel.ts index 1146531a..5a6b392c 100644 --- a/src/ui/control-panel.ts +++ b/src/ui/control-panel.ts @@ -1,136 +1,11 @@ -import { BooleanInput, Button, Container, Element as PcuiElement, Label, NumericInput, Panel, RadioButton, SelectInput, SliderInput, TreeViewItem, VectorInput } from 'pcui'; +import { BooleanInput, Button, Container, Label, NumericInput, Panel, RadioButton, SelectInput, SliderInput, VectorInput } from 'pcui'; import { Events } from '../events'; +import { SplatItem, SplatList } from './splat-list'; import { TransformPanel } from './transform-panel'; import { Element, ElementType } from '../element'; import { Splat } from '../splat'; import { version as appVersion } from '../../package.json'; -class SplatItem extends Container { - getSelected: () => boolean; - setSelected: (value: boolean) => void; - getVisible: () => boolean; - setVisible: (value: boolean) => void; - destroy: () => void; - - constructor(name: string, args = {}) { - args = { - ...args, - class: 'scene-panel-splat-item' - }; - - super(args); - - const text = new Label({ - class: 'scene-panel-splat-item-text', - text: name - }); - - const visible = new PcuiElement({ - class: ['scene-panel-splat-item-visible', 'checked'] - }); - - const remove = new PcuiElement({ - class: 'scene-panel-splat-item-delete' - }); - - this.append(text); - this.append(visible); - this.append(remove); - - this.getSelected = () => { - return this.class.contains('selected'); - }; - - this.setSelected = (value: boolean) => { - if (value !== this.selected) { - if (value) { - this.class.add('selected'); - this.emit('select', this); - } else { - this.class.remove('selected'); - this.emit('unselect', this); - } - } - }; - - this.getVisible = () => { - return visible.class.contains('checked'); - }; - - this.setVisible = (value: boolean) => { - if (value !== this.visible) { - if (value) { - visible.class.add('checked'); - this.emit('visible', this); - } else { - visible.class.remove('checked'); - this.emit('invisible', this); - } - } - }; - - const toggleVisible = (event: MouseEvent) => { - event.stopPropagation(); - this.visible = !this.visible; - }; - - const handleRemove = (event: MouseEvent) => { - event.stopPropagation(); - this.emit('removeClicked', this); - }; - - // handle clicks - visible.dom.addEventListener('click', toggleVisible, true); - remove.dom.addEventListener('click', handleRemove, true); - - this.destroy = () => { - visible.dom.removeEventListener('click', toggleVisible, true); - remove.dom.removeEventListener('click', handleRemove, true); - } - } - - get selected() { - return this.getSelected(); - } - - set selected(value) { - this.setSelected(value); - } - - get visible() { - return this.getVisible(); - } - - set visible(value) { - this.setVisible(value); - } -} - -class SplatList extends Container { - protected _onAppendChild(element: PcuiElement): void { - super._onAppendChild(element); - - if (element instanceof SplatItem) { - element.on('click', () => { - this.emit('click', element); - }); - - element.on('removeClicked', () => { - this.emit('removeClicked', element); - }); - } - } - - protected _onRemoveChild(element: PcuiElement): void { - if (element instanceof SplatItem) { - element.unbind('click'); - element.unbind('removeClicked'); - } - - super._onRemoveChild(element); - } -} - class ControlPanel extends Panel { constructor(events: Events, remoteStorageMode: boolean, args = { }) { args = { @@ -177,7 +52,14 @@ class ControlPanel extends Panel { splatList.append(item); items.set(splat, item); - item.on('visible', () => splat.visible = true); + item.on('visible', () => { + splat.visible = true; + + // also select it if there is no other selection + if (!events.invoke('selection')) { + events.fire('selection', splat); + } + }); item.on('invisible', () => splat.visible = false); } }); diff --git a/src/ui/splat-list.ts b/src/ui/splat-list.ts new file mode 100644 index 00000000..2fa5ca65 --- /dev/null +++ b/src/ui/splat-list.ts @@ -0,0 +1,129 @@ +import { Container, Label, Element as PcuiElement } from 'pcui'; + +class SplatItem extends Container { + getSelected: () => boolean; + setSelected: (value: boolean) => void; + getVisible: () => boolean; + setVisible: (value: boolean) => void; + destroy: () => void; + + constructor(name: string, args = {}) { + args = { + ...args, + class: 'scene-panel-splat-item' + }; + + super(args); + + const text = new Label({ + class: 'scene-panel-splat-item-text', + text: name + }); + + const visible = new PcuiElement({ + class: ['scene-panel-splat-item-visible', 'checked'] + }); + + const remove = new PcuiElement({ + class: 'scene-panel-splat-item-delete' + }); + + this.append(text); + this.append(visible); + this.append(remove); + + this.getSelected = () => { + return this.class.contains('selected'); + }; + + this.setSelected = (value: boolean) => { + if (value !== this.selected) { + if (value) { + this.class.add('selected'); + this.emit('select', this); + } else { + this.class.remove('selected'); + this.emit('unselect', this); + } + } + }; + + this.getVisible = () => { + return visible.class.contains('checked'); + }; + + this.setVisible = (value: boolean) => { + if (value !== this.visible) { + if (value) { + visible.class.add('checked'); + this.emit('visible', this); + } else { + visible.class.remove('checked'); + this.emit('invisible', this); + } + } + }; + + const toggleVisible = (event: MouseEvent) => { + event.stopPropagation(); + this.visible = !this.visible; + }; + + const handleRemove = (event: MouseEvent) => { + event.stopPropagation(); + this.emit('removeClicked', this); + }; + + // handle clicks + visible.dom.addEventListener('click', toggleVisible, true); + remove.dom.addEventListener('click', handleRemove, true); + + this.destroy = () => { + visible.dom.removeEventListener('click', toggleVisible, true); + remove.dom.removeEventListener('click', handleRemove, true); + } + } + + get selected() { + return this.getSelected(); + } + + set selected(value) { + this.setSelected(value); + } + + get visible() { + return this.getVisible(); + } + + set visible(value) { + this.setVisible(value); + } +} + +class SplatList extends Container { + protected _onAppendChild(element: PcuiElement): void { + super._onAppendChild(element); + + if (element instanceof SplatItem) { + element.on('click', () => { + this.emit('click', element); + }); + + element.on('removeClicked', () => { + this.emit('removeClicked', element); + }); + } + } + + protected _onRemoveChild(element: PcuiElement): void { + if (element instanceof SplatItem) { + element.unbind('click'); + element.unbind('removeClicked'); + } + + super._onRemoveChild(element); + } +} + +export { SplatList, SplatItem }; From 56fbea23a3d12b541c317a2ea8d63db4e4a3dcec Mon Sep 17 00:00:00 2001 From: Donovan Hutchence Date: Tue, 23 Jul 2024 15:49:21 +0100 Subject: [PATCH 6/7] bump package version --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6a3a656d..3d36d20c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "supersplat", - "version": "0.24.3", + "version": "0.25.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "supersplat", - "version": "0.24.3", + "version": "0.25.0", "license": "MIT", "devDependencies": { "@playcanvas/eslint-config": "^1.7.1", diff --git a/package.json b/package.json index 69288032..2ed15850 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "supersplat", - "version": "0.24.3", + "version": "0.25.0", "author": "PlayCanvas", "homepage": "https://playcanvas.com/supersplat/editor", "description": "3D Gaussian Splat Editor", From 669be10f96ac824afa618f3ce286a0bbf0ca80ab Mon Sep 17 00:00:00 2001 From: Donovan Hutchence Date: Tue, 23 Jul 2024 16:12:10 +0100 Subject: [PATCH 7/7] change based on feedback --- src/ui/splat-list.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/ui/splat-list.ts b/src/ui/splat-list.ts index 2fa5ca65..1c9decfc 100644 --- a/src/ui/splat-list.ts +++ b/src/ui/splat-list.ts @@ -1,4 +1,4 @@ -import { Container, Label, Element as PcuiElement } from 'pcui'; +import { Container, Label, Element } from 'pcui'; class SplatItem extends Container { getSelected: () => boolean; @@ -20,11 +20,11 @@ class SplatItem extends Container { text: name }); - const visible = new PcuiElement({ + const visible = new Element({ class: ['scene-panel-splat-item-visible', 'checked'] }); - const remove = new PcuiElement({ + const remove = new Element({ class: 'scene-panel-splat-item-delete' }); @@ -102,7 +102,7 @@ class SplatItem extends Container { } class SplatList extends Container { - protected _onAppendChild(element: PcuiElement): void { + protected _onAppendChild(element: Element): void { super._onAppendChild(element); if (element instanceof SplatItem) { @@ -116,7 +116,7 @@ class SplatList extends Container { } } - protected _onRemoveChild(element: PcuiElement): void { + protected _onRemoveChild(element: Element): void { if (element instanceof SplatItem) { element.unbind('click'); element.unbind('removeClicked');