Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions desktop/ui/src/input.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
19 changes: 9 additions & 10 deletions editor/src/messages/tool/tool_messages/select_tool.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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);
// }
}
}

Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -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<Message>) {
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<DVec2>, point: DVec2) {
Expand Down
24 changes: 20 additions & 4 deletions editor/src/messages/tool/tool_messages/text_tool.rs
Original file line number Diff line number Diff line change
Expand Up @@ -471,6 +471,7 @@ struct TextToolData {
}

impl TextToolData {

fn delete_empty_layer(&mut self, fonts: &FontsMessageHandler, responses: &mut VecDeque<Message>) -> TextToolFsmState {
// Remove the editable textbox UI first
self.set_editing(false, fonts, responses);
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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());
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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);
Expand Down