diff --git a/editor/src/messages/tool/tool_message_handler.rs b/editor/src/messages/tool/tool_message_handler.rs index 0a263e1996..d4b109a144 100644 --- a/editor/src/messages/tool/tool_message_handler.rs +++ b/editor/src/messages/tool/tool_message_handler.rs @@ -1,5 +1,5 @@ use super::common_functionality::shape_editor::ShapeState; -use super::common_functionality::shapes::shape_utility::ShapeType::{self, Ellipse, Line, Rectangle}; +use super::common_functionality::shapes::shape_utility::ShapeType::{Ellipse, Line, Rectangle}; use super::utility_types::{ToolActionMessageContext, ToolFsmState, tool_message_to_tool_type}; use crate::application::generate_uuid; use crate::messages::layout::utility_types::widget_prelude::*; @@ -75,9 +75,10 @@ impl MessageHandler> for ToolMessageHandler if self.tool_state.tool_data.active_shape_type.is_some() { self.tool_state.tool_data.active_shape_type = None; self.tool_state.tool_data.active_tool_type = ToolType::Shape; + // Restore current_shape from the preserved dropdown selection (options.shape_type) + responses.add(ShapeToolMessage::RestoreShapeFromOptions); } responses.add_front(ToolMessage::ActivateTool { tool_type: ToolType::Shape }); - responses.add(ShapeToolMessage::SetShape { shape: ShapeType::Polygon }); responses.add(ShapeToolMessage::HideShapeTypeWidget { hide: false }) } ToolMessage::ActivateToolBrush => responses.add_front(ToolMessage::ActivateTool { tool_type: ToolType::Brush }), diff --git a/editor/src/messages/tool/tool_messages/shape_tool.rs b/editor/src/messages/tool/tool_messages/shape_tool.rs index e459c9cb11..bd622c85d5 100644 --- a/editor/src/messages/tool/tool_messages/shape_tool.rs +++ b/editor/src/messages/tool/tool_messages/shape_tool.rs @@ -82,23 +82,42 @@ pub enum ShapeOptionsUpdate { #[derive(PartialEq, Clone, Debug, serde::Serialize, serde::Deserialize, specta::Type)] pub enum ShapeToolMessage { // Standard messages - Overlays { context: OverlayContext }, + Overlays { + context: OverlayContext, + }, Abort, WorkingColorChanged, // Tool-specific messages DragStart, DragStop, - HideShapeTypeWidget { hide: bool }, - PointerMove { modifier: ShapeToolModifierKey }, - PointerOutsideViewport { modifier: ShapeToolModifierKey }, - UpdateOptions { options: ShapeOptionsUpdate }, - SetShape { shape: ShapeType }, + HideShapeTypeWidget { + hide: bool, + }, + PointerMove { + modifier: ShapeToolModifierKey, + }, + PointerOutsideViewport { + modifier: ShapeToolModifierKey, + }, + UpdateOptions { + options: ShapeOptionsUpdate, + }, + SetShape { + shape: ShapeType, + }, + /// Restores current_shape from the dropdown selection (options.shape_type) + RestoreShapeFromOptions, IncreaseSides, DecreaseSides, - NudgeSelectedLayers { delta_x: f64, delta_y: f64, resize: Key, resize_opposite_corner: Key }, + NudgeSelectedLayers { + delta_x: f64, + delta_y: f64, + resize: Key, + resize_opposite_corner: Key, + }, } fn create_sides_widget(vertices: u32) -> WidgetInstance { @@ -1090,16 +1109,15 @@ impl Fsm for ShapeToolFsmState { (_, ShapeToolMessage::SetShape { shape }) => { responses.add(DocumentMessage::AbortTransaction); tool_data.data.cleanup(responses); + // Only update current_shape for drawing, preserve options.shape_type (dropdown selection) tool_data.current_shape = shape; - responses.add(ShapeToolMessage::UpdateOptions { - options: ShapeOptionsUpdate::ShapeType(shape), - }); - - responses.add(ShapeToolMessage::UpdateOptions { - options: ShapeOptionsUpdate::ShapeType(shape), - }); ShapeToolFsmState::Ready(shape) } + (_, ShapeToolMessage::RestoreShapeFromOptions) => { + // Restore current_shape from the dropdown selection when returning from Line/Rectangle/Ellipse aliases + tool_data.current_shape = tool_options.shape_type; + ShapeToolFsmState::Ready(tool_options.shape_type) + } (_, ShapeToolMessage::HideShapeTypeWidget { hide }) => { tool_data.hide_shape_option_widget = hide; responses.add(ToolMessage::RefreshToolOptions);