Struct jumpy::prelude::egui::TextEdit

pub struct TextEdit<'t> {
Show 20 fields text: &'t mut dyn TextBuffer, hint_text: WidgetText, id: Option<Id>, id_source: Option<Id>, font_selection: FontSelection, text_color: Option<Color32>, layouter: Option<&'t mut dyn FnMut(&Ui, &str, f32) -> Arc<Galley>>, password: bool, frame: bool, margin: Vec2, multiline: bool, interactive: bool, desired_width: Option<f32>, desired_height_rows: usize, event_filter: EventFilter, cursor_at_end: bool, min_size: Vec2, align: Align2, clip_text: bool, char_limit: usize,
}
Expand description

A text region that the user can edit the contents of.

See also Ui::text_edit_singleline and Ui::text_edit_multiline.

Example:

let response = ui.add(egui::TextEdit::singleline(&mut my_string));
if response.changed() {
    // …
}
if response.lost_focus() && ui.input(|i| i.key_pressed(egui::Key::Enter)) {
    // …
}

To fill an Ui with a TextEdit use Ui::add_sized:

ui.add_sized(ui.available_size(), egui::TextEdit::multiline(&mut my_string));

You can also use TextEdit to show text that can be selected, but not edited. To do so, pass in a &mut reference to a &str, for instance:

fn selectable_text(ui: &mut egui::Ui, mut text: &str) {
    ui.add(egui::TextEdit::multiline(&mut text));
}

§Advanced usage

See TextEdit::show.

§Other

The background color of a TextEdit is Visuals::extreme_bg_color.

Fields§

§text: &'t mut dyn TextBuffer§hint_text: WidgetText§id: Option<Id>§id_source: Option<Id>§font_selection: FontSelection§text_color: Option<Color32>§layouter: Option<&'t mut dyn FnMut(&Ui, &str, f32) -> Arc<Galley>>§password: bool§frame: bool§margin: Vec2§multiline: bool§interactive: bool§desired_width: Option<f32>§desired_height_rows: usize§event_filter: EventFilter§cursor_at_end: bool§min_size: Vec2§align: Align2§clip_text: bool§char_limit: usize

Implementations§

§

impl<'t> TextEdit<'t>

pub fn load_state(ctx: &Context, id: Id) -> Option<TextEditState>

pub fn store_state(ctx: &Context, id: Id, state: TextEditState)

§

impl<'t> TextEdit<'t>

pub fn singleline(text: &'t mut dyn TextBuffer) -> TextEdit<'t>

No newlines (\n) allowed. Pressing enter key will result in the TextEdit losing focus (response.lost_focus).

pub fn multiline(text: &'t mut dyn TextBuffer) -> TextEdit<'t>

A TextEdit for multiple lines. Pressing enter key will create a new line.

pub fn code_editor(self) -> TextEdit<'t>

Build a TextEdit focused on code editing. By default it comes with:

  • monospaced font
  • focus lock (tab will insert a tab character instead of moving focus)

pub fn id(self, id: Id) -> TextEdit<'t>

Use if you want to set an explicit Id for this widget.

pub fn id_source(self, id_source: impl Hash) -> TextEdit<'t>

A source for the unique Id, e.g. .id_source("second_text_edit_field") or .id_source(loop_index).

pub fn hint_text(self, hint_text: impl Into<WidgetText>) -> TextEdit<'t>

Show a faint hint text when the text field is empty.

If the hint text needs to be persisted even when the text field has input, the following workaround can be used:

let text_edit = egui::TextEdit::multiline(&mut my_string)
    .desired_width(f32::INFINITY);
let output = text_edit.show(ui);
let painter = ui.painter_at(output.response.rect);
let galley = painter.layout(
    String::from("Enter text"),
    FontId::default(),
    Color32::from_rgba_premultiplied(100, 100, 100, 100),
    f32::INFINITY
);
painter.galley(output.text_draw_pos, galley);

pub fn password(self, password: bool) -> TextEdit<'t>

If true, hide the letters from view and prevent copying from the field.

pub fn font(self, font_selection: impl Into<FontSelection>) -> TextEdit<'t>

Pick a FontId or TextStyle.

pub fn text_style(self, text_style: TextStyle) -> TextEdit<'t>

👎Deprecated: Use .font(…) instead

pub fn text_color(self, text_color: Color32) -> TextEdit<'t>

pub fn text_color_opt(self, text_color: Option<Color32>) -> TextEdit<'t>

pub fn layouter( self, layouter: &'t mut dyn FnMut(&Ui, &str, f32) -> Arc<Galley>, ) -> TextEdit<'t>

Override how text is being shown inside the TextEdit.

This can be used to implement things like syntax highlighting.

This function will be called at least once per frame, so it is strongly suggested that you cache the results of any syntax highlighter so as not to waste CPU highlighting the same string every frame.

The arguments is the enclosing Ui (so you can access e.g. Ui::fonts), the text and the wrap width.

let mut layouter = |ui: &egui::Ui, string: &str, wrap_width: f32| {
    let mut layout_job: egui::text::LayoutJob = my_memoized_highlighter(string);
    layout_job.wrap.max_width = wrap_width;
    ui.fonts(|f| f.layout_job(layout_job))
};
ui.add(egui::TextEdit::multiline(&mut my_code).layouter(&mut layouter));

pub fn interactive(self, interactive: bool) -> TextEdit<'t>

Default is true. If set to false then you cannot interact with the text (neither edit or select it).

Consider using Ui::add_enabled instead to also give the TextEdit a greyed out look.

pub fn frame(self, frame: bool) -> TextEdit<'t>

Default is true. If set to false there will be no frame showing that this is editable text!

pub fn margin(self, margin: Vec2) -> TextEdit<'t>

Set margin of text. Default is [4.0,2.0]

pub fn desired_width(self, desired_width: f32) -> TextEdit<'t>

Set to 0.0 to keep as small as possible. Set to f32::INFINITY to take up all available space (i.e. disable automatic word wrap).

pub fn desired_rows(self, desired_height_rows: usize) -> TextEdit<'t>

Set the number of rows to show by default. The default for singleline text is 1. The default for multiline text is 4.

pub fn lock_focus(self, tab_will_indent: bool) -> TextEdit<'t>

When false (default), pressing TAB will move focus to the next widget.

When true, the widget will keep the focus and pressing TAB will insert the '\t' character.

pub fn cursor_at_end(self, b: bool) -> TextEdit<'t>

When true (default), the cursor will initially be placed at the end of the text.

When false, the cursor will initially be placed at the beginning of the text.

pub fn clip_text(self, b: bool) -> TextEdit<'t>

When true (default), overflowing text will be clipped.

When false, widget width will expand to make all text visible.

This only works for singleline TextEdit.

pub fn char_limit(self, limit: usize) -> TextEdit<'t>

Sets the limit for the amount of characters can be entered

This only works for singleline TextEdit

pub fn horizontal_align(self, align: Align) -> TextEdit<'t>

Set the horizontal align of the inner text.

pub fn vertical_align(self, align: Align) -> TextEdit<'t>

Set the vertical align of the inner text.

pub fn min_size(self, min_size: Vec2) -> TextEdit<'t>

Set the minimum size of the TextEdit.

§

impl<'t> TextEdit<'t>

pub fn show(self, ui: &mut Ui) -> TextEditOutput

Show the TextEdit, returning a rich TextEditOutput.

let output = egui::TextEdit::singleline(&mut my_string).show(ui);
if let Some(text_cursor_range) = output.cursor_range {
    use egui::TextBuffer as _;
    let selected_chars = text_cursor_range.as_sorted_char_range();
    let selected_text = my_string.char_range(selected_chars);
    ui.label("Selected text: ");
    ui.monospace(selected_text);
}

Trait Implementations§

§

impl<'t> Widget for TextEdit<'t>

§

fn ui(self, ui: &mut Ui) -> Response

Allocate space, interact, paint, and return a Response. Read more
§

impl<'t> WidgetWithState for TextEdit<'t>

Auto Trait Implementations§

§

impl<'t> Freeze for TextEdit<'t>

§

impl<'t> !RefUnwindSafe for TextEdit<'t>

§

impl<'t> !Send for TextEdit<'t>

§

impl<'t> !Sync for TextEdit<'t>

§

impl<'t> Unpin for TextEdit<'t>

§

impl<'t> !UnwindSafe for TextEdit<'t>

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<T, U> AsBindGroupShaderType<U> for T
where U: ShaderType, &'a T: for<'a> Into<U>,

§

fn as_bind_group_shader_type(&self, _images: &RenderAssets<Image>) -> U

Return the T [ShaderType] for self. When used in [AsBindGroup] derives, it is safe to assume that all images in self exist.
§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast<T> for T

§

fn downcast(&self) -> &T

§

impl<T> Downcast for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<S> FromSample<S> for S

§

fn from_sample_(s: S) -> S

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<F, T> IntoSample<T> for F
where T: FromSample<F>,

§

fn into_sample(self) -> T

§

impl<T> Pipe for T
where T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

impl<T> RawDrop for T

§

unsafe fn raw_drop(ptr: *mut c_void)

Write the default value of the type to the pointer. Read more
§

fn raw_drop_cb() -> Unsafe<&'static (dyn Fn(*mut c_void) + Send + Sync)>

Get a callback suitable for [SchemaData].
source§

impl<T> Same for T

§

type Output = T

Should always be Self
§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
§

impl<T, U> ToSample<U> for T
where U: FromSample<T>,

§

fn to_sample_(self) -> U

§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> Upcast<T> for T

§

fn upcast(&self) -> Option<&T>

§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

impl<S, T> Duplex<S> for T
where T: FromSample<S> + ToSample<S>,