fix: NAVVCUBE and UCSICON commands now properly toggle visibility

NAVVCUBE: propagate show_viewcube flag through ViewportPane and the wgpu
Primitive so the ViewCube pipeline skips upload/render when hidden.
UCSICON: bare command (no subcommand) now toggles current state instead
of printing usage info.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Hakan SevenandClaude Sonnet 4.6 committed 2026-04-24 01:31:52 +03:00
1 parent 1ec53a4730
commit 5f3182fa9a
4 files changed
+41 -16

No files matched your search

+9 -6
View File
@@ -25,18 +25,19 @@ pub enum ViewportPaneMode {
pub struct ViewportPane<'a> {
pub scene: &'a Scene,
pub mode: ViewportPaneMode,
pub show_viewcube: bool,
}
impl<'a> ViewportPane<'a> {
pub fn model(scene: &'a Scene) -> Self {
Self { scene, mode: ViewportPaneMode::Model }
pub fn model(scene: &'a Scene, show_viewcube: bool) -> Self {
Self { scene, mode: ViewportPaneMode::Model, show_viewcube }
}
/// One paper-space viewport: model content rendered through its own camera.
/// See [`ViewportPaneMode::Paper`] for why this is currently unused.
#[allow(dead_code)]
pub fn paper(scene: &'a Scene, handle: Handle) -> Self {
Self { scene, mode: ViewportPaneMode::Paper { handle } }
Self { scene, mode: ViewportPaneMode::Paper { handle }, show_viewcube: false }
}
}
@@ -106,7 +107,7 @@ impl<'a, Msg: std::fmt::Debug + Clone> shader::Program<Msg> for ViewportPane<'a>
) -> Self::Primitive {
match &self.mode {
ViewportPaneMode::Model => {
self.scene.build_primitive(state.hover_region, bounds)
self.scene.build_primitive(state.hover_region, bounds, self.show_viewcube)
}
ViewportPaneMode::Paper { handle } => {
self.scene.build_viewport_primitive(*handle, state.hover_region, bounds)
@@ -122,8 +123,10 @@ impl<'a, Msg: std::fmt::Debug + Clone> shader::Program<Msg> for ViewportPane<'a>
cursor: mouse::Cursor,
) -> Option<iced::widget::Action<Msg>> {
// ViewCube hover only makes sense in the full model-space view.
if matches!(self.mode, ViewportPaneMode::Model) {
if matches!(self.mode, ViewportPaneMode::Model) && self.show_viewcube {
self.scene.update_viewcube_state(state, bounds, cursor);
} else {
state.hover_region = None;
}
let _ = event;
None
@@ -135,7 +138,7 @@ impl<'a, Msg: std::fmt::Debug + Clone> shader::Program<Msg> for ViewportPane<'a>
_b: Rectangle,
_c: mouse::Cursor,
) -> mouse::Interaction {
if matches!(self.mode, ViewportPaneMode::Model) {
if matches!(self.mode, ViewportPaneMode::Model) && self.show_viewcube {
self.scene.viewcube_mouse_interaction(state)
} else {
mouse::Interaction::default()