Improving UX of TextBox

This commit is contained in:
b-guild
2025-11-01 00:40:52 -07:00
parent e7e9e70638
commit c164ddee5d
3 changed files with 15 additions and 11 deletions
@@ -140,15 +140,12 @@ impl TileColliderEditor {
let name_field = TextBuilder::new(WidgetBuilder::new().on_column(3))
.with_text(collider_layer.name.clone())
.build(ctx);
let custom_field = TextBoxBuilder::new(
WidgetBuilder::new()
.with_visibility(value.is_custom())
.with_min_size(Vector2::new(0.0, 100.0)),
)
.with_multiline(true)
.with_wrap(WrapMode::Word)
.with_text_commit_mode(TextCommitMode::Changed)
.build(ctx);
let custom_field =
TextBoxBuilder::new(WidgetBuilder::new().with_visibility(value.is_custom()))
.with_multiline(true)
.with_wrap(WrapMode::Word)
.with_text_commit_mode(TextCommitMode::Changed)
.build(ctx);
let error_field = TextBuilder::new(WidgetBuilder::new().with_visibility(false))
.with_wrap(WrapMode::Word)
.with_horizontal_text_alignment(HorizontalAlignment::Center)
+3 -1
View File
@@ -2,7 +2,7 @@ use fyrox::{
core::{pool::Handle, variable::InheritableVariable},
engine::Engine,
gui::{
formatted_text::RunSet,
formatted_text::{RunSet, WrapMode},
message::{MessageDirection, UiMessage},
stack_panel::StackPanelBuilder,
text::{Text, TextBuilder, TextMessage},
@@ -29,6 +29,8 @@ impl BBCodePanel {
pub fn new(inspector_head: Handle<UiNode>, ctx: &mut BuildContext) -> Self {
let text_box = TextBoxBuilder::new(WidgetBuilder::new())
.with_text_commit_mode(TextCommitMode::Changed)
.with_multiline(true)
.with_wrap(WrapMode::Word)
.build(ctx);
let root_widget = StackPanelBuilder::new(
WidgetBuilder::new()
+6 -1
View File
@@ -671,6 +671,7 @@ impl TextBox {
self.char_index_to_position(position + 1)
.unwrap_or_default(),
);
self.invalidate_layout();
if *self.commit_mode == TextCommitMode::Immediate {
ui.send_message(TextMessage::text(
self.handle,
@@ -701,6 +702,7 @@ impl TextBox {
self.char_index_to_position(position + str.chars().count())
.unwrap_or_default(),
);
self.invalidate_layout();
if *self.commit_mode == TextCommitMode::Immediate {
ui.send_message(TextMessage::text(
self.handle,
@@ -724,6 +726,7 @@ impl TextBox {
self.formatted_text.borrow_mut().remove_range(range);
self.selection_range.set_value_and_mark_modified(None);
self.set_caret_position(selection.left());
self.invalidate_layout();
}
/// Returns current text length in characters.
@@ -808,6 +811,7 @@ impl TextBox {
text.remove_at(position);
text.build();
drop(text);
self.invalidate_layout();
if *self.commit_mode == TextCommitMode::Immediate {
ui.send_message(TextMessage::text(
@@ -833,6 +837,7 @@ impl TextBox {
self.formatted_text.borrow_mut().build();
self.set_caret_position(selection.left());
self.selection_range.set_value_and_mark_modified(None);
self.invalidate_layout();
if *self.commit_mode == TextCommitMode::Immediate {
ui.send_message(TextMessage::text(
self.handle(),
@@ -1153,7 +1158,7 @@ impl Control for TextBox {
self.remove_char(HorizontalDirection::Right, ui);
}
KeyCode::NumpadEnter | KeyCode::Enter if *self.editable => {
if *self.multiline {
if *self.multiline && !ui.keyboard_modifiers.shift {
self.insert_char('\n', ui);
} else if *self.commit_mode == TextCommitMode::LostFocusPlusEnter {
ui.send_message(TextMessage::text(