use super::action::Action;
use super::binding::{KeyCode, Modifiers, MouseButton};
use super::viewport_binding::{ModifiersMatch, ViewportBinding, ViewportGesture};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum BindingPreset {
ViewportPrimitives,
ViewportAll,
}
pub fn viewport_primitives_bindings() -> Vec<ViewportBinding> {
vec![
ViewportBinding::new(
Action::Orbit,
ViewportGesture::Drag {
button: MouseButton::Left,
modifiers: ModifiersMatch::Exact(Modifiers::NONE),
},
),
ViewportBinding::new(
Action::Pan,
ViewportGesture::Drag {
button: MouseButton::Right,
modifiers: ModifiersMatch::Any,
},
),
ViewportBinding::new(
Action::Pan,
ViewportGesture::Drag {
button: MouseButton::Middle,
modifiers: ModifiersMatch::Contains(Modifiers::SHIFT),
},
),
ViewportBinding::new(
Action::Orbit,
ViewportGesture::Drag {
button: MouseButton::Middle,
modifiers: ModifiersMatch::Exact(Modifiers::NONE),
},
),
ViewportBinding::new(
Action::Orbit,
ViewportGesture::WheelXY {
modifiers: ModifiersMatch::Contains(Modifiers::CTRL),
},
),
ViewportBinding::new(
Action::Pan,
ViewportGesture::WheelXY {
modifiers: ModifiersMatch::Contains(Modifiers::SHIFT),
},
),
ViewportBinding::new(
Action::Zoom,
ViewportGesture::WheelY {
modifiers: ModifiersMatch::Exact(Modifiers::NONE),
},
),
]
}
pub fn viewport_all_bindings() -> Vec<ViewportBinding> {
let none = ModifiersMatch::Exact(Modifiers::NONE);
let any = ModifiersMatch::Any;
let mut bindings = viewport_primitives_bindings();
bindings.retain(|b| {
!matches!(b.gesture, ViewportGesture::Drag { button: MouseButton::Left, .. })
});
bindings.push(ViewportBinding::new(
Action::BeginMove,
ViewportGesture::KeyPress { key: KeyCode::G, modifiers: none },
));
bindings.push(ViewportBinding::new(
Action::BeginRotate,
ViewportGesture::KeyPress { key: KeyCode::R, modifiers: none },
));
bindings.push(ViewportBinding::new(
Action::BeginScale,
ViewportGesture::KeyPress { key: KeyCode::S, modifiers: none },
));
bindings.push(ViewportBinding::new(
Action::OpenAddMenu,
ViewportGesture::KeyPress {
key: KeyCode::A,
modifiers: ModifiersMatch::Contains(Modifiers::SHIFT),
},
));
bindings.push(ViewportBinding::new(
Action::DeleteSelected,
ViewportGesture::KeyPress { key: KeyCode::X, modifiers: none },
));
bindings.push(ViewportBinding::new(
Action::FocusObject,
ViewportGesture::KeyPress { key: KeyCode::F, modifiers: none },
));
bindings.push(ViewportBinding::new(
Action::ResetView,
ViewportGesture::KeyPress { key: KeyCode::R, modifiers: none },
));
bindings.push(ViewportBinding::new(
Action::ToggleWireframe,
ViewportGesture::KeyPress { key: KeyCode::W, modifiers: none },
));
bindings.push(ViewportBinding::new(
Action::CycleGizmoMode,
ViewportGesture::KeyPress { key: KeyCode::Tab, modifiers: none },
));
bindings.push(ViewportBinding::new(
Action::ToggleGizmoSpace,
ViewportGesture::KeyPress { key: KeyCode::Backtick, modifiers: none },
));
bindings.push(ViewportBinding::new(
Action::EnterFlyMode,
ViewportGesture::KeyPress {
key: KeyCode::Backtick,
modifiers: ModifiersMatch::Contains(Modifiers::SHIFT),
},
));
bindings.push(ViewportBinding::new(
Action::FlyForward,
ViewportGesture::KeyHold { key: KeyCode::W, modifiers: any },
));
bindings.push(ViewportBinding::new(
Action::FlyBackward,
ViewportGesture::KeyHold { key: KeyCode::S, modifiers: any },
));
bindings.push(ViewportBinding::new(
Action::FlyLeft,
ViewportGesture::KeyHold { key: KeyCode::A, modifiers: any },
));
bindings.push(ViewportBinding::new(
Action::FlyRight,
ViewportGesture::KeyHold { key: KeyCode::D, modifiers: any },
));
bindings.push(ViewportBinding::new(
Action::FlyUp,
ViewportGesture::KeyHold { key: KeyCode::E, modifiers: any },
));
bindings.push(ViewportBinding::new(
Action::FlyDown,
ViewportGesture::KeyHold { key: KeyCode::Q, modifiers: any },
));
bindings.push(ViewportBinding::new(
Action::ConstrainX,
ViewportGesture::KeyPress { key: KeyCode::X, modifiers: none },
));
bindings.push(ViewportBinding::new(
Action::ConstrainY,
ViewportGesture::KeyPress { key: KeyCode::Y, modifiers: none },
));
bindings.push(ViewportBinding::new(
Action::ConstrainZ,
ViewportGesture::KeyPress { key: KeyCode::Z, modifiers: none },
));
bindings.push(ViewportBinding::new(
Action::ExcludeX,
ViewportGesture::KeyPress {
key: KeyCode::X,
modifiers: ModifiersMatch::Contains(Modifiers::SHIFT),
},
));
bindings.push(ViewportBinding::new(
Action::ExcludeY,
ViewportGesture::KeyPress {
key: KeyCode::Y,
modifiers: ModifiersMatch::Contains(Modifiers::SHIFT),
},
));
bindings.push(ViewportBinding::new(
Action::ExcludeZ,
ViewportGesture::KeyPress {
key: KeyCode::Z,
modifiers: ModifiersMatch::Contains(Modifiers::SHIFT),
},
));
bindings.push(ViewportBinding::new(
Action::Confirm,
ViewportGesture::KeyPress { key: KeyCode::Enter, modifiers: none },
));
bindings.push(ViewportBinding::new(
Action::Cancel,
ViewportGesture::KeyPress { key: KeyCode::Escape, modifiers: none },
));
bindings.push(ViewportBinding::new(
Action::Redo,
ViewportGesture::KeyPress {
key: KeyCode::Z,
modifiers: ModifiersMatch::Contains(Modifiers::CTRL_SHIFT),
},
));
bindings.push(ViewportBinding::new(
Action::Undo,
ViewportGesture::KeyPress {
key: KeyCode::Z,
modifiers: ModifiersMatch::Contains(Modifiers::CTRL),
},
));
bindings.push(ViewportBinding::new(
Action::Redo,
ViewportGesture::KeyPress {
key: KeyCode::Y,
modifiers: ModifiersMatch::Contains(Modifiers::CTRL),
},
));
bindings
}