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::NumericBackspace,
ViewportGesture::KeyPress {
key: KeyCode::Backspace,
modifiers: none,
},
));
bindings.push(ViewportBinding::new(
Action::NumericNextAxis,
ViewportGesture::KeyPress {
key: KeyCode::Tab,
modifiers: none,
},
));
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::CyclePivotModeForward,
ViewportGesture::KeyPress {
key: KeyCode::LeftBracket,
modifiers: none,
},
));
bindings.push(ViewportBinding::new(
Action::CyclePivotModeBackward,
ViewportGesture::KeyPress {
key: KeyCode::RightBracket,
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
}