mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2026-09-29 09:48:12 +08:00
Add input hints to interactions in the node graph (#2415)
* node_graph: add hints in status bar * allow in-progress interactions * Fix node graph hints not restoring after panning operation * Code review --------- Co-authored-by: Keavon Chambers <keavon@keavon.com>
This commit is contained in:
co-authored by
Keavon Chambers
parent
3c1ec45188
commit
b38d725d98
@@ -263,6 +263,8 @@ impl MessageHandler<ToolMessage, ToolMessageData<'_>> for ToolMessageHandler {
|
||||
let tool_data = &mut self.tool_state.tool_data;
|
||||
|
||||
if let Some(tool) = tool_data.tools.get_mut(&tool_type) {
|
||||
let graph_view_overlay_open = document.graph_view_overlay_open();
|
||||
|
||||
if tool_type == tool_data.active_tool_type {
|
||||
let mut data = ToolActionHandlerData {
|
||||
document,
|
||||
@@ -275,7 +277,10 @@ impl MessageHandler<ToolMessage, ToolMessageData<'_>> for ToolMessageHandler {
|
||||
preferences,
|
||||
};
|
||||
if matches!(tool_message, ToolMessage::UpdateHints) {
|
||||
if self.transform_layer_handler.is_transforming() {
|
||||
if graph_view_overlay_open {
|
||||
// When graph view is open, forward the hint update to the node graph handler
|
||||
responses.add(NodeGraphMessage::UpdateHints);
|
||||
} else if self.transform_layer_handler.is_transforming() {
|
||||
self.transform_layer_handler.hints(responses);
|
||||
} else {
|
||||
tool.process_message(ToolMessage::UpdateHints, responses, &mut data)
|
||||
|
||||
@@ -1442,7 +1442,7 @@ impl Fsm for PathToolFsmState {
|
||||
fn update_hints(&self, responses: &mut VecDeque<Message>) {
|
||||
let hint_data = match self {
|
||||
PathToolFsmState::Ready => HintData(vec![
|
||||
HintGroup(vec![HintInfo::mouse(MouseMotion::Lmb, "Select Point"), HintInfo::keys([Key::Shift], "Extend Selection").prepend_plus()]),
|
||||
HintGroup(vec![HintInfo::mouse(MouseMotion::Lmb, "Select Point"), HintInfo::keys([Key::Shift], "Extend").prepend_plus()]),
|
||||
HintGroup(vec![HintInfo::mouse(MouseMotion::LmbDrag, "Select Area"), HintInfo::keys([Key::Control], "Lasso").prepend_plus()]),
|
||||
HintGroup(vec![HintInfo::mouse(MouseMotion::Lmb, "Insert Point on Segment")]),
|
||||
// TODO: Only show if at least one anchor is selected, and dynamically show either "Smooth" or "Sharp" based on the current state
|
||||
|
||||
@@ -1497,11 +1497,10 @@ impl Fsm for SelectToolFsmState {
|
||||
match self {
|
||||
SelectToolFsmState::Ready { selection } => {
|
||||
let hint_data = HintData(vec![
|
||||
HintGroup(vec![HintInfo::mouse(MouseMotion::LmbDrag, "Drag Selected")]),
|
||||
HintGroup({
|
||||
let mut hints = vec![HintInfo::mouse(MouseMotion::Lmb, "Select Object"), HintInfo::keys([Key::Shift], "Extend Selection").prepend_plus()];
|
||||
let mut hints = vec![HintInfo::mouse(MouseMotion::Lmb, "Select Object"), HintInfo::keys([Key::Shift], "Extend").prepend_plus()];
|
||||
if *selection == NestedSelectionBehavior::Shallowest {
|
||||
hints.extend([HintInfo::keys([Key::Accel], "Deepest").prepend_plus(), HintInfo::mouse(MouseMotion::LmbDouble, "Deepen Selection")]);
|
||||
hints.extend([HintInfo::keys([Key::Accel], "Deepest").prepend_plus(), HintInfo::mouse(MouseMotion::LmbDouble, "Deepen")]);
|
||||
}
|
||||
hints
|
||||
}),
|
||||
@@ -1511,6 +1510,8 @@ impl Fsm for SelectToolFsmState {
|
||||
HintInfo::keys([Key::Alt], "Subtract").prepend_plus(),
|
||||
HintInfo::keys([Key::Control], "Lasso").prepend_plus(),
|
||||
]),
|
||||
// TODO: Make all the following hints only appear if there is at least one selected layer
|
||||
HintGroup(vec![HintInfo::mouse(MouseMotion::LmbDrag, "Drag Selected")]),
|
||||
HintGroup(vec![HintInfo::multi_keys([[Key::KeyG], [Key::KeyR], [Key::KeyS]], "Grab/Rotate/Scale Selected")]),
|
||||
HintGroup(vec![
|
||||
HintInfo::arrow_keys("Nudge Selected"),
|
||||
@@ -1546,7 +1547,7 @@ impl Fsm for SelectToolFsmState {
|
||||
HintGroup(vec![HintInfo::keys([Key::Shift], "Extend"), HintInfo::keys([Key::Alt], "Subtract")]),
|
||||
// TODO: Re-select deselected layers during drag when Shift is pressed, and re-deselect if Shift is released before drag ends.
|
||||
// TODO: (See https://discord.com/channels/731730685944922173/1216976541947531264/1321360311298818048)
|
||||
// HintGroup(vec![HintInfo::keys([Key::Shift], "Extend Selection")])
|
||||
// HintGroup(vec![HintInfo::keys([Key::Shift], "Extend")])
|
||||
]);
|
||||
responses.add(FrontendMessage::UpdateInputHints { hint_data });
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user