pub struct CodeEditor { /* private fields */ }Expand description
A multi-line source-code editing surface: gutter, current-line highlight, indentation, bracket handling, and multiple carets.
Construct with CodeEditor::new (editable) or CodeEditor::read_only
(view + select + copy). Every code affordance is injected configuration, not
a built-in language — see CodeConfig.
Implementations§
Source§impl CodeEditor
impl CodeEditor
Sourcepub fn new(document: TextDocument) -> Self
pub fn new(document: TextDocument) -> Self
An editable code editor bound to document: gutter on, current-line
highlight on, no wrapping. Code affordances (comment token, bracket
pairs) stay off until the application supplies them — the editor never
guesses a language.
Sourcepub fn read_only(document: TextDocument) -> Self
pub fn read_only(document: TextDocument) -> Self
A read-only code viewer bound to document: no caret, navigation and
copy only, Role::Document. Still gets the gutter and syntax colours.
Sourcepub fn wrap_mode(self, mode: WrapMode) -> Self
pub fn wrap_mode(self, mode: WrapMode) -> Self
Set the line-wrap mode. CodeEditor defaults to WrapMode::None (source
lines must not fold, or the gutter’s one-number-per-line correspondence
breaks); pair with .h_scroll_policy(Auto) to scroll wide lines.
Sourcepub fn v_scroll_policy(self, policy: ScrollPolicy) -> Self
pub fn v_scroll_policy(self, policy: ScrollPolicy) -> Self
Vertical scrollbar policy (default Auto).
Sourcepub fn h_scroll_policy(self, policy: ScrollPolicy) -> Self
pub fn h_scroll_policy(self, policy: ScrollPolicy) -> Self
Horizontal scrollbar policy (default Auto).
Sourcepub fn overscroll_behavior(self, behavior: OverscrollBehavior) -> Self
pub fn overscroll_behavior(self, behavior: OverscrollBehavior) -> Self
Wheel scroll-chaining at the editor’s scroll boundary. Chain (default)
hands leftover scroll to an enclosing scrollable; Contain absorbs it.
Sourcepub fn window_to_clip(self, on: bool) -> Self
pub fn window_to_clip(self, on: bool) -> Self
Cull the render to the visible clip band (default false). Turn on only
for an editor deliberately laid out at full document height inside an
outer ScrollArea (v_scroll_policy(AlwaysOff) + min_lines(1)): the
body’s bounds then span the whole document, and this renders only the
on-screen slice instead of every line. A normally-scrolling editor already
renders just a viewport’s worth, so it needs nothing.
Sourcepub fn min_lines(self, lines: u32) -> Self
pub fn min_lines(self, lines: u32) -> Self
Minimum visible height in lines — switches the editor from greedy (fill
the proposal) to intrinsic sizing (grow with content up to max_lines,
then scroll). The composer pattern.
Sourcepub fn max_lines(self, lines: u32) -> Self
pub fn max_lines(self, lines: u32) -> Self
Maximum visible height in lines — caps intrinsic growth.
Sourcepub fn font_family(self, family: impl Into<String>) -> Self
pub fn font_family(self, family: impl Into<String>) -> Self
Fallback font family for the document’s text. None (the default) keeps
the typesetter’s registry default; a code editor should pass a monospace
family so columns line up.
Sourcepub fn font_size_scale(self, scale: f32) -> Self
pub fn font_size_scale(self, scale: f32) -> Self
Per-editor logical font-size multiplier (1.0 = 100 %), composed with
the accessibility text scale when follow_text_scale
is on. Sharp — shapes at a larger ppem.
Sourcepub fn follow_text_scale(self, follow: bool) -> Self
pub fn follow_text_scale(self, follow: bool) -> Self
Whether the editor grows text with the global accessibility text scale
(default true). Turn off for a WYSIWYG surface whose font sizes are
document content. Composed with font_size_scale.
Sourcepub fn on_change(self, callback: impl Fn() + 'static) -> Self
pub fn on_change(self, callback: impl Fn() + 'static) -> Self
A callback fired once per drain batch that contained a real content edit.
Sourcepub fn background(self, color: impl Into<ColorProp>) -> Self
pub fn background(self, color: impl Into<ColorProp>) -> Self
Override the editor background colour (accepts Color, a theme role, or a
Signal). None-equivalent default tracks the theme’s editor_bg.
Sourcepub fn text_color(self, color: impl Into<ColorProp>) -> Self
pub fn text_color(self, color: impl Into<ColorProp>) -> Self
Override the text colour. Default tracks the theme’s editor_fg.
Sourcepub fn caret_color(self, color: impl Into<ColorProp>) -> Self
pub fn caret_color(self, color: impl Into<ColorProp>) -> Self
Override the caret colour. Default tracks the theme’s editor_caret.
Sourcepub fn selection_color(self, color: impl Into<ColorProp>) -> Self
pub fn selection_color(self, color: impl Into<ColorProp>) -> Self
Override the selection colour. A pinned colour opts out of the window-inactive desaturation.
Sourcepub fn gutter(self, show: bool) -> Self
pub fn gutter(self, show: bool) -> Self
Whether the line-number gutter is shown (default true).
Sourcepub fn current_line_highlight(self, on: bool) -> Self
pub fn current_line_highlight(self, on: bool) -> Self
Whether the caret’s line gets a full-width background wash (default
true for CodeEditor).
Sourcepub fn indent_style(self, style: IndentStyle) -> Self
pub fn indent_style(self, style: IndentStyle) -> Self
Set the indentation style directly (spaces of a width, or tabs rendered a width wide).
Sourcepub fn tab_width(self, width: u8) -> Self
pub fn tab_width(self, width: u8) -> Self
Set the indent width, keeping the current spaces-vs-tabs kind.
Sourcepub fn use_soft_tabs(self, soft: bool) -> Self
pub fn use_soft_tabs(self, soft: bool) -> Self
Whether indentation is written with spaces (true, the default) or a tab
character (false), keeping the current width.
Sourcepub fn auto_indent(self, on: bool) -> Self
pub fn auto_indent(self, on: bool) -> Self
Whether Enter carries the current line’s indentation onto the new line
(default true).
Sourcepub fn bracket_pairs(self, pairs: impl Into<Vec<BracketPair>>) -> Self
pub fn bracket_pairs(self, pairs: impl Into<Vec<BracketPair>>) -> Self
The delimiter pairs the editor auto-closes and match-highlights. Empty (the default) disables both.
Sourcepub fn auto_close_brackets(self, on: bool) -> Self
pub fn auto_close_brackets(self, on: bool) -> Self
Whether typing an opener inserts its closing partner (default false;
needs configured bracket_pairs).
Sourcepub fn bracket_matching(self, on: bool) -> Self
pub fn bracket_matching(self, on: bool) -> Self
Whether the delimiter matching the caret’s is highlighted (default
false; needs configured bracket_pairs).
Sourcepub fn line_comment(self, token: impl Into<String>) -> Self
pub fn line_comment(self, token: impl Into<String>) -> Self
The token that starts a line comment ("//", "#", "--"). Enables
Ctrl+/ comment toggling; unset (the default) leaves it a no-op rather
than guessing.
Sourcepub fn completion_provider(
self,
provider: impl Fn(&CompletionContext<'_>) -> Vec<CompletionItem> + 'static,
) -> Self
pub fn completion_provider( self, provider: impl Fn(&CompletionContext<'_>) -> Vec<CompletionItem> + 'static, ) -> Self
Supply the completion candidates. The provider is called for the word
being completed and given a CompletionContext; the editor filters its
result by the live prefix, shows the popup, and replaces the word on
accept. Language-agnostic — the app knows the candidates, the editor knows
the mechanics. Without a provider there is no completion.
Sourcepub fn auto_complete(self, auto: bool) -> Self
pub fn auto_complete(self, auto: bool) -> Self
Whether typing an identifier character opens the completion popup
automatically (default true). When off, only Ctrl+Space opens it.
Sourcepub fn handle(&self) -> CodeEditorHandle
pub fn handle(&self) -> CodeEditorHandle
A cloneable handle to drive the editor from a toolbar, shortcut, or test.
Trait Implementations§
Source§impl Debug for CodeEditor
impl Debug for CodeEditor
Source§impl Widget for CodeEditor
impl Widget for CodeEditor
Source§fn build(&mut self, ctx: &mut BuildContext<'_>) -> Vec<WidgetId>
fn build(&mut self, ctx: &mut BuildContext<'_>) -> Vec<WidgetId>
&mut self — store child IDs, signal handles, any state needed later.
Returns the list of root child IDs (empty for leaf widgets).Source§fn layout_response(
&self,
proposal: SizeProposal,
ctx: &LayoutContext<'_>,
) -> LayoutResponse
fn layout_response( &self, proposal: SizeProposal, ctx: &LayoutContext<'_>, ) -> LayoutResponse
LayoutResponse]). Read moreSource§fn place_children(
&self,
bounds: Rect,
_proposal: SizeProposal,
children: &mut [WidgetPlacement],
ctx: &LayoutContext<'_>,
)
fn place_children( &self, bounds: Rect, _proposal: SizeProposal, children: &mut [WidgetPlacement], ctx: &LayoutContext<'_>, )
Source§fn paint(&self, bounds: Rect, canvas: &mut Canvas, ctx: &PaintContext<'_>)
fn paint(&self, bounds: Rect, canvas: &mut Canvas, ctx: &PaintContext<'_>)
Source§fn accessibility(&self, _builder: &mut AccessNodeBuilder)
fn accessibility(&self, _builder: &mut AccessNodeBuilder)
Source§fn clips_children(&self) -> bool
fn clips_children(&self) -> bool
§fn type_name(&self) -> &'static str
fn type_name(&self) -> &'static str
"teksilo_widgets::button::Button"). The default implementation
resolves at the impl site via std::any::type_name::<Self>(),
so calls through &dyn Widget correctly dispatch to the
monomorphized fn for the concrete type — getting the
concrete name through the vtable without per-impl boilerplate. Read more§fn cacheable_layout(&self) -> bool
fn cacheable_layout(&self) -> bool
layout_response may be
memoized by the per-pass layout cache. Defaults to true. Read more§fn wants_after_paint(&self) -> bool
fn wants_after_paint(&self) -> bool
after_paint
hook to fire each frame. Returning false (the default) saves
a virtual call per widget per frame for the vast majority of
widgets that don’t aggregate descendant geometry. Read more§fn after_paint(&self, _view: &WidgetTreeView<'_>, _ctx: &PaintContext<'_>)
fn after_paint(&self, _view: &WidgetTreeView<'_>, _ctx: &PaintContext<'_>)
TitleBar aggregates its drag region and control-button
rects into a single HitRegions payload for the Windows
backend’s WM_NCHITTEST. Read more§fn wants_post_paint(&self) -> bool
fn wants_post_paint(&self) -> bool
post_paint
hook to fire each frame. Returning false (the default) saves a
virtual call per widget per frame for the vast majority of widgets
that don’t draw a foreground over their children. Read more§fn post_paint(
&self,
_bounds: Rect,
_canvas: &mut Canvas,
_ctx: &PaintContext<'_>,
)
fn post_paint( &self, _bounds: Rect, _canvas: &mut Canvas, _ctx: &PaintContext<'_>, )
§fn wants_descendant_redirects(&self) -> bool
fn wants_descendant_redirects(&self) -> bool
a11y_redirect_descendant
hook for every descendant during AT tree emission, not
just its direct arena children. Read more§fn a11y_redirect_descendant(
&self,
_self_id: WidgetId,
_descendant: WidgetId,
) -> Option<NodeId>
fn a11y_redirect_descendant( &self, _self_id: WidgetId, _descendant: WidgetId, ) -> Option<NodeId>
§fn accessible_title_hint(&self) -> Option<String>
fn accessible_title_hint(&self) -> Option<String>
§fn initial_focus_hint(&self) -> Option<WidgetId>
fn initial_focus_hint(&self) -> Option<WidgetId>
§fn accessibility_children(&self) -> Option<Vec<WidgetId>>
fn accessibility_children(&self) -> Option<Vec<WidgetId>>
§fn as_any(&self) -> Option<&(dyn Any + 'static)>
fn as_any(&self) -> Option<&(dyn Any + 'static)>
None; concrete
widgets override with Some(self) when they want to expose
their concrete type to test-level introspection or reflection.
The trait already bounds on std::any::Any so concrete types
satisfy the 'static requirement.§fn as_any_mut(&mut self) -> Option<&mut (dyn Any + 'static)>
fn as_any_mut(&mut self) -> Option<&mut (dyn Any + 'static)>
as_any. Default
returns None; widgets that want to expose mutable state to
tests (e.g. so a test can mutate a Scene inside a
SceneView post-layout) override with Some(self). Should
follow the same opt-in pattern as as_any: only widgets
that opt into & introspection should opt into &mut.§fn focus_reveal_rect(&self, _bounds: Rect) -> Option<Rect>
fn focus_reveal_rect(&self, _bounds: Rect) -> Option<Rect>
None (the default) reveals the widget’s whole
bounds — correct for most controls. Read more§fn hit_shape(&self, _local_point: Point, _bounds: Rect) -> bool
fn hit_shape(&self, _local_point: Point, _bounds: Rect) -> bool
false for a point that is inside
the bounding box makes the widget transparent to the click there,
so it falls through to whatever sibling is painted underneath
(the same machinery as a fully pass-through node, but shape-aware). Read more§fn preserves_children_on_rebuild(&self) -> bool
fn preserves_children_on_rebuild(&self) -> bool
rebuild_single_widget treats this widget’s existing children
when re-running its build(). Read more§fn tooltip_has_content(&self) -> bool
fn tooltip_has_content(&self) -> bool
§fn declare_shortcuts(&self) -> Vec<Shortcut>
fn declare_shortcuts(&self) -> Vec<Shortcut>
build()) and at certain lazy
boundaries (e.g. Switcher walks declarations on its
not-yet-mounted Pending slots), so settings UIs and the
ShortcutRegistry see the keystrokes the moment the owning
container mounts — even if build() hasn’t run. Read more§fn take_handler_set(&mut self) -> Option<HandlerSet>
fn take_handler_set(&mut self) -> Option<HandlerSet>
WidgetWithHandlers wrapper.
Called during arena insertion to transfer handlers to the WidgetNode.
Default: returns None (no attached handlers).Auto Trait Implementations§
impl !RefUnwindSafe for CodeEditor
impl !Send for CodeEditor
impl !Sync for CodeEditor
impl !UnwindSafe for CodeEditor
impl Freeze for CodeEditor
impl Unpin for CodeEditor
impl UnsafeUnpin for CodeEditor
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
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>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
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)
fn as_any(&self) -> &(dyn Any + 'static)
&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)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.impl<T> ErasedDestructor for Twhere
T: 'static,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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<W> IntoTeksiChild for Wwhere
W: Widget + 'static,
impl<W> IntoTeksiChild for Wwhere
W: Widget + 'static,
fn into_pending(self) -> PendingChild
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
§impl<W> WidgetBuilder for Wwhere
W: Widget + 'static,
impl<W> WidgetBuilder for Wwhere
W: Widget + 'static,
fn on_tap( self, f: impl FnMut(&TapEvent, &mut EventContext<'_>) + 'static, ) -> WidgetWithHandlers<Self>
fn on_double_tap( self, f: impl FnMut(&TapEvent, &mut EventContext<'_>) + 'static, ) -> WidgetWithHandlers<Self>
fn on_triple_tap( self, f: impl FnMut(&TapEvent, &mut EventContext<'_>) + 'static, ) -> WidgetWithHandlers<Self>
fn on_long_press( self, f: impl FnMut(&TapEvent, &mut EventContext<'_>) + 'static, ) -> WidgetWithHandlers<Self>
on_tap. Default is [ButtonMask::PRIMARY].on_double_tap. Default [ButtonMask::PRIMARY].on_triple_tap. Default [ButtonMask::PRIMARY].on_long_press. Default [ButtonMask::PRIMARY].§fn dim_when_inactive(self, factor: f32) -> DimWhenInactive
fn dim_when_inactive(self, factor: f32) -> DimWhenInactive
factor opacity whenever the host window
is inactive (not focused / occluded), restoring full opacity when it
becomes active again. The opt-in, per-widget layer of the window-active
appearance model — for custom content an app wants to fade back when its
window isn’t the active one. Stock widgets handle their own
inactive appearance (caret hiding, selection desaturation) and need no
wrapping. Layout- and a11y-transparent; the opacity snaps (no tween),
which is correct under prefers-reduced-motion. See
DimWhenInactive.§fn dim_when_inactive_default(self) -> DimWhenInactive
fn dim_when_inactive_default(self) -> DimWhenInactive
dim_when_inactive with the default factor
(DEFAULT_DIM_FACTOR, 70 %).fn on_drag( self, f: impl FnMut(DragPhase, &mut EventContext<'_>) + 'static, ) -> WidgetWithHandlers<Self>
fn on_swipe( self, f: impl FnMut(SwipeDirection, f32, &mut EventContext<'_>) + 'static, ) -> WidgetWithHandlers<Self>
fn on_pinch( self, f: impl FnMut(PinchPhase, &mut EventContext<'_>) + 'static, ) -> WidgetWithHandlers<Self>
fn on_focus( self, f: impl FnMut(bool, &mut EventContext<'_>) + 'static, ) -> WidgetWithHandlers<Self>
fn on_key( self, f: impl FnMut(&WidgetEvent, &mut EventContext<'_>) -> EventResponse + 'static, ) -> WidgetWithHandlers<Self>
§fn on_key_preview(
self,
f: impl FnMut(&WidgetEvent, &mut EventContext<'_>) -> EventResponse + 'static,
) -> WidgetWithHandlers<Self>
fn on_key_preview( self, f: impl FnMut(&WidgetEvent, &mut EventContext<'_>) -> EventResponse + 'static, ) -> WidgetWithHandlers<Self>
HandlerSet::on_key_preview].fn on_pointer_event( self, f: impl FnMut(&WidgetEvent, &mut EventContext<'_>) -> EventResponse + 'static, ) -> WidgetWithHandlers<Self>
fn on_hover( self, f: impl FnMut(bool, &mut EventContext<'_>) + 'static, ) -> WidgetWithHandlers<Self>
fn on_scroll( self, f: impl FnMut(&WidgetEvent, &mut EventContext<'_>) -> EventResponse + 'static, ) -> WidgetWithHandlers<Self>
fn on_access_action( self, f: impl FnMut(Action, &mut EventContext<'_>) -> EventResponse + 'static, ) -> WidgetWithHandlers<Self>
fn focusable(self, focusable: bool) -> WidgetWithHandlers<Self>
fn tab_index(self, index: i32) -> WidgetWithHandlers<Self>
fn cursor(self, cursor: CursorIcon) -> WidgetWithHandlers<Self>
fn clips_children_on(self, clips: bool) -> WidgetWithHandlers<Self>
§fn ime_input(self, ctx: ImeContext) -> WidgetWithHandlers<Self>
fn ime_input(self, ctx: ImeContext) -> WidgetWithHandlers<Self>
ctx’s purpose) while it is focused. See [crate::ime].§fn event_pass_through(self, pass_through: bool) -> WidgetWithHandlers<Self>
fn event_pass_through(self, pass_through: bool) -> WidgetWithHandlers<Self>
HandlerSet::event_pass_through].§fn gesture_dead_zone(self, dead_zone: bool) -> WidgetWithHandlers<Self>
fn gesture_dead_zone(self, dead_zone: bool) -> WidgetWithHandlers<Self>
HandlerSet::gesture_dead_zone].§fn keyboard_capture(self, capture: bool) -> WidgetWithHandlers<Self>
fn keyboard_capture(self, capture: bool) -> WidgetWithHandlers<Self>
KeyDowns bypass shortcut resolution.
See [HandlerSet::keyboard_capture].§fn hit_transparent(self, transparent: bool) -> WidgetWithHandlers<Self>
fn hit_transparent(self, transparent: bool) -> WidgetWithHandlers<Self>
HandlerSet::hit_transparent].HandlerSet::context_menu] for the full contract.§fn focus_within(self, signal: Signal<bool>) -> WidgetWithHandlers<Self>
fn focus_within(self, signal: Signal<bool>) -> WidgetWithHandlers<Self>
Signal<bool> the framework writes when a strict
descendant has focus. See [HandlerSet::focus_within].§fn hover_within(self, signal: Signal<bool>) -> WidgetWithHandlers<Self>
fn hover_within(self, signal: Signal<bool>) -> WidgetWithHandlers<Self>
Signal<bool> the framework writes when a strict
descendant is hovered. See [HandlerSet::hover_within].§fn visible_when(self, state: impl Into<Prop<bool>>) -> WidgetWithHandlers<Self>
fn visible_when(self, state: impl Into<Prop<bool>>) -> WidgetWithHandlers<Self>
bool / Signal<bool> / Prop<bool>) as
a builder property, so teksu! can write visible_when: sig. Equivalent
to ctx.visible_when(id, ..). See [HandlerSet::visible_when].fn on_drag_hover( self, f: impl FnMut(&DragPayload, Point, &mut EventContext<'_>) -> DropFeedback + 'static, ) -> WidgetWithHandlers<Self>
fn on_drag_leave( self, f: impl FnMut(&mut EventContext<'_>) + 'static, ) -> WidgetWithHandlers<Self>
fn on_drag_tick( self, f: impl FnMut(Point, &mut EventContext<'_>) + 'static, ) -> WidgetWithHandlers<Self>
fn on_drop( self, f: impl FnMut(DragPayload, Point, &mut EventContext<'_>) -> bool + 'static, ) -> WidgetWithHandlers<Self>
§fn on_drag_ended(
self,
f: impl FnMut(DropOutcome, &mut EventContext<'_>) + 'static,
) -> WidgetWithHandlers<Self>
fn on_drag_ended( self, f: impl FnMut(DropOutcome, &mut EventContext<'_>) + 'static, ) -> WidgetWithHandlers<Self>
HandlerSet::on_drag_ended].