Fix the Brush tool being accessible while disabled in preferences
Some checks are pending
Editor: Dev & CI / build (push) Waiting to run
Editor: Dev & CI / cargo-deny (push) Waiting to run

This commit is contained in:
Keavon Chambers 2025-12-20 03:48:41 -08:00
parent 3000519a10
commit 0a5e65bc9d
5 changed files with 40 additions and 8 deletions

View file

@ -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

View file

@ -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![

View file

@ -1,5 +1,5 @@
mod preferences_message;
mod preferences_message_handler;
pub mod preferences_message_handler;
pub mod utility_types;
#[doc(inline)]

View file

@ -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<PreferencesMessage, ()> for PreferencesMessageHandler {
fn process_message(&mut self, message: PreferencesMessage, responses: &mut VecDeque<Message>, _: ()) {
impl MessageHandler<PreferencesMessage, PreferencesMessageContext<'_>> for PreferencesMessageHandler {
fn process_message(&mut self, message: PreferencesMessage, responses: &mut VecDeque<Message>, context: PreferencesMessageContext) {
let PreferencesMessageContext { tool_message_handler } = context;
match message {
// Management messages
PreferencesMessage::Load { preferences } => {
@ -84,6 +92,11 @@ impl MessageHandler<PreferencesMessage, ()> 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 } => {

View file

@ -384,8 +384,6 @@ impl MessageHandler<ToolMessage, ToolMessageContext<'_>> for ToolMessageHandler
ActivateToolShape,
ActivateToolText,
ActivateToolBrush,
ToggleSelectVsPath,
SelectRandomWorkingColor,
@ -400,3 +398,17 @@ impl MessageHandler<ToolMessage, ToolMessageContext<'_>> 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
}
}