diff --git a/editor/src/dispatcher.rs b/editor/src/dispatcher.rs index c3e90c950..66e82e322 100644 --- a/editor/src/dispatcher.rs +++ b/editor/src/dispatcher.rs @@ -2,6 +2,7 @@ use crate::messages::debug::utility_types::MessageLoggingVerbosity; use crate::messages::defer::DeferMessageContext; use crate::messages::dialog::DialogMessageContext; use crate::messages::layout::layout_message_handler::LayoutMessageContext; +use crate::messages::preferences::preferences_message_handler::PreferencesMessageContext; use crate::messages::prelude::*; use crate::messages::tool::common_functionality::utility_functions::make_path_editable_is_allowed; @@ -277,7 +278,11 @@ impl Dispatcher { menu_bar_message_handler.process_message(message, &mut queue, ()); } Message::Preferences(message) => { - self.message_handlers.preferences_message_handler.process_message(message, &mut queue, ()); + let context = PreferencesMessageContext { + tool_message_handler: &self.message_handlers.tool_message_handler, + }; + + self.message_handlers.preferences_message_handler.process_message(message, &mut queue, context); } Message::Tool(message) => { let Some(document_id) = self.message_handlers.portfolio_message_handler.active_document_id() else { @@ -332,7 +337,7 @@ impl Dispatcher { if let Some(document) = self.message_handlers.portfolio_message_handler.active_document() && !document.graph_view_overlay_open { - list.extend(self.message_handlers.tool_message_handler.actions()); + list.extend(self.message_handlers.tool_message_handler.actions_with_preferences(&self.message_handlers.preferences_message_handler)); } list.extend(self.message_handlers.portfolio_message_handler.actions()); list diff --git a/editor/src/messages/dialog/preferences_dialog/preferences_dialog_message_handler.rs b/editor/src/messages/dialog/preferences_dialog/preferences_dialog_message_handler.rs index e3960982a..5078d4beb 100644 --- a/editor/src/messages/dialog/preferences_dialog/preferences_dialog_message_handler.rs +++ b/editor/src/messages/dialog/preferences_dialog/preferences_dialog_message_handler.rs @@ -283,7 +283,9 @@ impl PreferencesDialogMessageHandler { let brush_tool_description = " Enable the Brush tool to support basic raster-based layer painting.\n\ \n\ - This legacy tool has performance and quality limitations and is slated for replacement in future versions of Graphite that will focus on raster graphics editing. + This legacy experimental tool has performance and quality limitations and is slated for replacement in future versions of Graphite that will focus on raster graphics editing.\n\ + \n\ + Content created with the Brush tool may not be compatible with future versions of Graphite. " .trim(); let brush_tool = vec![ diff --git a/editor/src/messages/preferences/mod.rs b/editor/src/messages/preferences/mod.rs index 916c384f8..3f485b23c 100644 --- a/editor/src/messages/preferences/mod.rs +++ b/editor/src/messages/preferences/mod.rs @@ -1,5 +1,5 @@ mod preferences_message; -mod preferences_message_handler; +pub mod preferences_message_handler; pub mod utility_types; #[doc(inline)] diff --git a/editor/src/messages/preferences/preferences_message_handler.rs b/editor/src/messages/preferences/preferences_message_handler.rs index 98af0baca..a85e384b7 100644 --- a/editor/src/messages/preferences/preferences_message_handler.rs +++ b/editor/src/messages/preferences/preferences_message_handler.rs @@ -3,8 +3,14 @@ use crate::messages::input_mapper::key_mapping::MappingVariant; use crate::messages::portfolio::document::utility_types::wires::GraphWireStyle; use crate::messages::preferences::SelectionMode; use crate::messages::prelude::*; +use crate::messages::tool::utility_types::ToolType; use graph_craft::wasm_application_io::EditorPreferences; +#[derive(ExtractField)] +pub struct PreferencesMessageContext<'a> { + pub tool_message_handler: &'a ToolMessageHandler, +} + #[derive(Debug, PartialEq, Clone, serde::Serialize, serde::Deserialize, specta::Type, ExtractField)] #[serde(default)] pub struct PreferencesMessageHandler { @@ -50,8 +56,10 @@ impl Default for PreferencesMessageHandler { } #[message_handler_data] -impl MessageHandler for PreferencesMessageHandler { - fn process_message(&mut self, message: PreferencesMessage, responses: &mut VecDeque, _: ()) { +impl MessageHandler> for PreferencesMessageHandler { + fn process_message(&mut self, message: PreferencesMessage, responses: &mut VecDeque, context: PreferencesMessageContext) { + let PreferencesMessageContext { tool_message_handler } = context; + match message { // Management messages PreferencesMessage::Load { preferences } => { @@ -84,6 +92,11 @@ impl MessageHandler for PreferencesMessageHandler { } PreferencesMessage::BrushTool { enabled } => { self.brush_tool = enabled; + + if !enabled && tool_message_handler.tool_state.tool_data.active_tool_type == ToolType::Brush { + responses.add(ToolMessage::ActivateToolSelect); + } + responses.add(ToolMessage::RefreshToolShelf); } PreferencesMessage::ModifyLayout { zoom_with_scroll } => { diff --git a/editor/src/messages/tool/tool_message_handler.rs b/editor/src/messages/tool/tool_message_handler.rs index 52f89aac5..0a263e199 100644 --- a/editor/src/messages/tool/tool_message_handler.rs +++ b/editor/src/messages/tool/tool_message_handler.rs @@ -384,8 +384,6 @@ impl MessageHandler> for ToolMessageHandler ActivateToolShape, ActivateToolText, - ActivateToolBrush, - ToggleSelectVsPath, SelectRandomWorkingColor, @@ -400,3 +398,17 @@ impl MessageHandler> for ToolMessageHandler list } } + +impl ToolMessageHandler { + pub fn actions_with_preferences(&self, preferences: &PreferencesMessageHandler) -> ActionList { + let mut list = self.actions(); + + if preferences.brush_tool { + list.extend(actions!(ToolMessageDiscriminant; + ActivateToolBrush, + )); + } + + list + } +}