From 400783b15f1069a471d7c5ef97ef6ba05ba87f1b Mon Sep 17 00:00:00 2001 From: Sean Martin Date: Mon, 29 Jun 2026 20:32:53 +0200 Subject: [PATCH] feat: hide skeletons action --- src/layer/segmentation/index.ts | 14 ++++++++++++++ src/skeleton/actions.ts | 3 +++ src/ui/default_input_event_bindings.ts | 2 ++ src/viewer.ts | 3 ++- 4 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/layer/segmentation/index.ts b/src/layer/segmentation/index.ts index 533359e48..9bee5db5e 100644 --- a/src/layer/segmentation/index.ts +++ b/src/layer/segmentation/index.ts @@ -107,6 +107,7 @@ import { SKELETON_GO_ROOT, SKELETON_GO_UNFINISHED, SKELETON_REDO, + SKELETON_TOGGLE_HIDDEN, SKELETON_UNDO, } from "#src/skeleton/actions.js"; import type { @@ -1088,6 +1089,8 @@ export class SegmentationUserLayer extends Base { x === undefined ? undefined : parseUint64(x), ); + private savedHiddenObjectAlpha: number | undefined; + constructor(managedLayer: Borrowed) { super(managedLayer); this.codeVisible.changed.add(this.specificationChanged.dispatch); @@ -2071,6 +2074,17 @@ export class SegmentationUserLayer extends Base { } break; } + case SKELETON_TOGGLE_HIDDEN: { + const { hiddenObjectAlpha } = this.displayState; + if (this.savedHiddenObjectAlpha !== undefined) { + hiddenObjectAlpha.value = this.savedHiddenObjectAlpha; + this.savedHiddenObjectAlpha = undefined; + } else { + this.savedHiddenObjectAlpha = hiddenObjectAlpha.value; + hiddenObjectAlpha.value = 0; + } + break; + } case SKELETON_GO_ROOT: case SKELETON_GO_BRANCH_START: case SKELETON_GO_BRANCH_END: diff --git a/src/skeleton/actions.ts b/src/skeleton/actions.ts index c05b626b5..54e3cedc4 100644 --- a/src/skeleton/actions.ts +++ b/src/skeleton/actions.ts @@ -44,3 +44,6 @@ export const SKELETON_ENTER_CREATE = "skeleton-enter-create"; export const SKELETON_PIN_NODE = "skeleton-pin-node"; export const SKELETON_DELETE_NODE = "skeleton-delete-node"; export const SKELETON_CLEAR_SELECTION = "skeleton-clear-node-selection"; + +// --- Display toggles --- +export const SKELETON_TOGGLE_HIDDEN = "skeleton-toggle-hidden"; diff --git a/src/ui/default_input_event_bindings.ts b/src/ui/default_input_event_bindings.ts index 066a2e200..ac685d513 100644 --- a/src/ui/default_input_event_bindings.ts +++ b/src/ui/default_input_event_bindings.ts @@ -31,6 +31,7 @@ import { SKELETON_PIN_NODE, SKELETON_REDO, SKELETON_REROOT, + SKELETON_TOGGLE_HIDDEN, SKELETON_TOGGLE_TRUE_END, SKELETON_UNDO, } from "#src/skeleton/actions.js"; @@ -64,6 +65,7 @@ export function getDefaultGlobalBindings() { map.set("keyn", "add-layer"); map.set("keyh", "help"); + map.set("keyg", SKELETON_TOGGLE_HIDDEN); map.set("space", "toggle-layout"); map.set("shift+space", "toggle-layout-alternative"); diff --git a/src/viewer.ts b/src/viewer.ts index 063046d42..a58cd066a 100644 --- a/src/viewer.ts +++ b/src/viewer.ts @@ -81,6 +81,7 @@ import { SKELETON_GO_ROOT, SKELETON_GO_UNFINISHED, SKELETON_REDO, + SKELETON_TOGGLE_HIDDEN, SKELETON_UNDO, } from "#src/skeleton/actions.js"; import { StatusMessage } from "#src/status.js"; @@ -1077,7 +1078,7 @@ export class Viewer extends RefCounted implements ViewerState { * Called once by the constructor to register the action listeners. */ private registerActionListeners() { - for (const action of ["recolor", "clear-segments"]) { + for (const action of ["recolor", "clear-segments", SKELETON_TOGGLE_HIDDEN]) { this.bindAction(action, () => { this.layerManager.invokeAction(action); });