diff --git a/desktop/ui/src/input.rs b/desktop/ui/src/input.rs index a98b72cc48..555b2c12ec 100644 --- a/desktop/ui/src/input.rs +++ b/desktop/ui/src/input.rs @@ -20,6 +20,7 @@ pub(crate) enum InputEvent { Key(KeyData), } + #[derive(Clone, Copy, Debug, serde::Serialize, serde::Deserialize)] pub(crate) struct MouseData { pub(crate) x: i32, diff --git a/editor/src/messages/tool/tool_messages/select_tool.rs b/editor/src/messages/tool/tool_messages/select_tool.rs index d559a595b2..597e32ee56 100644 --- a/editor/src/messages/tool/tool_messages/select_tool.rs +++ b/editor/src/messages/tool/tool_messages/select_tool.rs @@ -751,11 +751,12 @@ impl Fsm for SelectToolFsmState { { draw_layer_outline(&mut overlay_context, document, layer, None); - if document.metadata().is_text_layer(layer) { - let layer_to_viewport = document.metadata().transform_to_viewport(layer); - let transformed_quad = layer_to_viewport * text_bounding_box(layer, document, fonts, responses); - overlay_context.dashed_quad(transformed_quad, None, None, Some(7.), Some(5.), None); - } + // if document.metadata().is_text_layer(layer) { + // debug!("This got called"); + // let layer_to_viewport = document.metadata().transform_to_viewport(layer); + // let transformed_quad = layer_to_viewport * text_bounding_box(layer, document, fonts, responses); + // overlay_context.dashed_quad(transformed_quad, None, None, Some(7.), Some(5.), None); + // } } } @@ -1125,7 +1126,7 @@ impl Fsm for SelectToolFsmState { if let Some(intersect) = document.click(input, viewport) { match tool_data.nested_selection_behavior { NestedSelectionBehavior::Shallowest => edit_layer_shallowest_manipulation(document, intersect, responses), - NestedSelectionBehavior::Deepest => edit_layer_deepest_manipulation(intersect, &document.network_interface, responses), + NestedSelectionBehavior::Deepest => {edit_layer_deepest_manipulation(intersect, &document.network_interface, responses)} } } self @@ -1710,6 +1711,7 @@ impl Fsm for SelectToolFsmState { let selected_nodes = document.network_interface.selected_nodes(); let mut selected_layers = selected_nodes.selected_layers(document.metadata()); + // this doesnt seem to get called anywhere. if let Some(layer) = selected_layers.next() { // Check that only one layer is selected if selected_layers.next().is_none() && document.metadata().is_text_layer(layer) { @@ -2072,10 +2074,7 @@ fn edit_layer_shallowest_manipulation(document: &DocumentMessageHandler, layer: /// Called when a double click on a layer in deep select mode. /// If the layer is text, the text tool is selected. fn edit_layer_deepest_manipulation(layer: LayerNodeIdentifier, network_interface: &NodeNetworkInterface, responses: &mut VecDeque) { - if network_interface.document_metadata().is_text_layer(layer) { - responses.add_front(ToolMessage::ActivateTool { tool_type: ToolType::Text }); - responses.add(TextToolMessage::EditSelected); - } + unimplemented!(); } pub fn extend_lasso(lasso_polygon: &mut Vec, point: DVec2) { diff --git a/editor/src/messages/tool/tool_messages/text_tool.rs b/editor/src/messages/tool/tool_messages/text_tool.rs index d88c8c29fc..1c8fa66896 100644 --- a/editor/src/messages/tool/tool_messages/text_tool.rs +++ b/editor/src/messages/tool/tool_messages/text_tool.rs @@ -471,6 +471,7 @@ struct TextToolData { } impl TextToolData { + fn delete_empty_layer(&mut self, fonts: &FontsMessageHandler, responses: &mut VecDeque) -> TextToolFsmState { // Remove the editable textbox UI first self.set_editing(false, fonts, responses); @@ -789,6 +790,7 @@ impl Fsm for TextToolFsmState { TextToolFsmState::Placing } (TextToolFsmState::Ready, TextToolMessage::PointerMove { .. }) => { + // This ensures the cursor only changes if a layer is selected let selected = document.network_interface.selected_nodes(); let mut all_selected = selected.selected_visible_and_unlocked_layers(&document.network_interface); @@ -866,6 +868,9 @@ impl Fsm for TextToolFsmState { snap_data: SnapData::ignore(document, input, viewport, &selected), }); + + // This seems to be the part of code im concerned with btw + let (position, size) = movement.new_size(input.mouse.position, bounds.original_bound_transform, center_position, constrain, snap); // Normalize so the size is always positive let (position, size) = (position.min(position + size), size.abs()); @@ -963,19 +968,28 @@ impl Fsm for TextToolFsmState { } (TextToolFsmState::Placing, TextToolMessage::DragStop) => { let [start, end] = tool_data.cached_resize_bounds; + + let top_left = start.min(end); + let bottom_right = start.max(end); + let has_dragged = (start - end).length_squared() > DRAG_THRESHOLD * DRAG_THRESHOLD; // Check if the user has clicked (no dragging) on some existing text - if !has_dragged && let Some(clicked_text_layer_path) = TextToolData::check_click(document, input, fonts, responses) { + if !has_dragged && let Some(clicked_text_layer_path) = + TextToolData::check_click(document, input, fonts, responses) { tool_data.start_editing_layer(clicked_text_layer_path, self, document, fonts, responses); return TextToolFsmState::Editing; } - + // Otherwise create some new text. The window-aligned transform is in viewport space, so the editing overlay (a screen-space CSS matrix) carries the zoom. - let constraint_size = has_dragged.then_some((start - end).abs() / viewport_zoom(document)); + + // this "constraint" is the bounding box, this is what im concerned with FOUND + // let constraint_size = has_dragged.then_some((start - end).abs() / viewport_zoom(document)); + let constraint_size = + has_dragged.then_some((bottom_right - top_left) / viewport_zoom(document)); let editing_text = EditingText { text: String::new(), - transform: window_aligned_transform(document, start, DVec2::ONE), + transform: window_aligned_transform(document, top_left, DVec2::ONE), typesetting: TypesettingConfig { font_size: tool_options.font_size, letter_spacing: tool_options.letter_spacing, @@ -1042,6 +1056,8 @@ impl Fsm for TextToolFsmState { TextToolFsmState::Editing } } + + // why does something called "updateBounds" change text instead of changing borders (TextToolFsmState::Editing, TextToolMessage::UpdateBounds { new_text }) => { tool_data.new_text = new_text; responses.add(OverlaysMessage::Draw);