diff --git a/editor/src/input/input_mapper.rs b/editor/src/input/input_mapper.rs index 66744235..ea258fa7 100644 --- a/editor/src/input/input_mapper.rs +++ b/editor/src/input/input_mapper.rs @@ -46,7 +46,7 @@ impl Default for Mapping { entry! {action=SelectMessage::MouseMove { axis_align: KeyShift, snap_angle: KeyControl }, message=InputMapperMessage::PointerMove}, entry! {action=SelectMessage::DragStart { add_to_selection: KeyShift }, key_down=Lmb}, entry! {action=SelectMessage::DragStop, key_up=Lmb}, - entry! {action=SelectMessage::EditText, message=InputMapperMessage::DoubleClick}, + entry! {action=SelectMessage::EditLayer, message=InputMapperMessage::DoubleClick}, entry! {action=SelectMessage::Abort, key_down=Rmb}, entry! {action=SelectMessage::Abort, key_down=KeyEscape}, // Navigate diff --git a/editor/src/viewport_tools/tools/select.rs b/editor/src/viewport_tools/tools/select.rs index b7c141d1..0b8e8dd4 100644 --- a/editor/src/viewport_tools/tools/select.rs +++ b/editor/src/viewport_tools/tools/select.rs @@ -15,6 +15,7 @@ use crate::viewport_tools::tool::{DocumentToolData, Fsm, ToolActionHandlerData, use graphene::color::Color; use graphene::document::Document; use graphene::intersection::Quad; +use graphene::layers::layer_info::LayerDataType; use graphene::layers::style::{self, Fill, Stroke}; use graphene::Operation; @@ -46,7 +47,7 @@ pub enum SelectMessage { add_to_selection: Key, }, DragStop, - EditText, + EditLayer, FlipHorizontal, FlipVertical, MouseMove { @@ -252,11 +253,11 @@ impl<'a> MessageHandler> for Select { use SelectToolFsmState::*; match self.fsm_state { - Ready => actions!(SelectMessageDiscriminant; DragStart, MouseMove, EditText), - Dragging => actions!(SelectMessageDiscriminant; DragStop, MouseMove, EditText), - DrawingBox => actions!(SelectMessageDiscriminant; DragStop, MouseMove, Abort, EditText), - ResizingBounds => actions!(SelectMessageDiscriminant; DragStop, MouseMove, Abort, EditText), - RotatingBounds => actions!(SelectMessageDiscriminant; DragStop, MouseMove, Abort, EditText), + Ready => actions!(SelectMessageDiscriminant; DragStart, MouseMove, EditLayer), + Dragging => actions!(SelectMessageDiscriminant; DragStop, MouseMove, EditLayer), + DrawingBox => actions!(SelectMessageDiscriminant; DragStop, MouseMove, Abort, EditLayer), + ResizingBounds => actions!(SelectMessageDiscriminant; DragStop, MouseMove, Abort, EditLayer), + RotatingBounds => actions!(SelectMessageDiscriminant; DragStop, MouseMove, Abort, EditLayer), } } } @@ -553,20 +554,22 @@ impl Fsm for SelectToolFsmState { buffer.into_iter().rev().for_each(|message| responses.push_front(message)); self } - (_, EditText) => { + (_, EditLayer) => { let mouse_pos = input.mouse.position; let tolerance = DVec2::splat(SELECTION_TOLERANCE); let quad = Quad::from_box([mouse_pos - tolerance, mouse_pos + tolerance]); - if document - .graphene_document - .intersects_quad_root(quad) - .last() - .map(|l| document.graphene_document.layer(l).map(|l| l.as_text().is_ok()).unwrap_or(false)) - .unwrap_or(false) - { - responses.push_front(ToolMessage::ActivateTool { tool_type: ToolType::Text }.into()); - responses.push_back(TextMessage::Interact.into()); + if let Some(Ok(intersect)) = document.graphene_document.intersects_quad_root(quad).last().map(|path| document.graphene_document.layer(path)) { + match intersect.data { + LayerDataType::Text(_) => { + responses.push_front(ToolMessage::ActivateTool { tool_type: ToolType::Text }.into()); + responses.push_back(TextMessage::Interact.into()); + } + LayerDataType::Shape(_) => { + responses.push_front(ToolMessage::ActivateTool { tool_type: ToolType::Path }.into()); + } + _ => {} + } } self