From 079caf11a817b5bc73bd9a0e3024fd4b5bfcbee4 Mon Sep 17 00:00:00 2001 From: asyncth Date: Sat, 15 Jan 2022 14:36:34 +0000 Subject: [PATCH 01/12] Add FrontendMouseCursor and DisplayMouseCursor --- editor/src/frontend/frontend_message.rs | 3 ++- editor/src/frontend/utility_types.rs | 9 +++++++++ frontend/src/dispatcher/js-messages.ts | 7 +++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/editor/src/frontend/frontend_message.rs b/editor/src/frontend/frontend_message.rs index b54d3f45483..9bfc00b63b5 100644 --- a/editor/src/frontend/frontend_message.rs +++ b/editor/src/frontend/frontend_message.rs @@ -1,4 +1,4 @@ -use super::utility_types::FrontendDocumentDetails; +use super::utility_types::{FrontendDocumentDetails, FrontendMouseCursor}; use crate::document::layer_panel::{LayerPanelEntry, RawBuffer}; use crate::message_prelude::*; use crate::misc::HintData; @@ -18,6 +18,7 @@ pub enum FrontendMessage { DisplayDialogError { title: String, description: String }, DisplayDialogPanic { panic_info: String, title: String, description: String }, DisplayDocumentLayerTreeStructure { data_buffer: RawBuffer }, + DisplayMouseCursor { cursor: FrontendMouseCursor }, // Trigger prefix: cause a browser API to do something TriggerFileDownload { document: String, name: String }, diff --git a/editor/src/frontend/utility_types.rs b/editor/src/frontend/utility_types.rs index d52888a3d37..e442a1d172a 100644 --- a/editor/src/frontend/utility_types.rs +++ b/editor/src/frontend/utility_types.rs @@ -6,3 +6,12 @@ pub struct FrontendDocumentDetails { pub name: String, pub id: u64, } + +#[derive(Clone, Copy, Debug, Eq, Deserialize, PartialEq, Serialize)] +pub enum FrontendMouseCursor { + Default, + ZoomIn, + ZoomOut, + Grabbing, + Crosshair, +} diff --git a/frontend/src/dispatcher/js-messages.ts b/frontend/src/dispatcher/js-messages.ts index 671ea7017f6..1df7c4f6433 100644 --- a/frontend/src/dispatcher/js-messages.ts +++ b/frontend/src/dispatcher/js-messages.ts @@ -39,6 +39,8 @@ export class FrontendDocumentDetails extends DocumentDetails { readonly id!: BigInt; } +export type FrontendMouseCursor = string; + export class UpdateOpenDocumentsList extends JsMessage { @Type(() => FrontendDocumentDetails) readonly open_documents!: FrontendDocumentDetails[]; @@ -167,6 +169,10 @@ export class DisplayConfirmationToCloseAllDocuments extends JsMessage {} export class DisplayDialogAboutGraphite extends JsMessage {} +export class DisplayMouseCursor extends JsMessage { + readonly cursor!: FrontendMouseCursor; +} + export class UpdateDocumentArtwork extends JsMessage { readonly svg!: string; } @@ -383,6 +389,7 @@ export const messageConstructors: Record = { DisplayConfirmationToCloseDocument, DisplayConfirmationToCloseAllDocuments, DisplayDialogAboutGraphite, + DisplayMouseCursor, TriggerIndexedDbWriteDocument, TriggerIndexedDbRemoveDocument, UpdateDocumentArtboards, From 7161243bbef1794fb6614cf03a49cf76c12d94ad Mon Sep 17 00:00:00 2001 From: asyncth Date: Sat, 15 Jan 2022 15:55:08 +0000 Subject: [PATCH 02/12] Add update_cursor method to the Fsm trait and implement it for all tools --- editor/src/viewport_tools/tool.rs | 1 + editor/src/viewport_tools/tool_message.rs | 1 + .../src/viewport_tools/tool_message_handler.rs | 5 +++-- editor/src/viewport_tools/tools/ellipse.rs | 16 ++++++++++++++++ editor/src/viewport_tools/tools/eyedropper.rs | 11 +++++++++++ editor/src/viewport_tools/tools/fill.rs | 11 +++++++++++ editor/src/viewport_tools/tools/line.rs | 16 ++++++++++++++++ editor/src/viewport_tools/tools/navigate.rs | 11 +++++++++++ editor/src/viewport_tools/tools/path.rs | 11 +++++++++++ editor/src/viewport_tools/tools/pen.rs | 11 +++++++++++ editor/src/viewport_tools/tools/rectangle.rs | 16 ++++++++++++++++ editor/src/viewport_tools/tools/select.rs | 11 +++++++++++ editor/src/viewport_tools/tools/shape.rs | 16 ++++++++++++++++ 13 files changed, 135 insertions(+), 2 deletions(-) diff --git a/editor/src/viewport_tools/tool.rs b/editor/src/viewport_tools/tool.rs index c96e7560464..f5752872713 100644 --- a/editor/src/viewport_tools/tool.rs +++ b/editor/src/viewport_tools/tool.rs @@ -27,6 +27,7 @@ pub trait Fsm { ) -> Self; fn update_hints(&self, responses: &mut VecDeque); + fn update_cursor(&self, responses: &mut VecDeque); } #[derive(Debug, Clone)] diff --git a/editor/src/viewport_tools/tool_message.rs b/editor/src/viewport_tools/tool_message.rs index 2b7a8986d7e..34ed73d0802 100644 --- a/editor/src/viewport_tools/tool_message.rs +++ b/editor/src/viewport_tools/tool_message.rs @@ -49,5 +49,6 @@ pub enum ToolMessage { #[child] Shape(ShapeMessage), SwapColors, + UpdateCursor, UpdateHints, } diff --git a/editor/src/viewport_tools/tool_message_handler.rs b/editor/src/viewport_tools/tool_message_handler.rs index 896318c773e..7936c239b6a 100644 --- a/editor/src/viewport_tools/tool_message_handler.rs +++ b/editor/src/viewport_tools/tool_message_handler.rs @@ -31,12 +31,13 @@ impl MessageHandler MessageHandler> for Ellipse { return; } + if action == ToolMessage::UpdateCursor { + self.fsm_state.update_cursor(responses); + return; + } + let new_state = self.fsm_state.transition(action, data.0, data.1, &mut self.data, data.2, responses); if self.fsm_state != new_state { self.fsm_state = new_state; self.fsm_state.update_hints(responses); + self.fsm_state.update_cursor(responses); } } @@ -177,4 +184,13 @@ impl Fsm for EllipseToolFsmState { responses.push_back(FrontendMessage::UpdateInputHints { hint_data }.into()); } + + fn update_cursor(&self, responses: &mut VecDeque) { + responses.push_back( + FrontendMessage::DisplayMouseCursor { + cursor: FrontendMouseCursor::Crosshair, + } + .into(), + ); + } } diff --git a/editor/src/viewport_tools/tools/eyedropper.rs b/editor/src/viewport_tools/tools/eyedropper.rs index 48561b76b8a..ab63a08edd2 100644 --- a/editor/src/viewport_tools/tools/eyedropper.rs +++ b/editor/src/viewport_tools/tools/eyedropper.rs @@ -1,5 +1,6 @@ use crate::consts::SELECTION_TOLERANCE; use crate::document::DocumentMessageHandler; +use crate::frontend::utility_types::FrontendMouseCursor; use crate::input::keyboard::MouseMotion; use crate::input::InputPreprocessorMessageHandler; use crate::message_prelude::*; @@ -34,11 +35,17 @@ impl<'a> MessageHandler> for Eyedropper { return; } + if action == ToolMessage::UpdateCursor { + self.fsm_state.update_cursor(responses); + return; + } + let new_state = self.fsm_state.transition(action, data.0, data.1, &mut self.data, data.2, responses); if self.fsm_state != new_state { self.fsm_state = new_state; self.fsm_state.update_hints(responses); + self.fsm_state.update_cursor(responses); } } @@ -127,4 +134,8 @@ impl Fsm for EyedropperToolFsmState { responses.push_back(FrontendMessage::UpdateInputHints { hint_data }.into()); } + + fn update_cursor(&self, responses: &mut VecDeque) { + responses.push_back(FrontendMessage::DisplayMouseCursor { cursor: FrontendMouseCursor::Default }.into()); + } } diff --git a/editor/src/viewport_tools/tools/fill.rs b/editor/src/viewport_tools/tools/fill.rs index 2727d06af2a..3497f69e481 100644 --- a/editor/src/viewport_tools/tools/fill.rs +++ b/editor/src/viewport_tools/tools/fill.rs @@ -1,5 +1,6 @@ use crate::consts::SELECTION_TOLERANCE; use crate::document::DocumentMessageHandler; +use crate::frontend::utility_types::FrontendMouseCursor; use crate::input::keyboard::MouseMotion; use crate::input::InputPreprocessorMessageHandler; use crate::message_prelude::*; @@ -34,11 +35,17 @@ impl<'a> MessageHandler> for Fill { return; } + if action == ToolMessage::UpdateCursor { + self.fsm_state.update_cursor(responses); + return; + } + let new_state = self.fsm_state.transition(action, data.0, data.1, &mut self.data, data.2, responses); if self.fsm_state != new_state { self.fsm_state = new_state; self.fsm_state.update_hints(responses); + self.fsm_state.update_cursor(responses); } } @@ -121,4 +128,8 @@ impl Fsm for FillToolFsmState { responses.push_back(FrontendMessage::UpdateInputHints { hint_data }.into()); } + + fn update_cursor(&self, responses: &mut VecDeque) { + responses.push_back(FrontendMessage::DisplayMouseCursor { cursor: FrontendMouseCursor::Default }.into()); + } } diff --git a/editor/src/viewport_tools/tools/line.rs b/editor/src/viewport_tools/tools/line.rs index 11627baa820..df067f50264 100644 --- a/editor/src/viewport_tools/tools/line.rs +++ b/editor/src/viewport_tools/tools/line.rs @@ -1,5 +1,6 @@ use crate::consts::LINE_ROTATE_SNAP_ANGLE; use crate::document::DocumentMessageHandler; +use crate::frontend::utility_types::FrontendMouseCursor; use crate::input::keyboard::{Key, MouseMotion}; use crate::input::mouse::ViewportPosition; use crate::input::InputPreprocessorMessageHandler; @@ -38,11 +39,17 @@ impl<'a> MessageHandler> for Line { return; } + if action == ToolMessage::UpdateCursor { + self.fsm_state.update_cursor(responses); + return; + } + let new_state = self.fsm_state.transition(action, data.0, data.1, &mut self.data, data.2, responses); if self.fsm_state != new_state { self.fsm_state = new_state; self.fsm_state.update_hints(responses); + self.fsm_state.update_cursor(responses); } } @@ -207,6 +214,15 @@ impl Fsm for LineToolFsmState { responses.push_back(FrontendMessage::UpdateInputHints { hint_data }.into()); } + + fn update_cursor(&self, responses: &mut VecDeque) { + responses.push_back( + FrontendMessage::DisplayMouseCursor { + cursor: FrontendMouseCursor::Crosshair, + } + .into(), + ); + } } fn generate_transform(data: &mut LineToolData, lock: bool, snap: bool, center: bool) -> Message { diff --git a/editor/src/viewport_tools/tools/navigate.rs b/editor/src/viewport_tools/tools/navigate.rs index 527d3e9299c..b8825044c9b 100644 --- a/editor/src/viewport_tools/tools/navigate.rs +++ b/editor/src/viewport_tools/tools/navigate.rs @@ -1,4 +1,5 @@ use crate::document::DocumentMessageHandler; +use crate::frontend::utility_types::FrontendMouseCursor; use crate::input::keyboard::{Key, MouseMotion}; use crate::input::InputPreprocessorMessageHandler; use crate::message_prelude::*; @@ -34,11 +35,17 @@ impl<'a> MessageHandler> for Navigate { return; } + if action == ToolMessage::UpdateCursor { + self.fsm_state.update_cursor(responses); + return; + } + let new_state = self.fsm_state.transition(action, data.0, data.1, &mut self.data, data.2, responses); if self.fsm_state != new_state { self.fsm_state = new_state; self.fsm_state.update_hints(responses); + self.fsm_state.update_cursor(responses); } } @@ -211,4 +218,8 @@ impl Fsm for NavigateToolFsmState { responses.push_back(FrontendMessage::UpdateInputHints { hint_data }.into()); } + + fn update_cursor(&self, responses: &mut VecDeque) { + responses.push_back(FrontendMessage::DisplayMouseCursor { cursor: FrontendMouseCursor::Default }.into()); + } } diff --git a/editor/src/viewport_tools/tools/path.rs b/editor/src/viewport_tools/tools/path.rs index b0c6f5fa0de..20d0e09ef26 100644 --- a/editor/src/viewport_tools/tools/path.rs +++ b/editor/src/viewport_tools/tools/path.rs @@ -1,6 +1,7 @@ use crate::consts::{COLOR_ACCENT, VECTOR_MANIPULATOR_ANCHOR_MARKER_SIZE}; use crate::document::utility_types::{VectorManipulatorSegment, VectorManipulatorShape}; use crate::document::DocumentMessageHandler; +use crate::frontend::utility_types::FrontendMouseCursor; use crate::input::keyboard::{Key, MouseMotion}; use crate::input::InputPreprocessorMessageHandler; use crate::message_prelude::*; @@ -41,11 +42,17 @@ impl<'a> MessageHandler> for Path { return; } + if action == ToolMessage::UpdateCursor { + self.fsm_state.update_cursor(responses); + return; + } + let new_state = self.fsm_state.transition(action, data.0, data.1, &mut self.data, data.2, responses); if self.fsm_state != new_state { self.fsm_state = new_state; self.fsm_state.update_hints(responses); + self.fsm_state.update_cursor(responses); } } @@ -476,6 +483,10 @@ impl Fsm for PathToolFsmState { responses.push_back(FrontendMessage::UpdateInputHints { hint_data }.into()); } + + fn update_cursor(&self, responses: &mut VecDeque) { + responses.push_back(FrontendMessage::DisplayMouseCursor { cursor: FrontendMouseCursor::Default }.into()); + } } struct VectorManipulatorTypes { diff --git a/editor/src/viewport_tools/tools/pen.rs b/editor/src/viewport_tools/tools/pen.rs index 22bd6cc6147..45fbf1fa0ed 100644 --- a/editor/src/viewport_tools/tools/pen.rs +++ b/editor/src/viewport_tools/tools/pen.rs @@ -1,4 +1,5 @@ use crate::document::DocumentMessageHandler; +use crate::frontend::utility_types::FrontendMouseCursor; use crate::input::keyboard::{Key, MouseMotion}; use crate::input::InputPreprocessorMessageHandler; use crate::message_prelude::*; @@ -44,11 +45,17 @@ impl<'a> MessageHandler> for Pen { return; } + if action == ToolMessage::UpdateCursor { + self.fsm_state.update_cursor(responses); + return; + } + let new_state = self.fsm_state.transition(action, data.0, data.1, &mut self.data, data.2, responses); if self.fsm_state != new_state { self.fsm_state = new_state; self.fsm_state.update_hints(responses); + self.fsm_state.update_cursor(responses); } } @@ -193,6 +200,10 @@ impl Fsm for PenToolFsmState { responses.push_back(FrontendMessage::UpdateInputHints { hint_data }.into()); } + + fn update_cursor(&self, responses: &mut VecDeque) { + responses.push_back(FrontendMessage::DisplayMouseCursor { cursor: FrontendMouseCursor::Default }.into()); + } } fn remove_preview(data: &PenToolData) -> Message { diff --git a/editor/src/viewport_tools/tools/rectangle.rs b/editor/src/viewport_tools/tools/rectangle.rs index 3687995d4a2..57f295c3283 100644 --- a/editor/src/viewport_tools/tools/rectangle.rs +++ b/editor/src/viewport_tools/tools/rectangle.rs @@ -1,5 +1,6 @@ use super::shared::resize::Resize; use crate::document::DocumentMessageHandler; +use crate::frontend::utility_types::FrontendMouseCursor; use crate::input::keyboard::{Key, MouseMotion}; use crate::input::InputPreprocessorMessageHandler; use crate::message_prelude::*; @@ -35,11 +36,17 @@ impl<'a> MessageHandler> for Rectangle { return; } + if action == ToolMessage::UpdateCursor { + self.fsm_state.update_cursor(responses); + return; + } + let new_state = self.fsm_state.transition(action, data.0, data.1, &mut self.data, data.2, responses); if self.fsm_state != new_state { self.fsm_state = new_state; self.fsm_state.update_hints(responses); + self.fsm_state.update_cursor(responses); } } @@ -177,4 +184,13 @@ impl Fsm for RectangleToolFsmState { responses.push_back(FrontendMessage::UpdateInputHints { hint_data }.into()); } + + fn update_cursor(&self, responses: &mut VecDeque) { + responses.push_back( + FrontendMessage::DisplayMouseCursor { + cursor: FrontendMouseCursor::Crosshair, + } + .into(), + ); + } } diff --git a/editor/src/viewport_tools/tools/select.rs b/editor/src/viewport_tools/tools/select.rs index 4823332516e..06e46715006 100644 --- a/editor/src/viewport_tools/tools/select.rs +++ b/editor/src/viewport_tools/tools/select.rs @@ -1,6 +1,7 @@ use crate::consts::{COLOR_ACCENT, SELECTION_DRAG_ANGLE, SELECTION_TOLERANCE}; use crate::document::utility_types::{AlignAggregate, AlignAxis, FlipAxis}; use crate::document::DocumentMessageHandler; +use crate::frontend::utility_types::FrontendMouseCursor; use crate::input::keyboard::{Key, MouseMotion}; use crate::input::mouse::ViewportPosition; use crate::input::InputPreprocessorMessageHandler; @@ -46,11 +47,17 @@ impl<'a> MessageHandler> for Select { return; } + if action == ToolMessage::UpdateCursor { + self.fsm_state.update_cursor(responses); + return; + } + let new_state = self.fsm_state.transition(action, data.0, data.1, &mut self.data, data.2, responses); if self.fsm_state != new_state { self.fsm_state = new_state; self.fsm_state.update_hints(responses); + self.fsm_state.update_cursor(responses); } } @@ -420,4 +427,8 @@ impl Fsm for SelectToolFsmState { responses.push_back(FrontendMessage::UpdateInputHints { hint_data }.into()); } + + fn update_cursor(&self, responses: &mut VecDeque) { + responses.push_back(FrontendMessage::DisplayMouseCursor { cursor: FrontendMouseCursor::Default }.into()); + } } diff --git a/editor/src/viewport_tools/tools/shape.rs b/editor/src/viewport_tools/tools/shape.rs index 49178bf75cc..792244fccfb 100644 --- a/editor/src/viewport_tools/tools/shape.rs +++ b/editor/src/viewport_tools/tools/shape.rs @@ -1,5 +1,6 @@ use super::shared::resize::Resize; use crate::document::DocumentMessageHandler; +use crate::frontend::utility_types::FrontendMouseCursor; use crate::input::keyboard::{Key, MouseMotion}; use crate::input::InputPreprocessorMessageHandler; use crate::message_prelude::*; @@ -36,11 +37,17 @@ impl<'a> MessageHandler> for Shape { return; } + if action == ToolMessage::UpdateCursor { + self.fsm_state.update_cursor(responses); + return; + } + let new_state = self.fsm_state.transition(action, data.0, data.1, &mut self.data, data.2, responses); if self.fsm_state != new_state { self.fsm_state = new_state; self.fsm_state.update_hints(responses); + self.fsm_state.update_cursor(responses); } } @@ -185,4 +192,13 @@ impl Fsm for ShapeToolFsmState { responses.push_back(FrontendMessage::UpdateInputHints { hint_data }.into()); } + + fn update_cursor(&self, responses: &mut VecDeque) { + responses.push_back( + FrontendMessage::DisplayMouseCursor { + cursor: FrontendMouseCursor::Crosshair, + } + .into(), + ); + } } From 98d25858378068cf012312368c3a406d310b5db8 Mon Sep 17 00:00:00 2001 From: asyncth Date: Sat, 15 Jan 2022 16:05:14 +0000 Subject: [PATCH 03/12] Rename DisplayMouseCursor to UpdateMouseCursor --- editor/src/frontend/frontend_message.rs | 2 +- editor/src/viewport_tools/tools/ellipse.rs | 2 +- editor/src/viewport_tools/tools/eyedropper.rs | 2 +- editor/src/viewport_tools/tools/fill.rs | 2 +- editor/src/viewport_tools/tools/line.rs | 2 +- editor/src/viewport_tools/tools/navigate.rs | 2 +- editor/src/viewport_tools/tools/path.rs | 2 +- editor/src/viewport_tools/tools/pen.rs | 2 +- editor/src/viewport_tools/tools/rectangle.rs | 2 +- editor/src/viewport_tools/tools/select.rs | 2 +- editor/src/viewport_tools/tools/shape.rs | 2 +- frontend/src/dispatcher/js-messages.ts | 10 +++++----- 12 files changed, 16 insertions(+), 16 deletions(-) diff --git a/editor/src/frontend/frontend_message.rs b/editor/src/frontend/frontend_message.rs index 9bfc00b63b5..e460bff3170 100644 --- a/editor/src/frontend/frontend_message.rs +++ b/editor/src/frontend/frontend_message.rs @@ -18,7 +18,6 @@ pub enum FrontendMessage { DisplayDialogError { title: String, description: String }, DisplayDialogPanic { panic_info: String, title: String, description: String }, DisplayDocumentLayerTreeStructure { data_buffer: RawBuffer }, - DisplayMouseCursor { cursor: FrontendMouseCursor }, // Trigger prefix: cause a browser API to do something TriggerFileDownload { document: String, name: String }, @@ -38,6 +37,7 @@ pub enum FrontendMessage { UpdateDocumentRulers { origin: (f64, f64), spacing: f64, interval: f64 }, UpdateDocumentScrollbars { position: (f64, f64), size: (f64, f64), multiplier: (f64, f64) }, UpdateInputHints { hint_data: HintData }, + UpdateMouseCursor { cursor: FrontendMouseCursor }, UpdateOpenDocumentsList { open_documents: Vec }, UpdateWorkingColors { primary: Color, secondary: Color }, } diff --git a/editor/src/viewport_tools/tools/ellipse.rs b/editor/src/viewport_tools/tools/ellipse.rs index 7b25f48aff4..936fb44606b 100644 --- a/editor/src/viewport_tools/tools/ellipse.rs +++ b/editor/src/viewport_tools/tools/ellipse.rs @@ -187,7 +187,7 @@ impl Fsm for EllipseToolFsmState { fn update_cursor(&self, responses: &mut VecDeque) { responses.push_back( - FrontendMessage::DisplayMouseCursor { + FrontendMessage::UpdateMouseCursor { cursor: FrontendMouseCursor::Crosshair, } .into(), diff --git a/editor/src/viewport_tools/tools/eyedropper.rs b/editor/src/viewport_tools/tools/eyedropper.rs index ab63a08edd2..b158a8c82e8 100644 --- a/editor/src/viewport_tools/tools/eyedropper.rs +++ b/editor/src/viewport_tools/tools/eyedropper.rs @@ -136,6 +136,6 @@ impl Fsm for EyedropperToolFsmState { } fn update_cursor(&self, responses: &mut VecDeque) { - responses.push_back(FrontendMessage::DisplayMouseCursor { cursor: FrontendMouseCursor::Default }.into()); + responses.push_back(FrontendMessage::UpdateMouseCursor { cursor: FrontendMouseCursor::Default }.into()); } } diff --git a/editor/src/viewport_tools/tools/fill.rs b/editor/src/viewport_tools/tools/fill.rs index 3497f69e481..4dd5bccbfeb 100644 --- a/editor/src/viewport_tools/tools/fill.rs +++ b/editor/src/viewport_tools/tools/fill.rs @@ -130,6 +130,6 @@ impl Fsm for FillToolFsmState { } fn update_cursor(&self, responses: &mut VecDeque) { - responses.push_back(FrontendMessage::DisplayMouseCursor { cursor: FrontendMouseCursor::Default }.into()); + responses.push_back(FrontendMessage::UpdateMouseCursor { cursor: FrontendMouseCursor::Default }.into()); } } diff --git a/editor/src/viewport_tools/tools/line.rs b/editor/src/viewport_tools/tools/line.rs index df067f50264..a5d325b9b41 100644 --- a/editor/src/viewport_tools/tools/line.rs +++ b/editor/src/viewport_tools/tools/line.rs @@ -217,7 +217,7 @@ impl Fsm for LineToolFsmState { fn update_cursor(&self, responses: &mut VecDeque) { responses.push_back( - FrontendMessage::DisplayMouseCursor { + FrontendMessage::UpdateMouseCursor { cursor: FrontendMouseCursor::Crosshair, } .into(), diff --git a/editor/src/viewport_tools/tools/navigate.rs b/editor/src/viewport_tools/tools/navigate.rs index b8825044c9b..6667cde7788 100644 --- a/editor/src/viewport_tools/tools/navigate.rs +++ b/editor/src/viewport_tools/tools/navigate.rs @@ -220,6 +220,6 @@ impl Fsm for NavigateToolFsmState { } fn update_cursor(&self, responses: &mut VecDeque) { - responses.push_back(FrontendMessage::DisplayMouseCursor { cursor: FrontendMouseCursor::Default }.into()); + responses.push_back(FrontendMessage::UpdateMouseCursor { cursor: FrontendMouseCursor::Default }.into()); } } diff --git a/editor/src/viewport_tools/tools/path.rs b/editor/src/viewport_tools/tools/path.rs index 20d0e09ef26..2fb4959f94c 100644 --- a/editor/src/viewport_tools/tools/path.rs +++ b/editor/src/viewport_tools/tools/path.rs @@ -485,7 +485,7 @@ impl Fsm for PathToolFsmState { } fn update_cursor(&self, responses: &mut VecDeque) { - responses.push_back(FrontendMessage::DisplayMouseCursor { cursor: FrontendMouseCursor::Default }.into()); + responses.push_back(FrontendMessage::UpdateMouseCursor { cursor: FrontendMouseCursor::Default }.into()); } } diff --git a/editor/src/viewport_tools/tools/pen.rs b/editor/src/viewport_tools/tools/pen.rs index 45fbf1fa0ed..1fefe7c522d 100644 --- a/editor/src/viewport_tools/tools/pen.rs +++ b/editor/src/viewport_tools/tools/pen.rs @@ -202,7 +202,7 @@ impl Fsm for PenToolFsmState { } fn update_cursor(&self, responses: &mut VecDeque) { - responses.push_back(FrontendMessage::DisplayMouseCursor { cursor: FrontendMouseCursor::Default }.into()); + responses.push_back(FrontendMessage::UpdateMouseCursor { cursor: FrontendMouseCursor::Default }.into()); } } diff --git a/editor/src/viewport_tools/tools/rectangle.rs b/editor/src/viewport_tools/tools/rectangle.rs index 57f295c3283..fa8eb39686d 100644 --- a/editor/src/viewport_tools/tools/rectangle.rs +++ b/editor/src/viewport_tools/tools/rectangle.rs @@ -187,7 +187,7 @@ impl Fsm for RectangleToolFsmState { fn update_cursor(&self, responses: &mut VecDeque) { responses.push_back( - FrontendMessage::DisplayMouseCursor { + FrontendMessage::UpdateMouseCursor { cursor: FrontendMouseCursor::Crosshair, } .into(), diff --git a/editor/src/viewport_tools/tools/select.rs b/editor/src/viewport_tools/tools/select.rs index 06e46715006..eb8d0de1267 100644 --- a/editor/src/viewport_tools/tools/select.rs +++ b/editor/src/viewport_tools/tools/select.rs @@ -429,6 +429,6 @@ impl Fsm for SelectToolFsmState { } fn update_cursor(&self, responses: &mut VecDeque) { - responses.push_back(FrontendMessage::DisplayMouseCursor { cursor: FrontendMouseCursor::Default }.into()); + responses.push_back(FrontendMessage::UpdateMouseCursor { cursor: FrontendMouseCursor::Default }.into()); } } diff --git a/editor/src/viewport_tools/tools/shape.rs b/editor/src/viewport_tools/tools/shape.rs index 792244fccfb..91656c1d38c 100644 --- a/editor/src/viewport_tools/tools/shape.rs +++ b/editor/src/viewport_tools/tools/shape.rs @@ -195,7 +195,7 @@ impl Fsm for ShapeToolFsmState { fn update_cursor(&self, responses: &mut VecDeque) { responses.push_back( - FrontendMessage::DisplayMouseCursor { + FrontendMessage::UpdateMouseCursor { cursor: FrontendMouseCursor::Crosshair, } .into(), diff --git a/frontend/src/dispatcher/js-messages.ts b/frontend/src/dispatcher/js-messages.ts index 1df7c4f6433..9878d989d10 100644 --- a/frontend/src/dispatcher/js-messages.ts +++ b/frontend/src/dispatcher/js-messages.ts @@ -169,10 +169,6 @@ export class DisplayConfirmationToCloseAllDocuments extends JsMessage {} export class DisplayDialogAboutGraphite extends JsMessage {} -export class DisplayMouseCursor extends JsMessage { - readonly cursor!: FrontendMouseCursor; -} - export class UpdateDocumentArtwork extends JsMessage { readonly svg!: string; } @@ -207,6 +203,10 @@ export class UpdateDocumentRulers extends JsMessage { readonly interval!: number; } +export class UpdateMouseCursor extends JsMessage { + readonly cursor!: FrontendMouseCursor; +} + export class TriggerFileDownload extends JsMessage { readonly document!: string; @@ -384,12 +384,12 @@ export const messageConstructors: Record = { UpdateWorkingColors, UpdateCanvasZoom, UpdateCanvasRotation, + UpdateMouseCursor, DisplayDialogError, DisplayDialogPanic, DisplayConfirmationToCloseDocument, DisplayConfirmationToCloseAllDocuments, DisplayDialogAboutGraphite, - DisplayMouseCursor, TriggerIndexedDbWriteDocument, TriggerIndexedDbRemoveDocument, UpdateDocumentArtboards, From 16bdc322dcd49a32b93f6d37ee5926e4bd815e50 Mon Sep 17 00:00:00 2001 From: asyncth Date: Sat, 15 Jan 2022 17:21:11 +0000 Subject: [PATCH 04/12] Add 'To CSS Cursor Property' transform decorator and change the mouse cursor in the canvas based on the current tool and its state --- frontend/src/components/panels/Document.vue | 8 ++++++- frontend/src/dispatcher/js-messages.ts | 23 +++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/frontend/src/components/panels/Document.vue b/frontend/src/components/panels/Document.vue index e9a2bb986c5..6597ce6923b 100644 --- a/frontend/src/components/panels/Document.vue +++ b/frontend/src/components/panels/Document.vue @@ -123,7 +123,7 @@ -
+
@@ -261,6 +261,7 @@ import { UpdateCanvasRotation, ToolName, UpdateDocumentArtboards, + UpdateMouseCursor, } from "@/dispatcher/js-messages"; import LayoutCol from "@/components/layout/LayoutCol.vue"; @@ -378,6 +379,10 @@ export default defineComponent({ this.documentRotation = (360 + (newRotation % 360)) % 360; }); + this.editor.dispatcher.subscribeJsMessage(UpdateMouseCursor, (updateMouseCursor) => { + this.canvasCursor = updateMouseCursor.cursor; + }); + window.addEventListener("resize", this.viewportResize); window.addEventListener("DOMContentLoaded", this.viewportResize); }, @@ -401,6 +406,7 @@ export default defineComponent({ overlaysSvg: "", canvasSvgWidth: "100%", canvasSvgHeight: "100%", + canvasCursor: "default", activeTool: "Select" as ToolName, activeToolOptions: {}, documentModeEntries, diff --git a/frontend/src/dispatcher/js-messages.ts b/frontend/src/dispatcher/js-messages.ts index 9878d989d10..1ba2e76226a 100644 --- a/frontend/src/dispatcher/js-messages.ts +++ b/frontend/src/dispatcher/js-messages.ts @@ -203,7 +203,30 @@ export class UpdateDocumentRulers extends JsMessage { readonly interval!: number; } +const ToCssCursorProperty = Transform(({ value }) => { + switch (value) { + case "Default": + return "default"; + + case "ZoomIn": + return "zoom-in"; + + case "ZoomOut": + return "zoom-out"; + + case "Grabbing": + return "grabbing"; + + case "Crosshair": + return "crosshair"; + + default: + return "default"; + } +}); + export class UpdateMouseCursor extends JsMessage { + @ToCssCursorProperty readonly cursor!: FrontendMouseCursor; } From 17e52bc6d7e30d3523e501b22f0c5701815592ae Mon Sep 17 00:00:00 2001 From: asyncth Date: Sat, 15 Jan 2022 17:37:15 +0000 Subject: [PATCH 05/12] Implement update_cursor for Navigate tool properly --- editor/src/viewport_tools/tools/navigate.rs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/editor/src/viewport_tools/tools/navigate.rs b/editor/src/viewport_tools/tools/navigate.rs index 6667cde7788..16903de163b 100644 --- a/editor/src/viewport_tools/tools/navigate.rs +++ b/editor/src/viewport_tools/tools/navigate.rs @@ -220,6 +220,13 @@ impl Fsm for NavigateToolFsmState { } fn update_cursor(&self, responses: &mut VecDeque) { - responses.push_back(FrontendMessage::UpdateMouseCursor { cursor: FrontendMouseCursor::Default }.into()); + let cursor = match *self { + NavigateToolFsmState::Ready => FrontendMouseCursor::ZoomIn, + NavigateToolFsmState::Panning => FrontendMouseCursor::Grabbing, + NavigateToolFsmState::Tilting => FrontendMouseCursor::Default, + NavigateToolFsmState::Zooming => FrontendMouseCursor::Grabbing, + }; + + responses.push_back(FrontendMessage::UpdateMouseCursor { cursor }.into()); } } From 531de73f6d39aa3629ce6cac601c79288a4cbd3d Mon Sep 17 00:00:00 2001 From: asyncth Date: Sun, 16 Jan 2022 05:30:50 +0000 Subject: [PATCH 06/12] Keep the cursor when dragging outside of the canvas --- frontend/src/components/panels/Document.vue | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/frontend/src/components/panels/Document.vue b/frontend/src/components/panels/Document.vue index 6597ce6923b..1b3a2f66316 100644 --- a/frontend/src/components/panels/Document.vue +++ b/frontend/src/components/panels/Document.vue @@ -123,7 +123,7 @@ -
+
@@ -339,6 +339,10 @@ export default defineComponent({ resetWorkingColors() { this.editor.instance.reset_colors(); }, + canvasPointerDown(event: PointerEvent) { + const canvas = this.$refs.canvas as HTMLElement; + canvas.setPointerCapture(event.pointerId); + }, }, mounted() { this.editor.dispatcher.subscribeJsMessage(UpdateDocumentArtwork, (UpdateDocumentArtwork) => { From c89e498fe72de6ca8ab9cbfc0aeb88b276554fc2 Mon Sep 17 00:00:00 2001 From: asyncth Date: Sun, 16 Jan 2022 06:10:45 +0000 Subject: [PATCH 07/12] Change the mouse cursor to 'zoom-in' when LMB dragging on canvas with Navigate tool --- editor/src/viewport_tools/tools/navigate.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/editor/src/viewport_tools/tools/navigate.rs b/editor/src/viewport_tools/tools/navigate.rs index 16903de163b..a1eab6e6223 100644 --- a/editor/src/viewport_tools/tools/navigate.rs +++ b/editor/src/viewport_tools/tools/navigate.rs @@ -224,7 +224,7 @@ impl Fsm for NavigateToolFsmState { NavigateToolFsmState::Ready => FrontendMouseCursor::ZoomIn, NavigateToolFsmState::Panning => FrontendMouseCursor::Grabbing, NavigateToolFsmState::Tilting => FrontendMouseCursor::Default, - NavigateToolFsmState::Zooming => FrontendMouseCursor::Grabbing, + NavigateToolFsmState::Zooming => FrontendMouseCursor::ZoomIn, }; responses.push_back(FrontendMessage::UpdateMouseCursor { cursor }.into()); From 88bb8403f5e0d8a468d12527f1997e54db9b4af7 Mon Sep 17 00:00:00 2001 From: asyncth Date: Sun, 16 Jan 2022 07:26:55 +0000 Subject: [PATCH 08/12] Rename FrontendMouseCursor to MouseCursorIcon --- editor/src/frontend/frontend_message.rs | 4 ++-- editor/src/frontend/utility_types.rs | 2 +- editor/src/viewport_tools/tools/ellipse.rs | 9 ++------- editor/src/viewport_tools/tools/eyedropper.rs | 4 ++-- editor/src/viewport_tools/tools/fill.rs | 4 ++-- editor/src/viewport_tools/tools/line.rs | 9 ++------- editor/src/viewport_tools/tools/navigate.rs | 10 +++++----- editor/src/viewport_tools/tools/path.rs | 4 ++-- editor/src/viewport_tools/tools/pen.rs | 4 ++-- editor/src/viewport_tools/tools/rectangle.rs | 9 ++------- editor/src/viewport_tools/tools/select.rs | 4 ++-- editor/src/viewport_tools/tools/shape.rs | 9 ++------- frontend/src/dispatcher/js-messages.ts | 4 ++-- 13 files changed, 28 insertions(+), 48 deletions(-) diff --git a/editor/src/frontend/frontend_message.rs b/editor/src/frontend/frontend_message.rs index e460bff3170..6bcaff992c3 100644 --- a/editor/src/frontend/frontend_message.rs +++ b/editor/src/frontend/frontend_message.rs @@ -1,4 +1,4 @@ -use super::utility_types::{FrontendDocumentDetails, FrontendMouseCursor}; +use super::utility_types::{FrontendDocumentDetails, MouseCursorIcon}; use crate::document::layer_panel::{LayerPanelEntry, RawBuffer}; use crate::message_prelude::*; use crate::misc::HintData; @@ -37,7 +37,7 @@ pub enum FrontendMessage { UpdateDocumentRulers { origin: (f64, f64), spacing: f64, interval: f64 }, UpdateDocumentScrollbars { position: (f64, f64), size: (f64, f64), multiplier: (f64, f64) }, UpdateInputHints { hint_data: HintData }, - UpdateMouseCursor { cursor: FrontendMouseCursor }, + UpdateMouseCursor { cursor: MouseCursorIcon }, UpdateOpenDocumentsList { open_documents: Vec }, UpdateWorkingColors { primary: Color, secondary: Color }, } diff --git a/editor/src/frontend/utility_types.rs b/editor/src/frontend/utility_types.rs index e442a1d172a..6bc51118f03 100644 --- a/editor/src/frontend/utility_types.rs +++ b/editor/src/frontend/utility_types.rs @@ -8,7 +8,7 @@ pub struct FrontendDocumentDetails { } #[derive(Clone, Copy, Debug, Eq, Deserialize, PartialEq, Serialize)] -pub enum FrontendMouseCursor { +pub enum MouseCursorIcon { Default, ZoomIn, ZoomOut, diff --git a/editor/src/viewport_tools/tools/ellipse.rs b/editor/src/viewport_tools/tools/ellipse.rs index 936fb44606b..522faf1c806 100644 --- a/editor/src/viewport_tools/tools/ellipse.rs +++ b/editor/src/viewport_tools/tools/ellipse.rs @@ -1,6 +1,6 @@ use super::shared::resize::Resize; use crate::document::DocumentMessageHandler; -use crate::frontend::utility_types::FrontendMouseCursor; +use crate::frontend::utility_types::MouseCursorIcon; use crate::input::keyboard::{Key, MouseMotion}; use crate::input::InputPreprocessorMessageHandler; use crate::message_prelude::*; @@ -186,11 +186,6 @@ impl Fsm for EllipseToolFsmState { } fn update_cursor(&self, responses: &mut VecDeque) { - responses.push_back( - FrontendMessage::UpdateMouseCursor { - cursor: FrontendMouseCursor::Crosshair, - } - .into(), - ); + responses.push_back(FrontendMessage::UpdateMouseCursor { cursor: MouseCursorIcon::Crosshair }.into()); } } diff --git a/editor/src/viewport_tools/tools/eyedropper.rs b/editor/src/viewport_tools/tools/eyedropper.rs index b158a8c82e8..803b67e9d0c 100644 --- a/editor/src/viewport_tools/tools/eyedropper.rs +++ b/editor/src/viewport_tools/tools/eyedropper.rs @@ -1,6 +1,6 @@ use crate::consts::SELECTION_TOLERANCE; use crate::document::DocumentMessageHandler; -use crate::frontend::utility_types::FrontendMouseCursor; +use crate::frontend::utility_types::MouseCursorIcon; use crate::input::keyboard::MouseMotion; use crate::input::InputPreprocessorMessageHandler; use crate::message_prelude::*; @@ -136,6 +136,6 @@ impl Fsm for EyedropperToolFsmState { } fn update_cursor(&self, responses: &mut VecDeque) { - responses.push_back(FrontendMessage::UpdateMouseCursor { cursor: FrontendMouseCursor::Default }.into()); + responses.push_back(FrontendMessage::UpdateMouseCursor { cursor: MouseCursorIcon::Default }.into()); } } diff --git a/editor/src/viewport_tools/tools/fill.rs b/editor/src/viewport_tools/tools/fill.rs index 4dd5bccbfeb..79872a197a1 100644 --- a/editor/src/viewport_tools/tools/fill.rs +++ b/editor/src/viewport_tools/tools/fill.rs @@ -1,6 +1,6 @@ use crate::consts::SELECTION_TOLERANCE; use crate::document::DocumentMessageHandler; -use crate::frontend::utility_types::FrontendMouseCursor; +use crate::frontend::utility_types::MouseCursorIcon; use crate::input::keyboard::MouseMotion; use crate::input::InputPreprocessorMessageHandler; use crate::message_prelude::*; @@ -130,6 +130,6 @@ impl Fsm for FillToolFsmState { } fn update_cursor(&self, responses: &mut VecDeque) { - responses.push_back(FrontendMessage::UpdateMouseCursor { cursor: FrontendMouseCursor::Default }.into()); + responses.push_back(FrontendMessage::UpdateMouseCursor { cursor: MouseCursorIcon::Default }.into()); } } diff --git a/editor/src/viewport_tools/tools/line.rs b/editor/src/viewport_tools/tools/line.rs index a5d325b9b41..119208383f5 100644 --- a/editor/src/viewport_tools/tools/line.rs +++ b/editor/src/viewport_tools/tools/line.rs @@ -1,6 +1,6 @@ use crate::consts::LINE_ROTATE_SNAP_ANGLE; use crate::document::DocumentMessageHandler; -use crate::frontend::utility_types::FrontendMouseCursor; +use crate::frontend::utility_types::MouseCursorIcon; use crate::input::keyboard::{Key, MouseMotion}; use crate::input::mouse::ViewportPosition; use crate::input::InputPreprocessorMessageHandler; @@ -216,12 +216,7 @@ impl Fsm for LineToolFsmState { } fn update_cursor(&self, responses: &mut VecDeque) { - responses.push_back( - FrontendMessage::UpdateMouseCursor { - cursor: FrontendMouseCursor::Crosshair, - } - .into(), - ); + responses.push_back(FrontendMessage::UpdateMouseCursor { cursor: MouseCursorIcon::Crosshair }.into()); } } diff --git a/editor/src/viewport_tools/tools/navigate.rs b/editor/src/viewport_tools/tools/navigate.rs index a1eab6e6223..6fb5ef7bf8a 100644 --- a/editor/src/viewport_tools/tools/navigate.rs +++ b/editor/src/viewport_tools/tools/navigate.rs @@ -1,5 +1,5 @@ use crate::document::DocumentMessageHandler; -use crate::frontend::utility_types::FrontendMouseCursor; +use crate::frontend::utility_types::MouseCursorIcon; use crate::input::keyboard::{Key, MouseMotion}; use crate::input::InputPreprocessorMessageHandler; use crate::message_prelude::*; @@ -221,10 +221,10 @@ impl Fsm for NavigateToolFsmState { fn update_cursor(&self, responses: &mut VecDeque) { let cursor = match *self { - NavigateToolFsmState::Ready => FrontendMouseCursor::ZoomIn, - NavigateToolFsmState::Panning => FrontendMouseCursor::Grabbing, - NavigateToolFsmState::Tilting => FrontendMouseCursor::Default, - NavigateToolFsmState::Zooming => FrontendMouseCursor::ZoomIn, + NavigateToolFsmState::Ready => MouseCursorIcon::ZoomIn, + NavigateToolFsmState::Panning => MouseCursorIcon::Grabbing, + NavigateToolFsmState::Tilting => MouseCursorIcon::Default, + NavigateToolFsmState::Zooming => MouseCursorIcon::ZoomIn, }; responses.push_back(FrontendMessage::UpdateMouseCursor { cursor }.into()); diff --git a/editor/src/viewport_tools/tools/path.rs b/editor/src/viewport_tools/tools/path.rs index 2fb4959f94c..1132cdcd933 100644 --- a/editor/src/viewport_tools/tools/path.rs +++ b/editor/src/viewport_tools/tools/path.rs @@ -1,7 +1,7 @@ use crate::consts::{COLOR_ACCENT, VECTOR_MANIPULATOR_ANCHOR_MARKER_SIZE}; use crate::document::utility_types::{VectorManipulatorSegment, VectorManipulatorShape}; use crate::document::DocumentMessageHandler; -use crate::frontend::utility_types::FrontendMouseCursor; +use crate::frontend::utility_types::MouseCursorIcon; use crate::input::keyboard::{Key, MouseMotion}; use crate::input::InputPreprocessorMessageHandler; use crate::message_prelude::*; @@ -485,7 +485,7 @@ impl Fsm for PathToolFsmState { } fn update_cursor(&self, responses: &mut VecDeque) { - responses.push_back(FrontendMessage::UpdateMouseCursor { cursor: FrontendMouseCursor::Default }.into()); + responses.push_back(FrontendMessage::UpdateMouseCursor { cursor: MouseCursorIcon::Default }.into()); } } diff --git a/editor/src/viewport_tools/tools/pen.rs b/editor/src/viewport_tools/tools/pen.rs index 1fefe7c522d..cfbe80522fa 100644 --- a/editor/src/viewport_tools/tools/pen.rs +++ b/editor/src/viewport_tools/tools/pen.rs @@ -1,5 +1,5 @@ use crate::document::DocumentMessageHandler; -use crate::frontend::utility_types::FrontendMouseCursor; +use crate::frontend::utility_types::MouseCursorIcon; use crate::input::keyboard::{Key, MouseMotion}; use crate::input::InputPreprocessorMessageHandler; use crate::message_prelude::*; @@ -202,7 +202,7 @@ impl Fsm for PenToolFsmState { } fn update_cursor(&self, responses: &mut VecDeque) { - responses.push_back(FrontendMessage::UpdateMouseCursor { cursor: FrontendMouseCursor::Default }.into()); + responses.push_back(FrontendMessage::UpdateMouseCursor { cursor: MouseCursorIcon::Default }.into()); } } diff --git a/editor/src/viewport_tools/tools/rectangle.rs b/editor/src/viewport_tools/tools/rectangle.rs index fa8eb39686d..bff9592404f 100644 --- a/editor/src/viewport_tools/tools/rectangle.rs +++ b/editor/src/viewport_tools/tools/rectangle.rs @@ -1,6 +1,6 @@ use super::shared::resize::Resize; use crate::document::DocumentMessageHandler; -use crate::frontend::utility_types::FrontendMouseCursor; +use crate::frontend::utility_types::MouseCursorIcon; use crate::input::keyboard::{Key, MouseMotion}; use crate::input::InputPreprocessorMessageHandler; use crate::message_prelude::*; @@ -186,11 +186,6 @@ impl Fsm for RectangleToolFsmState { } fn update_cursor(&self, responses: &mut VecDeque) { - responses.push_back( - FrontendMessage::UpdateMouseCursor { - cursor: FrontendMouseCursor::Crosshair, - } - .into(), - ); + responses.push_back(FrontendMessage::UpdateMouseCursor { cursor: MouseCursorIcon::Crosshair }.into()); } } diff --git a/editor/src/viewport_tools/tools/select.rs b/editor/src/viewport_tools/tools/select.rs index eb8d0de1267..7f0d40e27d5 100644 --- a/editor/src/viewport_tools/tools/select.rs +++ b/editor/src/viewport_tools/tools/select.rs @@ -1,7 +1,7 @@ use crate::consts::{COLOR_ACCENT, SELECTION_DRAG_ANGLE, SELECTION_TOLERANCE}; use crate::document::utility_types::{AlignAggregate, AlignAxis, FlipAxis}; use crate::document::DocumentMessageHandler; -use crate::frontend::utility_types::FrontendMouseCursor; +use crate::frontend::utility_types::MouseCursorIcon; use crate::input::keyboard::{Key, MouseMotion}; use crate::input::mouse::ViewportPosition; use crate::input::InputPreprocessorMessageHandler; @@ -429,6 +429,6 @@ impl Fsm for SelectToolFsmState { } fn update_cursor(&self, responses: &mut VecDeque) { - responses.push_back(FrontendMessage::UpdateMouseCursor { cursor: FrontendMouseCursor::Default }.into()); + responses.push_back(FrontendMessage::UpdateMouseCursor { cursor: MouseCursorIcon::Default }.into()); } } diff --git a/editor/src/viewport_tools/tools/shape.rs b/editor/src/viewport_tools/tools/shape.rs index 91656c1d38c..75d842268c1 100644 --- a/editor/src/viewport_tools/tools/shape.rs +++ b/editor/src/viewport_tools/tools/shape.rs @@ -1,6 +1,6 @@ use super::shared::resize::Resize; use crate::document::DocumentMessageHandler; -use crate::frontend::utility_types::FrontendMouseCursor; +use crate::frontend::utility_types::MouseCursorIcon; use crate::input::keyboard::{Key, MouseMotion}; use crate::input::InputPreprocessorMessageHandler; use crate::message_prelude::*; @@ -194,11 +194,6 @@ impl Fsm for ShapeToolFsmState { } fn update_cursor(&self, responses: &mut VecDeque) { - responses.push_back( - FrontendMessage::UpdateMouseCursor { - cursor: FrontendMouseCursor::Crosshair, - } - .into(), - ); + responses.push_back(FrontendMessage::UpdateMouseCursor { cursor: MouseCursorIcon::Crosshair }.into()); } } diff --git a/frontend/src/dispatcher/js-messages.ts b/frontend/src/dispatcher/js-messages.ts index 1ba2e76226a..56a67805799 100644 --- a/frontend/src/dispatcher/js-messages.ts +++ b/frontend/src/dispatcher/js-messages.ts @@ -39,7 +39,7 @@ export class FrontendDocumentDetails extends DocumentDetails { readonly id!: BigInt; } -export type FrontendMouseCursor = string; +export type MouseCursorIcon = string; export class UpdateOpenDocumentsList extends JsMessage { @Type(() => FrontendDocumentDetails) @@ -227,7 +227,7 @@ const ToCssCursorProperty = Transform(({ value }) => { export class UpdateMouseCursor extends JsMessage { @ToCssCursorProperty - readonly cursor!: FrontendMouseCursor; + readonly cursor!: MouseCursorIcon; } export class TriggerFileDownload extends JsMessage { From 079229a68dbc641a61d48699c81d996409235033 Mon Sep 17 00:00:00 2001 From: asyncth Date: Sun, 16 Jan 2022 07:35:28 +0000 Subject: [PATCH 09/12] Rename 'event' to 'e' and replace v-on with @ --- frontend/src/components/panels/Document.vue | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/frontend/src/components/panels/Document.vue b/frontend/src/components/panels/Document.vue index 1b3a2f66316..adf022d757e 100644 --- a/frontend/src/components/panels/Document.vue +++ b/frontend/src/components/panels/Document.vue @@ -123,7 +123,7 @@ -
+
@@ -339,9 +339,9 @@ export default defineComponent({ resetWorkingColors() { this.editor.instance.reset_colors(); }, - canvasPointerDown(event: PointerEvent) { + canvasPointerDown(e: PointerEvent) { const canvas = this.$refs.canvas as HTMLElement; - canvas.setPointerCapture(event.pointerId); + canvas.setPointerCapture(e.pointerId); }, }, mounted() { From 19e96a8f5ae14dc434e61a0f293a23b9244971a3 Mon Sep 17 00:00:00 2001 From: asyncth Date: Sun, 16 Jan 2022 07:37:13 +0000 Subject: [PATCH 10/12] Change the definition of the MouseCursorIcon type in TS --- frontend/src/dispatcher/js-messages.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/dispatcher/js-messages.ts b/frontend/src/dispatcher/js-messages.ts index 56a67805799..eb0a11a7c3e 100644 --- a/frontend/src/dispatcher/js-messages.ts +++ b/frontend/src/dispatcher/js-messages.ts @@ -39,7 +39,7 @@ export class FrontendDocumentDetails extends DocumentDetails { readonly id!: BigInt; } -export type MouseCursorIcon = string; +export type MouseCursorIcon = "default" | "zoom-in" | "zoom-out" | "grabbing" | "crosshair"; export class UpdateOpenDocumentsList extends JsMessage { @Type(() => FrontendDocumentDetails) From dcb1019246aae1b1898988ba6902e21bb084c0bb Mon Sep 17 00:00:00 2001 From: asyncth Date: Sun, 16 Jan 2022 07:43:27 +0000 Subject: [PATCH 11/12] Replace switch with dictionary look-up --- frontend/src/dispatcher/js-messages.ts | 27 ++++++++------------------ 1 file changed, 8 insertions(+), 19 deletions(-) diff --git a/frontend/src/dispatcher/js-messages.ts b/frontend/src/dispatcher/js-messages.ts index eb0a11a7c3e..d9e7af3d84e 100644 --- a/frontend/src/dispatcher/js-messages.ts +++ b/frontend/src/dispatcher/js-messages.ts @@ -204,25 +204,14 @@ export class UpdateDocumentRulers extends JsMessage { } const ToCssCursorProperty = Transform(({ value }) => { - switch (value) { - case "Default": - return "default"; - - case "ZoomIn": - return "zoom-in"; - - case "ZoomOut": - return "zoom-out"; - - case "Grabbing": - return "grabbing"; - - case "Crosshair": - return "crosshair"; - - default: - return "default"; - } + const cssNames: Record = { + ZoomIn: "zoom-in", + ZoomOut: "zoom-out", + Grabbing: "grabbing", + Crosshair: "crosshair", + }; + + return cssNames[value] || "default"; }); export class UpdateMouseCursor extends JsMessage { From 7cc3b8092984b3b7c43495b9441650daaf750e78 Mon Sep 17 00:00:00 2001 From: asyncth Date: Sun, 16 Jan 2022 07:45:59 +0000 Subject: [PATCH 12/12] Move the definition of MouseCursorIcon closer to where it's used --- frontend/src/dispatcher/js-messages.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/dispatcher/js-messages.ts b/frontend/src/dispatcher/js-messages.ts index d9e7af3d84e..88826ee7904 100644 --- a/frontend/src/dispatcher/js-messages.ts +++ b/frontend/src/dispatcher/js-messages.ts @@ -39,8 +39,6 @@ export class FrontendDocumentDetails extends DocumentDetails { readonly id!: BigInt; } -export type MouseCursorIcon = "default" | "zoom-in" | "zoom-out" | "grabbing" | "crosshair"; - export class UpdateOpenDocumentsList extends JsMessage { @Type(() => FrontendDocumentDetails) readonly open_documents!: FrontendDocumentDetails[]; @@ -203,6 +201,8 @@ export class UpdateDocumentRulers extends JsMessage { readonly interval!: number; } +export type MouseCursorIcon = "default" | "zoom-in" | "zoom-out" | "grabbing" | "crosshair"; + const ToCssCursorProperty = Transform(({ value }) => { const cssNames: Record = { ZoomIn: "zoom-in",