diff --git a/editor/src/communication/dispatcher.rs b/editor/src/communication/dispatcher.rs index 70c911f4..9a70db03 100644 --- a/editor/src/communication/dispatcher.rs +++ b/editor/src/communication/dispatcher.rs @@ -58,6 +58,8 @@ impl Dispatcher { // Process the action by forwarding it to the relevant message handler, or saving the FrontendMessage to be sent to the frontend #[remain::sorted] match message { + #[remain::unsorted] + NoOp => {} Frontend(message) => { // `FrontendMessage`s are saved and will be sent to the frontend after the message queue is done being processed self.responses.push(message); @@ -74,7 +76,6 @@ impl Dispatcher { InputPreprocessor(message) => { self.message_handlers.input_preprocessor_message_handler.process_action(message, (), &mut self.message_queue); } - NoOp => {} Portfolio(message) => { self.message_handlers .portfolio_message_handler diff --git a/editor/src/communication/message.rs b/editor/src/communication/message.rs index c0422506..30c426c0 100644 --- a/editor/src/communication/message.rs +++ b/editor/src/communication/message.rs @@ -20,6 +20,8 @@ where #[impl_message] #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] pub enum Message { + #[remain::unsorted] + NoOp, #[child] Frontend(FrontendMessage), #[child] @@ -28,7 +30,6 @@ pub enum Message { InputMapper(InputMapperMessage), #[child] InputPreprocessor(InputPreprocessorMessage), - NoOp, #[child] Portfolio(PortfolioMessage), #[child] diff --git a/editor/src/document/artboard_message.rs b/editor/src/document/artboard_message.rs index 3d749597..5f33e308 100644 --- a/editor/src/document/artboard_message.rs +++ b/editor/src/document/artboard_message.rs @@ -8,8 +8,17 @@ use serde::{Deserialize, Serialize}; #[impl_message(Message, DocumentMessage, Artboard)] #[derive(PartialEq, Clone, Debug, Serialize, Deserialize)] pub enum ArtboardMessage { - AddArtboard { top: f64, left: f64, height: f64, width: f64 }, + // Sub-messages + #[remain::unsorted] DispatchOperation(Box), + + // Messages + AddArtboard { + top: f64, + left: f64, + height: f64, + width: f64, + }, RenderArtboards, } diff --git a/editor/src/document/artboard_message_handler.rs b/editor/src/document/artboard_message_handler.rs index d606a6c5..f8c2ca0d 100644 --- a/editor/src/document/artboard_message_handler.rs +++ b/editor/src/document/artboard_message_handler.rs @@ -1,5 +1,3 @@ -use super::layer_panel::LayerMetadata; -use crate::input::InputPreprocessorMessageHandler; use crate::message_prelude::*; use graphene::color::Color; @@ -23,14 +21,21 @@ impl ArtboardMessageHandler { } } -impl MessageHandler for ArtboardMessageHandler { +impl MessageHandler for ArtboardMessageHandler { #[remain::check] - fn process_action(&mut self, message: ArtboardMessage, _data: (&mut LayerMetadata, &GrapheneDocument, &InputPreprocessorMessageHandler), responses: &mut VecDeque) { + fn process_action(&mut self, message: ArtboardMessage, _: (), responses: &mut VecDeque) { use ArtboardMessage::*; - // let (layer_metadata, document, ipp) = data; #[remain::sorted] match message { + // Sub-messages + #[remain::unsorted] + DispatchOperation(operation) => match self.artboards_graphene_document.handle_operation(&operation) { + Ok(_) => (), + Err(e) => log::error!("Artboard Error: {:?}", e), + }, + + // Messages AddArtboard { top, left, height, width } => { let artboard_id = generate_uuid(); self.artboard_ids.push(artboard_id); @@ -50,10 +55,6 @@ impl MessageHandler match self.artboards_graphene_document.handle_operation(&operation) { - Ok(_) => (), - Err(e) => log::error!("Artboard Error: {:?}", e), - }, RenderArtboards => { // Render an infinite canvas if there are no artboards if self.artboard_ids.is_empty() { diff --git a/editor/src/document/document_message.rs b/editor/src/document/document_message.rs index 00fa5979..bfc370ed 100644 --- a/editor/src/document/document_message.rs +++ b/editor/src/document/document_message.rs @@ -13,6 +13,23 @@ use serde::{Deserialize, Serialize}; #[impl_message(Message, PortfolioMessage, Document)] #[derive(PartialEq, Clone, Debug, Serialize, Deserialize)] pub enum DocumentMessage { + // Sub-messages + #[remain::unsorted] + DispatchOperation(Box), + #[remain::unsorted] + #[child] + Artboard(ArtboardMessage), + #[remain::unsorted] + #[child] + Movement(MovementMessage), + #[remain::unsorted] + #[child] + Overlays(OverlaysMessage), + #[remain::unsorted] + #[child] + TransformLayers(TransformLayerMessage), + + // Messages AbortTransaction, AddSelectedLayers { additional_layers: Vec>, @@ -21,8 +38,6 @@ pub enum DocumentMessage { axis: AlignAxis, aggregate: AlignAggregate, }, - #[child] - Artboard(ArtboardMessage), CommitTransaction, CreateEmptyFolder { container_path: Vec, @@ -35,7 +50,6 @@ pub enum DocumentMessage { DeselectAllLayers, DirtyRenderDocument, DirtyRenderDocumentInOutlineView, - DispatchOperation(Box), DocumentHistoryBackward, DocumentHistoryForward, DocumentStructureChanged, @@ -51,8 +65,6 @@ pub enum DocumentMessage { LayerChanged { affected_layer_path: Vec, }, - #[child] - Movement(MovementMessage), MoveSelectedLayersTo { folder_path: Vec, insert_index: isize, @@ -61,8 +73,6 @@ pub enum DocumentMessage { delta_x: f64, delta_y: f64, }, - #[child] - Overlays(OverlaysMessage), Redo, RenameLayer { layer_path: Vec, @@ -110,8 +120,6 @@ pub enum DocumentMessage { ToggleLayerVisibility { layer_path: Vec, }, - #[child] - TransformLayers(TransformLayerMessage), Undo, UngroupLayers { folder_path: Vec, diff --git a/editor/src/document/document_message_handler.rs b/editor/src/document/document_message_handler.rs index c91380a7..932a903b 100644 --- a/editor/src/document/document_message_handler.rs +++ b/editor/src/document/document_message_handler.rs @@ -445,6 +445,60 @@ impl MessageHandler for Docum #[remain::sorted] match message { + // Sub-messages + #[remain::unsorted] + DispatchOperation(op) => match self.graphene_document.handle_operation(&op) { + Ok(Some(document_responses)) => { + for response in document_responses { + match &response { + DocumentResponse::FolderChanged { path } => responses.push_back(FolderChanged { affected_folder_path: path.clone() }.into()), + DocumentResponse::DeletedLayer { path } => { + self.layer_metadata.remove(path); + } + DocumentResponse::LayerChanged { path } => responses.push_back(LayerChanged { affected_layer_path: path.clone() }.into()), + DocumentResponse::CreatedLayer { path } => { + if self.layer_metadata.contains_key(path) { + log::warn!("CreatedLayer overrides existing layer metadata."); + } + self.layer_metadata.insert(path.clone(), LayerMetadata::new(false)); + + responses.push_back(LayerChanged { affected_layer_path: path.clone() }.into()); + self.layer_range_selection_reference = path.clone(); + responses.push_back( + AddSelectedLayers { + additional_layers: vec![path.clone()], + } + .into(), + ); + } + DocumentResponse::DocumentChanged => responses.push_back(RenderDocument.into()), + }; + responses.push_back(ToolMessage::DocumentIsDirty.into()); + } + } + Err(e) => log::error!("DocumentError: {:?}", e), + Ok(_) => (), + }, + #[remain::unsorted] + Artboard(message) => { + self.artboard_message_handler.process_action(message, (), responses); + } + #[remain::unsorted] + Movement(message) => { + self.movement_handler.process_action(message, (&self.graphene_document, ipp), responses); + } + #[remain::unsorted] + Overlays(message) => { + self.overlays_message_handler.process_action(message, self.overlays_visible, responses); + // responses.push_back(OverlaysMessage::RenderOverlays.into()); + } + #[remain::unsorted] + TransformLayers(message) => { + self.transform_layer_handler + .process_action(message, (&mut self.layer_metadata, &mut self.graphene_document, ipp), responses); + } + + // Messages AbortTransaction => { self.undo(responses).unwrap_or_else(|e| log::warn!("{}", e)); responses.extend([RenderDocument.into(), DocumentStructureChanged.into()]); @@ -494,13 +548,6 @@ impl MessageHandler for Docum responses.push_back(ToolMessage::DocumentIsDirty.into()); } } - Artboard(message) => { - self.artboard_message_handler.process_action( - message, - (Self::layer_metadata_mut_no_borrow_self(&mut self.layer_metadata, &[]), &self.graphene_document, ipp), - responses, - ); - } CommitTransaction => (), CreateEmptyFolder { mut container_path } => { let id = generate_uuid(); @@ -542,38 +589,6 @@ impl MessageHandler for Docum responses.push_front(DocumentMessage::DirtyRenderDocument.into()); } } - DispatchOperation(op) => match self.graphene_document.handle_operation(&op) { - Ok(Some(document_responses)) => { - for response in document_responses { - match &response { - DocumentResponse::FolderChanged { path } => responses.push_back(FolderChanged { affected_folder_path: path.clone() }.into()), - DocumentResponse::DeletedLayer { path } => { - self.layer_metadata.remove(path); - } - DocumentResponse::LayerChanged { path } => responses.push_back(LayerChanged { affected_layer_path: path.clone() }.into()), - DocumentResponse::CreatedLayer { path } => { - if self.layer_metadata.contains_key(path) { - log::warn!("CreatedLayer overrides existing layer metadata."); - } - self.layer_metadata.insert(path.clone(), LayerMetadata::new(false)); - - responses.push_back(LayerChanged { affected_layer_path: path.clone() }.into()); - self.layer_range_selection_reference = path.clone(); - responses.push_back( - AddSelectedLayers { - additional_layers: vec![path.clone()], - } - .into(), - ); - } - DocumentResponse::DocumentChanged => responses.push_back(RenderDocument.into()), - }; - responses.push_back(ToolMessage::DocumentIsDirty.into()); - } - } - Err(e) => log::error!("DocumentError: {:?}", e), - Ok(_) => (), - }, DocumentHistoryBackward => self.undo(responses).unwrap_or_else(|e| log::warn!("{}", e)), DocumentHistoryForward => self.redo(responses).unwrap_or_else(|e| log::warn!("{}", e)), DocumentStructureChanged => { @@ -671,7 +686,6 @@ impl MessageHandler for Docum responses.push_back(FrontendMessage::UpdateDocumentLayer { data: layer_entry }.into()); } } - Movement(message) => self.movement_handler.process_action(message, (&self.graphene_document, ipp), responses), MoveSelectedLayersTo { folder_path, insert_index } => { let selected_layers = self.selected_layers().collect::>(); @@ -704,10 +718,6 @@ impl MessageHandler for Docum } responses.push_back(ToolMessage::DocumentIsDirty.into()); } - Overlays(message) => { - self.overlays_message_handler.process_action(message, self.overlays_visible, responses); - // responses.push_back(OverlaysMessage::RenderOverlays.into()); - } Redo => { responses.push_back(SelectMessage::Abort.into()); responses.push_back(DocumentHistoryForward.into()); @@ -938,9 +948,6 @@ impl MessageHandler for Docum responses.push_back(DocumentOperation::ToggleLayerVisibility { path: layer_path }.into()); responses.push_back(ToolMessage::DocumentIsDirty.into()); } - TransformLayers(message) => self - .transform_layer_handler - .process_action(message, (&mut self.layer_metadata, &mut self.graphene_document, ipp), responses), Undo => { responses.push_back(SelectMessage::Abort.into()); responses.push_back(DocumentHistoryBackward.into()); diff --git a/editor/src/document/overlays_message.rs b/editor/src/document/overlays_message.rs index b7ef2cc8..79354cc8 100644 --- a/editor/src/document/overlays_message.rs +++ b/editor/src/document/overlays_message.rs @@ -8,8 +8,12 @@ use serde::{Deserialize, Serialize}; #[impl_message(Message, DocumentMessage, Overlays)] #[derive(PartialEq, Clone, Debug, Serialize, Deserialize)] pub enum OverlaysMessage { - ClearAllOverlays, + // Sub-messages + #[remain::unsorted] DispatchOperation(Box), + + // Messages + ClearAllOverlays, Rerender, } diff --git a/editor/src/document/overlays_message_handler.rs b/editor/src/document/overlays_message_handler.rs index 518c620f..4451eaef 100644 --- a/editor/src/document/overlays_message_handler.rs +++ b/editor/src/document/overlays_message_handler.rs @@ -15,11 +15,15 @@ impl MessageHandler for OverlaysMessageHandler { #[remain::sorted] match message { - ClearAllOverlays => todo!(), + // Sub-messages + #[remain::unsorted] DispatchOperation(operation) => match self.overlays_graphene_document.handle_operation(&operation) { Ok(_) => (), Err(e) => log::error!("OverlaysError: {:?}", e), }, + + // Messages + ClearAllOverlays => todo!(), Rerender => (), } diff --git a/editor/src/document/portfolio_message.rs b/editor/src/document/portfolio_message.rs index 450249bf..46b01ed4 100644 --- a/editor/src/document/portfolio_message.rs +++ b/editor/src/document/portfolio_message.rs @@ -9,6 +9,12 @@ use serde::{Deserialize, Serialize}; #[impl_message(Message, Portfolio)] #[derive(PartialEq, Clone, Debug, Serialize, Deserialize)] pub enum PortfolioMessage { + // Sub-messages + #[remain::unsorted] + #[child] + Document(DocumentMessage), + + // Messages AutoSaveActiveDocument, AutoSaveDocument { document_id: u64, @@ -28,12 +34,13 @@ pub enum PortfolioMessage { Cut { clipboard: Clipboard, }, - #[child] - Document(DocumentMessage), NewDocument, NextDocument, OpenDocument, - OpenDocumentFile(String, String), + OpenDocumentFile { + document_name: String, + document_serialized_content: String, + }, OpenDocumentFileWithId { document_id: u64, document_name: String, diff --git a/editor/src/document/portfolio_message_handler.rs b/editor/src/document/portfolio_message_handler.rs index de0256e0..38ad14bb 100644 --- a/editor/src/document/portfolio_message_handler.rs +++ b/editor/src/document/portfolio_message_handler.rs @@ -130,6 +130,11 @@ impl MessageHandler for Port #[remain::sorted] match message { + // Sub-messages + #[remain::unsorted] + Document(message) => self.active_document_mut().process_action(message, ipp, responses), + + // Messages AutoSaveActiveDocument => responses.push_back(PortfolioMessage::AutoSaveDocument { document_id: self.active_document_id }.into()), AutoSaveDocument { document_id } => { let document = self.documents.get(&document_id).unwrap(); @@ -235,7 +240,6 @@ impl MessageHandler for Port responses.push_back(Copy { clipboard }.into()); responses.push_back(DeleteSelectedLayers.into()); } - Document(message) => self.active_document_mut().process_action(message, ipp, responses), NewDocument => { let name = self.generate_new_document_name(); let new_document = DocumentMessageHandler::with_name(name, ipp); @@ -252,7 +256,10 @@ impl MessageHandler for Port OpenDocument => { responses.push_back(FrontendMessage::TriggerFileUpload.into()); } - OpenDocumentFile(document_name, document_serialized_content) => { + OpenDocumentFile { + document_name, + document_serialized_content, + } => { responses.push_back( PortfolioMessage::OpenDocumentFileWithId { document_id: generate_uuid(), diff --git a/editor/src/input/input_mapper_message.rs b/editor/src/input/input_mapper_message.rs index c41ade59..829376b6 100644 --- a/editor/src/input/input_mapper_message.rs +++ b/editor/src/input/input_mapper_message.rs @@ -7,10 +7,15 @@ use serde::{Deserialize, Serialize}; #[impl_message(Message, InputMapper)] #[derive(PartialEq, Clone, Debug, Hash, Serialize, Deserialize)] pub enum InputMapperMessage { + // Sub-messages + #[remain::unsorted] #[child] KeyDown(Key), + #[remain::unsorted] #[child] KeyUp(Key), + + // Messages MouseScroll, PointerMove, } diff --git a/editor/src/viewport_tools/tool_message.rs b/editor/src/viewport_tools/tool_message.rs index 34ed73d0..1826ddf8 100644 --- a/editor/src/viewport_tools/tool_message.rs +++ b/editor/src/viewport_tools/tool_message.rs @@ -10,32 +10,49 @@ use serde::{Deserialize, Serialize}; #[impl_message(Message, Tool)] #[derive(PartialEq, Clone, Debug, Serialize, Deserialize)] pub enum ToolMessage { + // Sub-messages + #[remain::unsorted] + #[child] + Crop(CropMessage), + #[remain::unsorted] + #[child] + Ellipse(EllipseMessage), + #[remain::unsorted] + #[child] + Eyedropper(EyedropperMessage), + #[remain::unsorted] + #[child] + Fill(FillMessage), + #[remain::unsorted] + #[child] + Line(LineMessage), + #[remain::unsorted] + #[child] + Navigate(NavigateMessage), + #[remain::unsorted] + #[child] + Path(PathMessage), + #[remain::unsorted] + #[child] + Pen(PenMessage), + #[remain::unsorted] + #[child] + Rectangle(RectangleMessage), + #[remain::unsorted] + #[child] + Select(SelectMessage), + #[remain::unsorted] + #[child] + Shape(ShapeMessage), + + // Messages + #[remain::unsorted] + NoOp, ActivateTool { tool_type: ToolType, }, - #[child] - Crop(CropMessage), DocumentIsDirty, - #[child] - Ellipse(EllipseMessage), - #[child] - Eyedropper(EyedropperMessage), - #[child] - Fill(FillMessage), - #[child] - Line(LineMessage), - #[child] - Navigate(NavigateMessage), - NoOp, - #[child] - Path(PathMessage), - #[child] - Pen(PenMessage), - #[child] - Rectangle(RectangleMessage), ResetColors, - #[child] - Select(SelectMessage), SelectPrimaryColor { color: Color, }, @@ -46,8 +63,6 @@ pub enum ToolMessage { tool_type: ToolType, tool_options: ToolOptions, }, - #[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 edaef974..c16cb7ad 100644 --- a/editor/src/viewport_tools/tool_message_handler.rs +++ b/editor/src/viewport_tools/tool_message_handler.rs @@ -20,6 +20,7 @@ impl MessageHandler { let tool_data = &mut self.tool_state.tool_data; let document_data = &self.tool_state.document_tool_data; @@ -101,6 +102,9 @@ impl MessageHandler { let tool_type = match &tool_message { UpdateCursor | UpdateHints => self.tool_state.tool_data.active_tool_type, diff --git a/editor/src/viewport_tools/tools/crop.rs b/editor/src/viewport_tools/tools/crop.rs index 708de394..b5af28ad 100644 --- a/editor/src/viewport_tools/tools/crop.rs +++ b/editor/src/viewport_tools/tools/crop.rs @@ -10,6 +10,11 @@ pub struct Crop; #[impl_message(Message, ToolMessage, Crop)] #[derive(PartialEq, Clone, Debug, Hash, Serialize, Deserialize)] pub enum CropMessage { + // Standard messages + // #[remain::unsorted] + // Abort, + + // Tool-specific messages MouseMove, } diff --git a/editor/src/viewport_tools/tools/ellipse.rs b/editor/src/viewport_tools/tools/ellipse.rs index 522faf1c..032f8861 100644 --- a/editor/src/viewport_tools/tools/ellipse.rs +++ b/editor/src/viewport_tools/tools/ellipse.rs @@ -23,10 +23,17 @@ pub struct Ellipse { #[impl_message(Message, ToolMessage, Ellipse)] #[derive(PartialEq, Clone, Debug, Hash, Serialize, Deserialize)] pub enum EllipseMessage { + // Standard messages + #[remain::unsorted] Abort, + + // Tool-specific messages DragStart, DragStop, - Resize { center: Key, lock_ratio: Key }, + Resize { + center: Key, + lock_ratio: Key, + }, } impl<'a> MessageHandler> for Ellipse { diff --git a/editor/src/viewport_tools/tools/eyedropper.rs b/editor/src/viewport_tools/tools/eyedropper.rs index 803b67e9..de3f6523 100644 --- a/editor/src/viewport_tools/tools/eyedropper.rs +++ b/editor/src/viewport_tools/tools/eyedropper.rs @@ -23,7 +23,11 @@ pub struct Eyedropper { #[impl_message(Message, ToolMessage, Eyedropper)] #[derive(PartialEq, Clone, Debug, Hash, Serialize, Deserialize)] pub enum EyedropperMessage { + // Standard messages + #[remain::unsorted] Abort, + + // Tool-specific messages LeftMouseDown, RightMouseDown, } diff --git a/editor/src/viewport_tools/tools/fill.rs b/editor/src/viewport_tools/tools/fill.rs index 79872a19..fdeb7c75 100644 --- a/editor/src/viewport_tools/tools/fill.rs +++ b/editor/src/viewport_tools/tools/fill.rs @@ -23,7 +23,11 @@ pub struct Fill { #[impl_message(Message, ToolMessage, Fill)] #[derive(PartialEq, Clone, Debug, Hash, Serialize, Deserialize)] pub enum FillMessage { + // Standard messages + #[remain::unsorted] Abort, + + // Tool-specific messages LeftMouseDown, RightMouseDown, } diff --git a/editor/src/viewport_tools/tools/line.rs b/editor/src/viewport_tools/tools/line.rs index 11920838..9348fd40 100644 --- a/editor/src/viewport_tools/tools/line.rs +++ b/editor/src/viewport_tools/tools/line.rs @@ -26,10 +26,18 @@ pub struct Line { #[impl_message(Message, ToolMessage, Line)] #[derive(PartialEq, Clone, Debug, Hash, Serialize, Deserialize)] pub enum LineMessage { + // Standard messages + #[remain::unsorted] Abort, + + // Tool-specific messages DragStart, DragStop, - Redraw { center: Key, lock_angle: Key, snap_angle: Key }, + Redraw { + center: Key, + lock_angle: Key, + snap_angle: Key, + }, } impl<'a> MessageHandler> for Line { diff --git a/editor/src/viewport_tools/tools/navigate.rs b/editor/src/viewport_tools/tools/navigate.rs index 6fb5ef7b..995982c3 100644 --- a/editor/src/viewport_tools/tools/navigate.rs +++ b/editor/src/viewport_tools/tools/navigate.rs @@ -19,9 +19,18 @@ pub struct Navigate { #[impl_message(Message, ToolMessage, Navigate)] #[derive(PartialEq, Clone, Debug, Hash, Serialize, Deserialize)] pub enum NavigateMessage { + // Standard messages + #[remain::unsorted] Abort, - ClickZoom { zoom_in: bool }, - MouseMove { snap_angle: Key, snap_zoom: Key }, + + // Tool-specific messages + ClickZoom { + zoom_in: bool, + }, + MouseMove { + snap_angle: Key, + snap_zoom: Key, + }, RotateCanvasBegin, TransformCanvasEnd, TranslateCanvasBegin, diff --git a/editor/src/viewport_tools/tools/path.rs b/editor/src/viewport_tools/tools/path.rs index 1132cdcd..9c0c201f 100644 --- a/editor/src/viewport_tools/tools/path.rs +++ b/editor/src/viewport_tools/tools/path.rs @@ -27,9 +27,12 @@ pub struct Path { #[derive(PartialEq, Clone, Debug, Hash, Serialize, Deserialize)] pub enum PathMessage { // Standard messages + #[remain::unsorted] Abort, + #[remain::unsorted] DocumentIsDirty, + // Tool-specific messages DragStart, DragStop, PointerMove, diff --git a/editor/src/viewport_tools/tools/pen.rs b/editor/src/viewport_tools/tools/pen.rs index cfbe8052..3116fba8 100644 --- a/editor/src/viewport_tools/tools/pen.rs +++ b/editor/src/viewport_tools/tools/pen.rs @@ -24,7 +24,11 @@ pub struct Pen { #[impl_message(Message, ToolMessage, Pen)] #[derive(PartialEq, Clone, Debug, Hash, Serialize, Deserialize)] pub enum PenMessage { + // Standard messages + #[remain::unsorted] Abort, + + // Tool-specific messages Confirm, DragStart, DragStop, diff --git a/editor/src/viewport_tools/tools/rectangle.rs b/editor/src/viewport_tools/tools/rectangle.rs index bff95924..78907158 100644 --- a/editor/src/viewport_tools/tools/rectangle.rs +++ b/editor/src/viewport_tools/tools/rectangle.rs @@ -23,10 +23,17 @@ pub struct Rectangle { #[impl_message(Message, ToolMessage, Rectangle)] #[derive(PartialEq, Clone, Debug, Hash, Serialize, Deserialize)] pub enum RectangleMessage { + // Standard messages + #[remain::unsorted] Abort, + + // Tool-specific messages DragStart, DragStop, - Resize { center: Key, lock_ratio: Key }, + Resize { + center: Key, + lock_ratio: Key, + }, } impl<'a> MessageHandler> for Rectangle { diff --git a/editor/src/viewport_tools/tools/select.rs b/editor/src/viewport_tools/tools/select.rs index 4598f1b4..350d403a 100644 --- a/editor/src/viewport_tools/tools/select.rs +++ b/editor/src/viewport_tools/tools/select.rs @@ -24,21 +24,30 @@ pub struct Select { data: SelectToolData, } -// #[remain::sorted] // https://github.com/dtolnay/remain/issues/16 +#[remain::sorted] #[impl_message(Message, ToolMessage, Select)] #[derive(PartialEq, Clone, Debug, Hash, Serialize, Deserialize)] pub enum SelectMessage { // Standard messages + #[remain::unsorted] Abort, + #[remain::unsorted] DocumentIsDirty, - DragStart { add_to_selection: Key }, + // Tool-specific messages + Align { + axis: AlignAxis, + aggregate: AlignAggregate, + }, + DragStart { + add_to_selection: Key, + }, DragStop, - MouseMove { snap_angle: Key }, - - Align { axis: AlignAxis, aggregate: AlignAggregate }, FlipHorizontal, FlipVertical, + MouseMove { + snap_angle: Key, + }, } impl<'a> MessageHandler> for Select { diff --git a/editor/src/viewport_tools/tools/shape.rs b/editor/src/viewport_tools/tools/shape.rs index 75d84226..833015d6 100644 --- a/editor/src/viewport_tools/tools/shape.rs +++ b/editor/src/viewport_tools/tools/shape.rs @@ -24,10 +24,17 @@ pub struct Shape { #[impl_message(Message, ToolMessage, Shape)] #[derive(PartialEq, Clone, Debug, Hash, Serialize, Deserialize)] pub enum ShapeMessage { + // Standard messages + #[remain::unsorted] Abort, + + // Tool-specific messages DragStart, DragStop, - Resize { center: Key, lock_ratio: Key }, + Resize { + center: Key, + lock_ratio: Key, + }, } impl<'a> MessageHandler> for Shape { diff --git a/frontend/wasm/src/api.rs b/frontend/wasm/src/api.rs index b81d9126..56ad15c2 100644 --- a/frontend/wasm/src/api.rs +++ b/frontend/wasm/src/api.rs @@ -164,8 +164,11 @@ impl JsEditorHandle { self.dispatch(message); } - pub fn open_document_file(&self, name: String, content: String) { - let message = PortfolioMessage::OpenDocumentFile(name, content); + pub fn open_document_file(&self, document_name: String, document_serialized_content: String) { + let message = PortfolioMessage::OpenDocumentFile { + document_name, + document_serialized_content, + }; self.dispatch(message); }