Skip to content

Commit 42d72a7

Browse files
Sidharth-Singh10Keavon
authored andcommitted
Fix: delete empty text layer on right click
1 parent e2bef95 commit 42d72a7

File tree

5 files changed

+39
-25
lines changed

5 files changed

+39
-25
lines changed

editor/src/messages/input_mapper/input_mappings.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,6 @@ pub fn input_mappings() -> Mapping {
156156
// TextToolMessage
157157
entry!(KeyUp(MouseLeft); action_dispatch=TextToolMessage::Interact),
158158
entry!(KeyDown(Escape); action_dispatch=TextToolMessage::CommitText),
159-
entry!(KeyUp(MouseRight); action_dispatch=TextToolMessage::CommitText),
160159
entry!(KeyDown(Enter); modifiers=[Accel], action_dispatch=TextToolMessage::CommitText),
161160
//
162161
// GradientToolMessage

editor/src/messages/tool/tool_messages/text_tool.rs

Lines changed: 34 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ pub enum TextToolMessage {
5656
CommitText,
5757
EditSelected,
5858
Interact,
59-
TextChange { new_text: String },
59+
TextChange { new_text: String, is_right_click: bool },
6060
UpdateBounds { new_text: String },
6161
UpdateOptions(TextOptionsUpdate),
6262
}
@@ -241,6 +241,19 @@ struct TextToolData {
241241
}
242242

243243
impl TextToolData {
244+
fn delete_empty_layer(&mut self, font_cache: &FontCache, responses: &mut VecDeque<Message>) -> TextToolFsmState {
245+
// Remove the editable textbox UI first
246+
self.set_editing(false, font_cache, responses);
247+
248+
// Delete the empty text layer and update the graph
249+
responses.add(NodeGraphMessage::DeleteNodes {
250+
node_ids: vec![self.layer.to_node()],
251+
delete_children: true,
252+
});
253+
responses.add(NodeGraphMessage::RunDocumentGraph);
254+
255+
TextToolFsmState::Ready
256+
}
244257
/// Set the editing state of the currently modifying layer
245258
fn set_editing(&self, editable: bool, font_cache: &FontCache, responses: &mut VecDeque<Message>) {
246259
if let Some(editing_text) = self.editing_text.as_ref().filter(|_| editable) {
@@ -479,32 +492,33 @@ impl Fsm for TextToolFsmState {
479492
}
480493
(TextToolFsmState::Editing, TextToolMessage::CommitText) => {
481494
if tool_data.new_text.is_empty() {
482-
// Remove the editable textbox UI first
483-
tool_data.set_editing(false, font_cache, responses);
484-
485-
// Delete the empty text layer and update the graph
486-
responses.add(NodeGraphMessage::DeleteNodes {
487-
node_ids: vec![tool_data.layer.to_node()],
488-
delete_children: true,
489-
});
490-
responses.add(NodeGraphMessage::RunDocumentGraph);
491-
492-
return TextToolFsmState::Ready;
495+
return tool_data.delete_empty_layer(font_cache, responses);
493496
}
494497

495498
responses.add(FrontendMessage::TriggerTextCommit);
496499
TextToolFsmState::Editing
497500
}
498-
(TextToolFsmState::Editing, TextToolMessage::TextChange { new_text }) => {
499-
tool_data.set_editing(false, font_cache, responses);
501+
(TextToolFsmState::Editing, TextToolMessage::TextChange { new_text, is_right_click }) => {
502+
tool_data.new_text = new_text;
500503

501-
responses.add(NodeGraphMessage::SetInput {
502-
input_connector: InputConnector::node(graph_modification_utils::get_text_id(tool_data.layer, &document.network_interface).unwrap(), 1),
503-
input: NodeInput::value(TaggedValue::String(new_text), false),
504-
});
505-
responses.add(NodeGraphMessage::RunDocumentGraph);
504+
if !is_right_click {
505+
tool_data.set_editing(false, font_cache, responses);
506506

507-
TextToolFsmState::Ready
507+
responses.add(NodeGraphMessage::SetInput {
508+
input_connector: InputConnector::node(graph_modification_utils::get_text_id(tool_data.layer, &document.network_interface).unwrap(), 1),
509+
input: NodeInput::value(TaggedValue::String(tool_data.new_text.clone()), false),
510+
});
511+
responses.add(NodeGraphMessage::RunDocumentGraph);
512+
513+
TextToolFsmState::Ready
514+
} else {
515+
if tool_data.new_text.is_empty() {
516+
return tool_data.delete_empty_layer(font_cache, responses);
517+
}
518+
519+
responses.add(FrontendMessage::TriggerTextCommit);
520+
TextToolFsmState::Editing
521+
}
508522
}
509523
(TextToolFsmState::Editing, TextToolMessage::UpdateBounds { new_text }) => {
510524
tool_data.new_text = new_text;

frontend/src/components/panels/Document.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,7 @@
300300
export function triggerTextCommit() {
301301
if (!textInput) return;
302302
const textCleaned = textInputCleanup(textInput.innerText);
303-
editor.handle.onChangeText(textCleaned);
303+
editor.handle.onChangeText(textCleaned, false);
304304
}
305305
306306
export async function displayEditableTextbox(displayEditableTextbox: DisplayEditableTextbox) {

frontend/src/io-managers/input.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,8 @@ export function createInputManager(editor: Editor, dialog: DialogState, portfoli
172172
}
173173

174174
if (!inTextInput && !inContextMenu) {
175-
if (textToolInteractiveInputElement) editor.handle.onChangeText(textInputCleanup(textToolInteractiveInputElement.innerText));
175+
const isRightClick = e.button === 2;
176+
if (textToolInteractiveInputElement) editor.handle.onChangeText(textInputCleanup(textToolInteractiveInputElement.innerText), isRightClick);
176177
else viewportPointerInteractionOngoing = isTargetingCanvas instanceof Element;
177178
}
178179

frontend/wasm/src/editor_api.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -433,8 +433,8 @@ impl EditorHandle {
433433

434434
/// A text box was committed
435435
#[wasm_bindgen(js_name = onChangeText)]
436-
pub fn on_change_text(&self, new_text: String) -> Result<(), JsValue> {
437-
let message = TextToolMessage::TextChange { new_text };
436+
pub fn on_change_text(&self, new_text: String, is_right_click: bool) -> Result<(), JsValue> {
437+
let message = TextToolMessage::TextChange { new_text, is_right_click };
438438
self.dispatch(message);
439439

440440
Ok(())

0 commit comments

Comments
 (0)