Add cursors and hints to global viewport navigation (#487)

* Add global nav cursors

* Update hints on global navigation

Co-authored-by: Keavon Chambers <keavon@keavon.com>
This commit is contained in:
0HyperCube 2022-01-16 19:46:41 +00:00 committed by Keavon Chambers
parent 94ecbf7112
commit b17432b1c4
2 changed files with 38 additions and 1 deletions

View File

@ -1,7 +1,10 @@
use crate::consts::{VIEWPORT_ROTATE_SNAP_INTERVAL, VIEWPORT_SCROLL_RATE, VIEWPORT_ZOOM_LEVELS, VIEWPORT_ZOOM_MOUSE_RATE, VIEWPORT_ZOOM_SCALE_MAX, VIEWPORT_ZOOM_SCALE_MIN, VIEWPORT_ZOOM_WHEEL_RATE};
use crate::frontend::utility_types::MouseCursorIcon;
use crate::input::keyboard::Key;
use crate::input::mouse::{ViewportBounds, ViewportPosition};
use crate::input::InputPreprocessorMessageHandler;
use crate::message_prelude::*;
use crate::misc::{HintData, HintGroup, HintInfo, KeysGroup};
use graphene::document::Document;
use graphene::Operation as DocumentOperation;
@ -221,6 +224,19 @@ impl MessageHandler<MovementMessage, (&Document, &InputPreprocessorMessageHandle
self.mouse_position = ipp.mouse.position;
}
RotateCanvasBegin => {
responses.push_back(FrontendMessage::UpdateMouseCursor { cursor: MouseCursorIcon::Default }.into());
responses.push_back(
FrontendMessage::UpdateInputHints {
hint_data: HintData(vec![HintGroup(vec![HintInfo {
key_groups: vec![KeysGroup(vec![Key::KeyControl])],
mouse: None,
label: String::from("Snap 15°"),
plus: false,
}])]),
}
.into(),
);
self.tilting = true;
self.mouse_position = ipp.mouse.position;
}
@ -241,6 +257,8 @@ impl MessageHandler<MovementMessage, (&Document, &InputPreprocessorMessageHandle
self.tilt = self.snapped_angle();
self.zoom = self.snapped_scale();
responses.push_back(ToolMessage::DocumentIsDirty.into());
responses.push_back(ToolMessage::UpdateCursor.into());
responses.push_back(ToolMessage::UpdateHints.into());
self.snap_tilt = false;
self.snap_tilt_released = false;
self.snap_zoom = false;
@ -256,6 +274,9 @@ impl MessageHandler<MovementMessage, (&Document, &InputPreprocessorMessageHandle
self.create_document_transform(&ipp.viewport_bounds, responses);
}
TranslateCanvasBegin => {
responses.push_back(FrontendMessage::UpdateMouseCursor { cursor: MouseCursorIcon::Grabbing }.into());
responses.push_back(FrontendMessage::UpdateInputHints { hint_data: HintData(Vec::new()) }.into());
self.panning = true;
self.mouse_position = ipp.mouse.position;
}
@ -284,6 +305,19 @@ impl MessageHandler<MovementMessage, (&Document, &InputPreprocessorMessageHandle
responses.push_back(SetCanvasZoom { zoom_factor: self.zoom * zoom_factor }.into());
}
ZoomCanvasBegin => {
responses.push_back(FrontendMessage::UpdateMouseCursor { cursor: MouseCursorIcon::ZoomIn }.into());
responses.push_back(
FrontendMessage::UpdateInputHints {
hint_data: HintData(vec![HintGroup(vec![HintInfo {
key_groups: vec![KeysGroup(vec![Key::KeyControl])],
mouse: None,
label: String::from("Snap Increments"),
plus: false,
}])]),
}
.into(),
);
self.zooming = true;
self.mouse_position = ipp.mouse.position;
}

View File

@ -102,7 +102,10 @@ impl MessageHandler<ToolMessage, (&DocumentMessageHandler, &InputPreprocessorMes
update_working_colors(document_data, responses);
}
tool_message => {
let tool_type = message_to_tool_type(&tool_message);
let tool_type = match &tool_message {
UpdateCursor | UpdateHints => self.tool_state.tool_data.active_tool_type,
tool_message => message_to_tool_type(tool_message),
};
let document_data = &self.tool_state.document_tool_data;
let tool_data = &mut self.tool_state.tool_data;