pub struct TextBox<T> {
pub handles_tab_notifications: bool,
/* private fields */
}
Expand description
A widget that allows user text input.
Editing values
If the text you are editing represents a value of some other type, such
as a number, you should use a ValueTextBox
and an appropriate
Formatter
. You can create a ValueTextBox
by passing the appropriate
Formatter
to TextBox::with_formatter
.
Fields§
§handles_tab_notifications: bool
if true
(the default), this textbox will attempt to change focus on tab.
You can override this in a controller if you want to customize tab behaviour.
Implementations§
§impl<T> TextBox<T>where
T: EditableText + TextStorage,
impl<T> TextBox<T>where T: EditableText + TextStorage,
pub fn new() -> TextBox<T>
pub fn new() -> TextBox<T>
Create a new TextBox widget.
Examples
use druid::widget::TextBox;
use druid::{ WidgetExt, Data, Lens };
#[derive(Clone, Data, Lens)]
struct AppState {
name: String,
}
let _ = TextBox::new()
.with_placeholder("placeholder text")
.lens(AppState::name);
pub fn multiline() -> TextBox<T>
pub fn multiline() -> TextBox<T>
Create a new multi-line TextBox
.
Examples
let multiline = TextBox::multiline()
.lens(AppState::name);
pub fn with_line_wrapping(self, wrap_lines: bool) -> TextBox<T>
pub fn with_line_wrapping(self, wrap_lines: bool) -> TextBox<T>
If true
(and this is a multiline
text box) lines will be wrapped
at the maximum layout width.
If false
, lines will not be wrapped, and horizontal scrolling will
be enabled.
Examples
//will scroll horizontally
let scroll_text_box = TextBox::new()
.with_line_wrapping(false)
.lens(AppState::name);
//will wrap only for a single line
let wrap_text_box = TextBox::new()
.with_line_wrapping(true)
.lens(AppState::name);
//will scroll as well as having multiple lines
let scroll_multi_line_text_box = TextBox::multiline()
.with_line_wrapping(false)
.lens(AppState::name);
//will wrap for each line
let wrap_multi_line_text_box = TextBox::multiline()
.with_line_wrapping(true) // this is default and can be removed for the same result
.lens(AppState::name);
§impl<T> TextBox<T>
impl<T> TextBox<T>
pub fn with_text_size(self, size: impl Into<KeyOrValue<f64>>) -> TextBox<T>
pub fn with_text_size(self, size: impl Into<KeyOrValue<f64>>) -> TextBox<T>
Builder-style method for setting the text size.
The argument can be either an f64
or a Key<f64>
.
Examples
let text_box = TextBox::new()
.with_text_size(14.)
.lens(AppState::name);
use druid::Key;
const FONT_SIZE : Key<f64> = Key::new("font-size");
let text_box = TextBox::new()
.with_text_size(FONT_SIZE)
.lens(AppState::name);
pub fn with_text_alignment(self, alignment: TextAlignment) -> TextBox<T>
pub fn with_text_alignment(self, alignment: TextAlignment) -> TextBox<T>
Builder-style method to set the TextAlignment
.
This is only relevant when the TextBox
is not multiline
,
in which case it determines how the text is positioned inside the
TextBox
when it does not fill the available space.
Note:
This does not behave exactly like TextAlignment
does when used
with label; in particular this does not account for reading direction.
This means that TextAlignment::Start
(the default) always means
left aligned, and TextAlignment::End
always means right aligned.
This should be considered a bug, but it will not be fixed until proper BiDi support is implemented.
Examples
use druid::TextAlignment;
let text_box = TextBox::new()
.with_text_alignment(TextAlignment::Center)
.lens(AppState::name);
pub fn with_font(self, font: impl Into<KeyOrValue<FontDescriptor>>) -> TextBox<T>
pub fn with_font(self, font: impl Into<KeyOrValue<FontDescriptor>>) -> TextBox<T>
Builder-style method for setting the font.
The argument can be a FontDescriptor
or a Key<FontDescriptor>
that refers to a font defined in the Env
.
Examples
use druid::{ FontDescriptor, FontFamily, Key };
const FONT : Key<FontDescriptor> = Key::new("font");
let text_box = TextBox::new()
.with_font(FontDescriptor::new(FontFamily::MONOSPACE))
.lens(AppState::name);
let text_box = TextBox::new()
.with_font(FONT)
.lens(AppState::name);
pub fn with_text_color(self, color: impl Into<KeyOrValue<Color>>) -> TextBox<T>
pub fn with_text_color(self, color: impl Into<KeyOrValue<Color>>) -> TextBox<T>
Builder-style method for setting the text color.
The argument can be either a Color
or a Key<Color>
.
Examples
use druid::{ Color, Key };
const COLOR : Key<Color> = Key::new("color");
let text_box = TextBox::new()
.with_text_color(Color::RED)
.lens(AppState::name);
let text_box = TextBox::new()
.with_text_color(COLOR)
.lens(AppState::name);
pub fn set_text_size(&mut self, size: impl Into<KeyOrValue<f64>>)
pub fn set_text_size(&mut self, size: impl Into<KeyOrValue<f64>>)
Set the text size.
The argument can be either an f64
or a Key<f64>
.
pub fn set_font(&mut self, font: impl Into<KeyOrValue<FontDescriptor>>)
pub fn set_font(&mut self, font: impl Into<KeyOrValue<FontDescriptor>>)
Set the font.
The argument can be a FontDescriptor
or a Key<FontDescriptor>
that refers to a font defined in the Env
.
pub fn set_text_alignment(&mut self, alignment: TextAlignment)
pub fn set_text_alignment(&mut self, alignment: TextAlignment)
Set the TextAlignment
for this `TextBox``.
This is only relevant when the TextBox
is not multiline
,
in which case it determines how the text is positioned inside the
TextBox
when it does not fill the available space.
Note:
This does not behave exactly like TextAlignment
does when used
with label; in particular this does not account for reading direction.
This means that TextAlignment::Start
(the default) always means
left aligned, and TextAlignment::End
always means right aligned.
This should be considered a bug, but it will not be fixed until proper BiDi support is implemented.
pub fn set_text_color(&mut self, color: impl Into<KeyOrValue<Color>>)
pub fn set_text_color(&mut self, color: impl Into<KeyOrValue<Color>>)
Set the text color.
The argument can be either a Color
or a Key<Color>
.
If you change this property, you are responsible for calling
request_layout
to ensure the label is updated.
pub fn text_position(&self) -> Point
pub fn text_position(&self) -> Point
The point, relative to the origin, where this text box draws its
TextLayout
.
This is exposed in case the user wants to do additional drawing based on properties of the text.
This is not valid until layout
has been called.
§impl<T> TextBox<T>where
T: Data,
impl<T> TextBox<T>where T: Data,
pub fn with_placeholder(self, placeholder: impl Into<LabelText<T>>) -> TextBox<T>
pub fn with_placeholder(self, placeholder: impl Into<LabelText<T>>) -> TextBox<T>
Builder-style method to set the TextBox
’s placeholder text.
pub fn set_placeholder(&mut self, placeholder: impl Into<LabelText<T>>)
pub fn set_placeholder(&mut self, placeholder: impl Into<LabelText<T>>)
Set the TextBox
’s placeholder text.
§impl<T> TextBox<T>
impl<T> TextBox<T>
pub fn text(&self) -> &TextComponent<T>
pub fn text(&self) -> &TextComponent<T>
An immutable reference to the inner TextComponent
.
Using this correctly is difficult; please see the TextComponent
docs for more information.
pub fn text_mut(&mut self) -> &mut TextComponent<T>
pub fn text_mut(&mut self) -> &mut TextComponent<T>
A mutable reference to the inner TextComponent
.
Using this correctly is difficult; please see the TextComponent
docs for more information.
§impl TextBox<String>
impl TextBox<String>
pub fn with_formatter<T>(
self,
formatter: impl Formatter<T> + 'static
) -> ValueTextBox<T>where
T: Data,
pub fn with_formatter<T>( self, formatter: impl Formatter<T> + 'static ) -> ValueTextBox<T>where T: Data,
Turn this TextBox
into a ValueTextBox
, using the Formatter
to
manage the value.
For simple value formatting, you can use the ParseFormatter
.
Trait Implementations§
§impl<T> Default for TextBox<T>where
T: TextStorage + EditableText,
impl<T> Default for TextBox<T>where T: TextStorage + EditableText,
§impl<T> Widget<T> for TextBox<T>where
T: TextStorage + EditableText,
impl<T> Widget<T> for TextBox<T>where T: TextStorage + EditableText,
§fn event(
&mut self,
ctx: &mut EventCtx<'_, '_>,
event: &Event,
data: &mut T,
env: &Env
)
fn event( &mut self, ctx: &mut EventCtx<'_, '_>, event: &Event, data: &mut T, env: &Env )
§fn lifecycle(
&mut self,
ctx: &mut LifeCycleCtx<'_, '_>,
event: &LifeCycle,
data: &T,
env: &Env
)
fn lifecycle( &mut self, ctx: &mut LifeCycleCtx<'_, '_>, event: &LifeCycle, data: &T, env: &Env )
§fn layout(
&mut self,
ctx: &mut LayoutCtx<'_, '_>,
bc: &BoxConstraints,
data: &T,
env: &Env
) -> Size
fn layout( &mut self, ctx: &mut LayoutCtx<'_, '_>, bc: &BoxConstraints, data: &T, env: &Env ) -> Size
§fn paint(&mut self, ctx: &mut PaintCtx<'_, '_, '_>, data: &T, env: &Env)
fn paint(&mut self, ctx: &mut PaintCtx<'_, '_, '_>, data: &T, env: &Env)
§fn compute_max_intrinsic(
&mut self,
axis: Axis,
ctx: &mut LayoutCtx<'_, '_>,
bc: &BoxConstraints,
data: &T,
env: &Env
) -> f64
fn compute_max_intrinsic( &mut self, axis: Axis, ctx: &mut LayoutCtx<'_, '_>, bc: &BoxConstraints, data: &T, env: &Env ) -> f64
Auto Trait Implementations§
impl<T> !RefUnwindSafe for TextBox<T>
impl<T> !Send for TextBox<T>
impl<T> !Sync for TextBox<T>
impl<T> Unpin for TextBox<T>where T: Unpin,
impl<T> !UnwindSafe for TextBox<T>
Blanket Implementations§
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> RoundFrom<T> for T
impl<T> RoundFrom<T> for T
§fn round_from(x: T) -> T
fn round_from(x: T) -> T
§impl<T, U> RoundInto<U> for Twhere
U: RoundFrom<T>,
impl<T, U> RoundInto<U> for Twhere U: RoundFrom<T>,
§fn round_into(self) -> U
fn round_into(self) -> U
§impl<T, W> TestWidgetExt<T> for Wwhere
T: Data,
W: Widget<T> + 'static,
impl<T, W> TestWidgetExt<T> for Wwhere T: Data, W: Widget<T> + 'static,
§impl<T, W> WidgetExt<T> for Wwhere
T: Data,
W: Widget<T> + 'static,
impl<T, W> WidgetExt<T> for Wwhere T: Data, W: Widget<T> + 'static,
§fn align_left(self) -> Align<T>
fn align_left(self) -> Align<T>
Align
widget, configured to align left.§fn align_right(self) -> Align<T>
fn align_right(self) -> Align<T>
Align
widget, configured to align right.§fn align_vertical(self, align: UnitPoint) -> Align<T>
fn align_vertical(self, align: UnitPoint) -> Align<T>
Align
widget, configured to align vertically.§fn align_horizontal(self, align: UnitPoint) -> Align<T>
fn align_horizontal(self, align: UnitPoint) -> Align<T>
Align
widget, configured to align horizontally.§fn fix_width(self, width: impl Into<KeyOrValue<f64>>) -> SizedBox<T>
fn fix_width(self, width: impl Into<KeyOrValue<f64>>) -> SizedBox<T>
SizedBox
with an explicit width.§fn fix_height(self, height: impl Into<KeyOrValue<f64>>) -> SizedBox<T>
fn fix_height(self, height: impl Into<KeyOrValue<f64>>) -> SizedBox<T>
SizedBox
with an explicit height.§fn fix_size(
self,
width: impl Into<KeyOrValue<f64>>,
height: impl Into<KeyOrValue<f64>>
) -> SizedBox<T>
fn fix_size( self, width: impl Into<KeyOrValue<f64>>, height: impl Into<KeyOrValue<f64>> ) -> SizedBox<T>
SizedBox
with an explicit width and height§fn expand_width(self) -> SizedBox<T>
fn expand_width(self) -> SizedBox<T>
§fn expand_height(self) -> SizedBox<T>
fn expand_height(self) -> SizedBox<T>
§fn background(self, brush: impl Into<BackgroundBrush<T>>) -> Container<T>
fn background(self, brush: impl Into<BackgroundBrush<T>>) -> Container<T>
§fn foreground(self, brush: impl Into<BackgroundBrush<T>>) -> Container<T>
fn foreground(self, brush: impl Into<BackgroundBrush<T>>) -> Container<T>
§fn border(
self,
color: impl Into<KeyOrValue<Color>>,
width: impl Into<KeyOrValue<f64>>
) -> Container<T>
fn border( self, color: impl Into<KeyOrValue<Color>>, width: impl Into<KeyOrValue<f64>> ) -> Container<T>
§fn controller<C>(self, controller: C) -> ControllerHost<Self, C>where
C: Controller<T, Self>,
fn controller<C>(self, controller: C) -> ControllerHost<Self, C>where C: Controller<T, Self>,
Controller
.§fn on_added(
self,
f: impl Fn(&mut Self, &mut LifeCycleCtx<'_, '_>, &T, &Env) + 'static
) -> ControllerHost<Self, Added<T, Self>>
fn on_added( self, f: impl Fn(&mut Self, &mut LifeCycleCtx<'_, '_>, &T, &Env) + 'static ) -> ControllerHost<Self, Added<T, Self>>
§fn on_click(
self,
f: impl Fn(&mut EventCtx<'_, '_>, &mut T, &Env) + 'static
) -> ControllerHost<Self, Click<T>>
fn on_click( self, f: impl Fn(&mut EventCtx<'_, '_>, &mut T, &Env) + 'static ) -> ControllerHost<Self, Click<T>>
§fn debug_paint_layout(self) -> EnvScope<T, Self>
fn debug_paint_layout(self) -> EnvScope<T, Self>
layout
Rect
s of this widget and its children.§fn debug_widget_id(self) -> EnvScope<T, Self>
fn debug_widget_id(self) -> EnvScope<T, Self>
WidgetId
s for this widget and its children, when hot. Read more§fn debug_invalidation(self) -> DebugInvalidation<T, Self>
fn debug_invalidation(self) -> DebugInvalidation<T, Self>
§fn debug_widget(self) -> EnvScope<T, Self>
fn debug_widget(self) -> EnvScope<T, Self>
DEBUG_WIDGET
env variable for this widget (and its descendants). Read more§fn with_id(self, id: WidgetId) -> IdentityWrapper<Self>
fn with_id(self, id: WidgetId) -> IdentityWrapper<Self>
§fn disabled_if(
self,
disabled_if: impl Fn(&T, &Env) -> bool + 'static
) -> DisabledIf<T, Self>
fn disabled_if( self, disabled_if: impl Fn(&T, &Env) -> bool + 'static ) -> DisabledIf<T, Self>
DisabledIf
widget. Read more