pub struct TextComponent<T> {
pub has_focus: bool,
/* private fields */
}
Expand description
A widget that accepts text input.
This is intended to be used as a component of other widgets.
Text input is more complicated than you think, probably. For a good
overview, see [druid_shell::text
].
This type manages an inner EditSession
that is shared with the platform.
Unlike other aspects of Druid, the platform interacts with this session, not
through discrete events.
This is managed through a simple ‘locking’ mechanism; the platform asks for a lock on a particular text session that it wishes to interact with, calls methods on the locked session, and then later releases the lock.
Importantly, other events may be received while the lock is held.
It is the responsibility of the user of this widget to ensure that the
session is not locked before it is accessed. This can be done by checking
TextComponent::can_read
and TextComponent::can_write
;
after checking these methods the inner session can be accessed via
TextComponent::borrow
and TextComponent::borrow_mut
.
Sementically, this functions like a RefCell
; attempting to borrow while
a lock is held will result in a panic.
Fields§
§has_focus: bool
A manual flag set by the parent to control drawing behaviour.
The parent should update this when handling LifeCycle::FocusChanged
.
Implementations§
§impl TextComponent<()>
impl TextComponent<()>
pub const SCROLL_TO: Selector<bool> = Selector::new("druid-builtin.textbox-scroll-to")
pub const SCROLL_TO: Selector<bool> = Selector::new("druid-builtin.textbox-scroll-to")
A notification sent by the component when the cursor has moved.
If the payload is true, this follows an edit, and the view will need layout before scrolling.
pub const RETURN: Selector<()> = Selector::new("druid-builtin.textbox-return")
pub const RETURN: Selector<()> = Selector::new("druid-builtin.textbox-return")
A notification sent by the component when the user hits return.
This is only sent when send_notification_on_return
is true
.
pub const CANCEL: Selector<()> = Selector::new("druid-builtin.textbox-cancel")
pub const CANCEL: Selector<()> = Selector::new("druid-builtin.textbox-cancel")
A notification sent when the user cancels editing.
This is only sent when send_notification_on_cancel
is true
.
§impl<T> TextComponent<T>
impl<T> TextComponent<T>
pub fn can_read(&self) -> bool
pub fn can_read(&self) -> bool
Returns true
if the inner EditSession
can be read.
pub fn can_write(&self) -> bool
pub fn can_write(&self) -> bool
Returns true
if the inner EditSession
can be mutated.
pub fn is_composing(&self) -> bool
pub fn is_composing(&self) -> bool
Returns true
if the IME is actively composing (or the text is locked.)
When text is composing, you should avoid doing things like modifying the selection or copy/pasting text.
pub fn borrow_mut(&self) -> RefMut<'_, EditSession<T>>
pub fn borrow_mut(&self) -> RefMut<'_, EditSession<T>>
Attempt to mutably borrow the inner EditSession
.
Panics
This method panics if there is an outstanding lock on the session.
pub fn borrow(&self) -> Ref<'_, EditSession<T>>
pub fn borrow(&self) -> Ref<'_, EditSession<T>>
Attempt to borrow the inner EditSession
.
Panics
This method panics if there is an outstanding write lock on the session.
§impl<T> TextComponent<T>where
T: EditableText + TextStorage,
impl<T> TextComponent<T>where T: EditableText + TextStorage,
pub fn input_handler(&self) -> impl ImeHandlerRef
pub fn input_handler(&self) -> impl ImeHandlerRef
Returns an ImeHandlerRef
that can accept platform text input.
The widget managing this component should call LifeCycleCtx::register_text_input
during LifeCycle::WidgetAdded
, and pass it this object.
Trait Implementations§
§impl<T> Clone for TextComponent<T>where
T: Clone,
impl<T> Clone for TextComponent<T>where T: Clone,
§fn clone(&self) -> TextComponent<T>
fn clone(&self) -> TextComponent<T>
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read more§impl<T> Debug for TextComponent<T>where
T: Debug,
impl<T> Debug for TextComponent<T>where T: Debug,
§impl<T> Default for TextComponent<T>
impl<T> Default for TextComponent<T>
§fn default() -> TextComponent<T>
fn default() -> TextComponent<T>
§impl<T> Widget<T> for TextComponent<T>where
T: TextStorage + EditableText,
impl<T> Widget<T> for TextComponent<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 TextComponent<T>
impl<T> !Send for TextComponent<T>
impl<T> !Sync for TextComponent<T>
impl<T> Unpin for TextComponent<T>
impl<T> !UnwindSafe for TextComponent<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