Skip to content

Commit 0a5e65b

Browse files
committed
Fix the Brush tool being accessible while disabled in preferences
1 parent 3000519 commit 0a5e65b

File tree

5 files changed

+40
-8
lines changed

5 files changed

+40
-8
lines changed

editor/src/dispatcher.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ use crate::messages::debug::utility_types::MessageLoggingVerbosity;
22
use crate::messages::defer::DeferMessageContext;
33
use crate::messages::dialog::DialogMessageContext;
44
use crate::messages::layout::layout_message_handler::LayoutMessageContext;
5+
use crate::messages::preferences::preferences_message_handler::PreferencesMessageContext;
56
use crate::messages::prelude::*;
67
use crate::messages::tool::common_functionality::utility_functions::make_path_editable_is_allowed;
78

@@ -277,7 +278,11 @@ impl Dispatcher {
277278
menu_bar_message_handler.process_message(message, &mut queue, ());
278279
}
279280
Message::Preferences(message) => {
280-
self.message_handlers.preferences_message_handler.process_message(message, &mut queue, ());
281+
let context = PreferencesMessageContext {
282+
tool_message_handler: &self.message_handlers.tool_message_handler,
283+
};
284+
285+
self.message_handlers.preferences_message_handler.process_message(message, &mut queue, context);
281286
}
282287
Message::Tool(message) => {
283288
let Some(document_id) = self.message_handlers.portfolio_message_handler.active_document_id() else {
@@ -332,7 +337,7 @@ impl Dispatcher {
332337
if let Some(document) = self.message_handlers.portfolio_message_handler.active_document()
333338
&& !document.graph_view_overlay_open
334339
{
335-
list.extend(self.message_handlers.tool_message_handler.actions());
340+
list.extend(self.message_handlers.tool_message_handler.actions_with_preferences(&self.message_handlers.preferences_message_handler));
336341
}
337342
list.extend(self.message_handlers.portfolio_message_handler.actions());
338343
list

editor/src/messages/dialog/preferences_dialog/preferences_dialog_message_handler.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,9 @@ impl PreferencesDialogMessageHandler {
283283
let brush_tool_description = "
284284
Enable the Brush tool to support basic raster-based layer painting.\n\
285285
\n\
286-
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.
286+
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\
287+
\n\
288+
Content created with the Brush tool may not be compatible with future versions of Graphite.
287289
"
288290
.trim();
289291
let brush_tool = vec![

editor/src/messages/preferences/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
mod preferences_message;
2-
mod preferences_message_handler;
2+
pub mod preferences_message_handler;
33
pub mod utility_types;
44

55
#[doc(inline)]

editor/src/messages/preferences/preferences_message_handler.rs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,14 @@ use crate::messages::input_mapper::key_mapping::MappingVariant;
33
use crate::messages::portfolio::document::utility_types::wires::GraphWireStyle;
44
use crate::messages::preferences::SelectionMode;
55
use crate::messages::prelude::*;
6+
use crate::messages::tool::utility_types::ToolType;
67
use graph_craft::wasm_application_io::EditorPreferences;
78

9+
#[derive(ExtractField)]
10+
pub struct PreferencesMessageContext<'a> {
11+
pub tool_message_handler: &'a ToolMessageHandler,
12+
}
13+
814
#[derive(Debug, PartialEq, Clone, serde::Serialize, serde::Deserialize, specta::Type, ExtractField)]
915
#[serde(default)]
1016
pub struct PreferencesMessageHandler {
@@ -50,8 +56,10 @@ impl Default for PreferencesMessageHandler {
5056
}
5157

5258
#[message_handler_data]
53-
impl MessageHandler<PreferencesMessage, ()> for PreferencesMessageHandler {
54-
fn process_message(&mut self, message: PreferencesMessage, responses: &mut VecDeque<Message>, _: ()) {
59+
impl MessageHandler<PreferencesMessage, PreferencesMessageContext<'_>> for PreferencesMessageHandler {
60+
fn process_message(&mut self, message: PreferencesMessage, responses: &mut VecDeque<Message>, context: PreferencesMessageContext) {
61+
let PreferencesMessageContext { tool_message_handler } = context;
62+
5563
match message {
5664
// Management messages
5765
PreferencesMessage::Load { preferences } => {
@@ -84,6 +92,11 @@ impl MessageHandler<PreferencesMessage, ()> for PreferencesMessageHandler {
8492
}
8593
PreferencesMessage::BrushTool { enabled } => {
8694
self.brush_tool = enabled;
95+
96+
if !enabled && tool_message_handler.tool_state.tool_data.active_tool_type == ToolType::Brush {
97+
responses.add(ToolMessage::ActivateToolSelect);
98+
}
99+
87100
responses.add(ToolMessage::RefreshToolShelf);
88101
}
89102
PreferencesMessage::ModifyLayout { zoom_with_scroll } => {

editor/src/messages/tool/tool_message_handler.rs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -384,8 +384,6 @@ impl MessageHandler<ToolMessage, ToolMessageContext<'_>> for ToolMessageHandler
384384
ActivateToolShape,
385385
ActivateToolText,
386386

387-
ActivateToolBrush,
388-
389387
ToggleSelectVsPath,
390388

391389
SelectRandomWorkingColor,
@@ -400,3 +398,17 @@ impl MessageHandler<ToolMessage, ToolMessageContext<'_>> for ToolMessageHandler
400398
list
401399
}
402400
}
401+
402+
impl ToolMessageHandler {
403+
pub fn actions_with_preferences(&self, preferences: &PreferencesMessageHandler) -> ActionList {
404+
let mut list = self.actions();
405+
406+
if preferences.brush_tool {
407+
list.extend(actions!(ToolMessageDiscriminant;
408+
ActivateToolBrush,
409+
));
410+
}
411+
412+
list
413+
}
414+
}

0 commit comments

Comments
 (0)