Slipstream radial menu: category-first design (no "More >" chains) #199

Open
opened 2026-09-30 05:11:59 +00:00 by sky_line · 0 comments
Owner

Design our own radial menu as an alternative to the Firestorm port (#137 / #198). It keeps the speed of a pie but drops the classic layout's weakest part: 8 fixed slices, with overflow pushed into nested "More >" sub-pies. That turns common actions into a guessing game ("was Mute on page 1 or under More > More?"), and the layout differs per target type.

Core idea

  • Top level = a few fixed categories, not actions: always in the same place for every target, so muscle memory carries over. Example set, to refine:
    • Interact (touch, sit/stand, open, pay/buy)
    • Social (profile, IM, call, friend, share, teleport)
    • Edit / Build (edit, take, copy, return, delete)
    • Look (zoom, camera, inspect, Lightbox)
    • Moderate (mute/block, derender, report, eject/freeze)
    • Wear (attach/detach/wear, outfit)
    • Tools (texture refresh, reset skeleton, debug, scripts)
    • one context slot for the most likely action on this target, e.g. Sit on a chair, Touch on a scripted object, Profile on an avatar.
    • Categories with nothing applicable to the target stay in place, drawn disabled, so the layout never shifts.
  • Categories expand in place; no replacement pages. Hovering (or a short drag toward) a category grows it outward in one of two ways:
    1. Outer ring arc: the category's items fan out as a second ring sector beyond the category's own slice. This suits roughly 3-10 items. Select by continuing the drag outward (marking-menu style).
    2. Sub-radial: for large categories (e.g. Wear with attachment points), a new radial opens centred on the category, with the parent still visible and dimmed behind it. Leaving back toward the centre collapses it.
    • Which mode a category uses is decided by item count or declared in XUI, not hard-coded.
  • Every item reachable in at most 2 steps from the centre. No "More", ever. If a category overflows the ring, the ring gets more segments (or two arcs), not a deeper level.

Interaction

  • Marking-menu gestures: press-drag-release selects without waiting for the menu to draw. Experts learn directions, e.g. right-drag up-right = IM. Click-release-click also works for new users.
  • Direction memory: item angles are stable per category across target types. An item that doesn't apply is disabled in place, not removed.
  • Keyboard: number keys / first letters for categories and items. Esc backs out one level.
  • Search-as-you-type at the centre: typing filters all actions for the target into a flat list. The escape hatch for rarely used items.
  • Hover tooltips on items with the full name (labels can be short or icon-first).
  • Optional recently used row in the context slot.

Visuals

  • Icon + short label per item. Scales with UI scale / font set (#193) and uses the pie font size.
  • Animated expand/collapse (fast, under 100 ms, respects a reduced-motion setting).
  • Skinnable colours through colors.xml, like the FS pie.
  • GPU-friendly drawing: one batched draw for rings/arcs through the UI renderer, not per-segment immediate-mode calls.

Architecture

  • Data-driven: a new XUI format (radial_*.xml) declares categories and items, reusing the same registered actions / enable / visible callbacks as the context menus and the FS pie. One action registry, three front-ends that can't drift.
  • One menu definition for all target types: land, self, avatar, object, own/other attachment, HUD, particle. Categories and items are filtered by target, instead of 7 separate hand-laid pies.
  • Target-type priorities decide the context slot and the default highlight.
  • Setting: RightClickMenuStyle with three values: context menu / classic pie (FS) / Slipstream radial. The Firestorm pie stays for people who want it.

Research

  • Marking menus (Kurtenbach & Buxton), Maya hotbox, Blender pie menus, game radial wheels (weapon/emote wheels), and the FS / V1 pie's known pain points.
  • Decide the category set from real usage: count which context-menu items people actually use, e.g. opt-in local usage counters.

Done when

  • Every action reachable in the context menus is reachable in the radial in at most 2 steps, with no "More".
  • Category positions are identical for every target type.
  • Gesture selection works without the menu having drawn.
  • It's selectable in Preferences alongside the FS pie and context menus.

Refs #137, #198

Design our own radial menu as an alternative to the Firestorm port (#137 / #198). It keeps the speed of a pie but drops the classic layout's weakest part: 8 fixed slices, with overflow pushed into nested **"More >"** sub-pies. That turns common actions into a guessing game ("was Mute on page 1 or under More > More?"), and the layout differs per target type. ## Core idea - **Top level = a few fixed categories**, not actions: always in the same place for every target, so muscle memory carries over. Example set, to refine: - **Interact** (touch, sit/stand, open, pay/buy) - **Social** (profile, IM, call, friend, share, teleport) - **Edit / Build** (edit, take, copy, return, delete) - **Look** (zoom, camera, inspect, Lightbox) - **Moderate** (mute/block, derender, report, eject/freeze) - **Wear** (attach/detach/wear, outfit) - **Tools** (texture refresh, reset skeleton, debug, scripts) - one **context slot** for the most likely action on this target, e.g. Sit on a chair, Touch on a scripted object, Profile on an avatar. - Categories with nothing applicable to the target stay in place, drawn disabled, so the layout never shifts. - **Categories expand in place; no replacement pages.** Hovering (or a short drag toward) a category grows it outward in one of two ways: 1. **Outer ring arc:** the category's items fan out as a second ring sector beyond the category's own slice. This suits roughly 3-10 items. Select by continuing the drag outward (marking-menu style). 2. **Sub-radial:** for large categories (e.g. Wear with attachment points), a new radial opens centred on the category, with the parent still visible and dimmed behind it. Leaving back toward the centre collapses it. - Which mode a category uses is decided by item count or declared in XUI, not hard-coded. - **Every item reachable in at most 2 steps** from the centre. No "More", ever. If a category overflows the ring, the ring gets more segments (or two arcs), not a deeper level. ## Interaction - **Marking-menu gestures:** press-drag-release selects without waiting for the menu to draw. Experts learn directions, e.g. right-drag up-right = IM. Click-release-click also works for new users. - **Direction memory:** item angles are stable per category across target types. An item that doesn't apply is disabled in place, not removed. - **Keyboard:** number keys / first letters for categories and items. Esc backs out one level. - **Search-as-you-type** at the centre: typing filters all actions for the target into a flat list. The escape hatch for rarely used items. - **Hover tooltips** on items with the full name (labels can be short or icon-first). - Optional **recently used** row in the context slot. ## Visuals - Icon + short label per item. Scales with UI scale / font set (#193) and uses the pie font size. - Animated expand/collapse (fast, under 100 ms, respects a reduced-motion setting). - Skinnable colours through colors.xml, like the FS pie. - **GPU-friendly drawing:** one batched draw for rings/arcs through the UI renderer, not per-segment immediate-mode calls. ## Architecture - **Data-driven:** a new XUI format (`radial_*.xml`) declares categories and items, reusing the **same registered actions / enable / visible callbacks** as the context menus and the FS pie. One action registry, three front-ends that can't drift. - **One menu definition for all target types:** land, self, avatar, object, own/other attachment, HUD, particle. Categories and items are filtered by target, instead of 7 separate hand-laid pies. - **Target-type priorities** decide the context slot and the default highlight. - **Setting:** `RightClickMenuStyle` with three values: context menu / classic pie (FS) / Slipstream radial. The Firestorm pie stays for people who want it. ## Research - Marking menus (Kurtenbach & Buxton), Maya hotbox, Blender pie menus, game radial wheels (weapon/emote wheels), and the FS / V1 pie's known pain points. - Decide the category set from real usage: count which context-menu items people actually use, e.g. opt-in local usage counters. ## Done when - Every action reachable in the context menus is reachable in the radial in at most 2 steps, with no "More". - Category positions are identical for every target type. - Gesture selection works without the menu having drawn. - It's selectable in Preferences alongside the FS pie and context menus. Refs #137, #198
sky_line added this to the Slipstream project 2026-10-06 15:04:15 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
sky_line/Slipstream#199
No description provided.