From 794980fb33c4b341443576194d05d048846bd8f1 Mon Sep 17 00:00:00 2001 From: 0HyperCube <78500760+0HyperCube@users.noreply.github.com> Date: Thu, 3 Feb 2022 19:08:39 +0000 Subject: [PATCH] Fix overlays on document switching (#505) * Fix overlays on document switching * Fix generating new document * Move messages * Abort tool when deleteing active document Co-authored-by: Keavon Chambers --- editor/src/document/portfolio_message.rs | 3 +++ editor/src/document/portfolio_message_handler.rs | 14 +++++++++++--- editor/src/viewport_tools/tool_message.rs | 1 + editor/src/viewport_tools/tool_message_handler.rs | 5 +++++ frontend/wasm/src/api.rs | 3 +++ 5 files changed, 23 insertions(+), 3 deletions(-) diff --git a/editor/src/document/portfolio_message.rs b/editor/src/document/portfolio_message.rs index 6a988d35..6859440c 100644 --- a/editor/src/document/portfolio_message.rs +++ b/editor/src/document/portfolio_message.rs @@ -60,6 +60,9 @@ pub enum PortfolioMessage { SelectDocument { document_id: u64, }, + SetActiveDcoument { + document_id: u64, + }, UpdateDocumentBar, UpdateOpenDocumentsList, } diff --git a/editor/src/document/portfolio_message_handler.rs b/editor/src/document/portfolio_message_handler.rs index 092de83c..2a0188a0 100644 --- a/editor/src/document/portfolio_message_handler.rs +++ b/editor/src/document/portfolio_message_handler.rs @@ -56,6 +56,7 @@ impl PortfolioMessageHandler { fn load_document(&mut self, new_document: DocumentMessageHandler, document_id: u64, replace_first_empty: bool, responses: &mut VecDeque) { // Special case when loading a document on an empty page if replace_first_empty && self.active_document().is_unmodified_default() { + responses.push_back(ToolMessage::AbortCurrentTool.into()); responses.push_back(PortfolioMessage::CloseDocument { document_id: self.active_document_id }.into()); let active_document_index = self @@ -215,6 +216,7 @@ impl MessageHandler for Port CloseDocumentWithConfirmation { document_id } => { let target_document = self.documents.get(&document_id).unwrap(); if target_document.is_saved() { + responses.push_back(ToolMessage::AbortCurrentTool.into()); responses.push_back(PortfolioMessage::CloseDocument { document_id }.into()); } else { responses.push_back(FrontendMessage::DisplayConfirmationToCloseDocument { document_id }.into()); @@ -246,13 +248,14 @@ impl MessageHandler for Port let name = self.generate_new_document_name(); let new_document = DocumentMessageHandler::with_name(name, ipp); let document_id = generate_uuid(); - self.active_document_id = document_id; + responses.push_back(ToolMessage::AbortCurrentTool.into()); self.load_document(new_document, document_id, false, responses); } NextDocument => { let current_index = self.document_index(self.active_document_id); let next_index = (current_index + 1) % self.document_ids.len(); let next_id = self.document_ids[next_index]; + responses.push_back(PortfolioMessage::SelectDocument { document_id: next_id }.into()); } OpenDocument => { @@ -363,16 +366,21 @@ impl MessageHandler for Port if !active_document.is_saved() { responses.push_back(PortfolioMessage::AutoSaveDocument { document_id: self.active_document_id }.into()); } - self.active_document_id = document_id; + responses.push_back(ToolMessage::AbortCurrentTool.into()); + responses.push_back(SetActiveDcoument { document_id }.into()); + responses.push_back(FrontendMessage::UpdateActiveDocument { document_id }.into()); responses.push_back(RenderDocument.into()); responses.push_back(DocumentMessage::DocumentStructureChanged.into()); - for layer in self.active_document().layer_metadata.keys() { + for layer in self.documents.get(&document_id).unwrap().layer_metadata.keys() { responses.push_back(DocumentMessage::LayerChanged { affected_layer_path: layer.clone() }.into()); } responses.push_back(ToolMessage::DocumentIsDirty.into()); responses.push_back(PortfolioMessage::UpdateDocumentBar.into()); } + SetActiveDcoument { document_id } => { + self.active_document_id = document_id; + } UpdateDocumentBar => { let active_document = self.active_document(); active_document.register_properties(responses, LayoutTarget::DocumentBar) diff --git a/editor/src/viewport_tools/tool_message.rs b/editor/src/viewport_tools/tool_message.rs index 95809e13..5207b874 100644 --- a/editor/src/viewport_tools/tool_message.rs +++ b/editor/src/viewport_tools/tool_message.rs @@ -80,6 +80,7 @@ pub enum ToolMessage { // Messages #[remain::unsorted] NoOp, + AbortCurrentTool, ActivateTool { tool_type: ToolType, }, diff --git a/editor/src/viewport_tools/tool_message_handler.rs b/editor/src/viewport_tools/tool_message_handler.rs index 96d4ad09..c9b51b51 100644 --- a/editor/src/viewport_tools/tool_message_handler.rs +++ b/editor/src/viewport_tools/tool_message_handler.rs @@ -22,6 +22,11 @@ impl MessageHandler { + if let Some(tool_message) = standard_tool_message(self.tool_state.tool_data.active_tool_type, StandardToolMessageType::Abort) { + responses.push_front(tool_message.into()); + } + } ActivateTool { tool_type } => { let tool_data = &mut self.tool_state.tool_data; let document_data = &self.tool_state.document_tool_data; diff --git a/frontend/wasm/src/api.rs b/frontend/wasm/src/api.rs index 3e66c614..ebc520c0 100644 --- a/frontend/wasm/src/api.rs +++ b/frontend/wasm/src/api.rs @@ -188,6 +188,9 @@ impl JsEditorHandle { } pub fn close_document(&self, document_id: u64) { + let message = ToolMessage::AbortCurrentTool; + self.dispatch(message); + let message = PortfolioMessage::CloseDocument { document_id }; self.dispatch(message); }