pub struct EditorElement { /* private fields */ }Expand description
A GPUI Element that renders an Editor
Implementations§
Source§impl EditorElement
impl EditorElement
Sourcepub fn new(editor: Editor) -> Self
pub fn new(editor: Editor) -> Self
Create a new EditorElement from an Editor
Examples found in repository?
examples/editor_demo.rs (line 344)
277 fn render(&mut self, _window: &mut Window, cx: &mut Context<Self>) -> impl IntoElement {
278 let _current_theme = &self.available_themes[self.current_theme_index];
279 let (current_language, _, _) = &self.available_languages[self.current_language_index];
280
281 let language = match current_language.as_str() {
282 "Rust" => Language::Rust,
283 _ => Language::PlainText,
284 };
285
286 let cursor_position = self.editor.cursor_position();
287 let cursor_point = Point::new(cursor_position.col, cursor_position.row);
288
289 let selection = if self.editor.has_selection() {
290 let selected_text = self.get_selected_text();
291 Some(Selection {
292 lines: selected_text.matches('\n').count(),
293 chars: selected_text.len(),
294 })
295 } else {
296 None
297 };
298
299 div()
300 .key_context("editor")
301 .size_full()
302 .flex()
303 .flex_col()
304 .child(
305 div()
306 .flex_grow()
307 .track_focus(&self.focus_handle)
308 .on_action(cx.listener(Self::move_up))
309 .on_action(cx.listener(Self::move_down))
310 .on_action(cx.listener(Self::move_left))
311 .on_action(cx.listener(Self::move_right))
312 .on_action(cx.listener(Self::move_up_with_shift))
313 .on_action(cx.listener(Self::move_down_with_shift))
314 .on_action(cx.listener(Self::move_left_with_shift))
315 .on_action(cx.listener(Self::move_right_with_shift))
316 .on_action(cx.listener(Self::backspace))
317 .on_action(cx.listener(Self::delete))
318 .on_action(cx.listener(Self::insert_newline))
319 .on_action(cx.listener(Self::select_all))
320 .on_action(cx.listener(Self::escape))
321 .on_action(cx.listener(Self::copy))
322 .on_action(cx.listener(Self::cut))
323 .on_action(cx.listener(Self::paste))
324 .on_action(cx.listener(Self::next_theme))
325 .on_action(cx.listener(Self::previous_theme))
326 .on_action(cx.listener(Self::next_language))
327 .on_action(cx.listener(Self::previous_language))
328 .on_key_down(cx.listener(
329 |this: &mut Self, event: &KeyDownEvent, _window, cx| {
330 // Handle character input
331 if let Some(text) = &event.keystroke.key_char {
332 if !event.keystroke.modifiers.platform
333 && !event.keystroke.modifiers.control
334 && !event.keystroke.modifiers.function
335 {
336 for ch in text.chars() {
337 this.editor.insert_char(ch);
338 }
339 cx.notify();
340 }
341 }
342 },
343 ))
344 .child(EditorElement::new(self.editor.clone())),
345 )
346 .child(MetaLine::new(cursor_point, language, selection))
347 }Sourcepub fn editor_mut(&mut self) -> &mut Editor
pub fn editor_mut(&mut self) -> &mut Editor
Get a mutable reference to the underlying Editor
Trait Implementations§
Source§impl Element for EditorElement
impl Element for EditorElement
Source§type RequestLayoutState = ()
type RequestLayoutState = ()
The type of state returned from
Element::request_layout. A mutable reference to this state is subsequently
provided to Element::prepaint and Element::paint.Source§type PrepaintState = ()
type PrepaintState = ()
The type of state returned from
Element::prepaint. A mutable reference to this state is subsequently
provided to Element::paint.Source§fn id(&self) -> Option<ElementId>
fn id(&self) -> Option<ElementId>
If this element has a unique identifier, return it here. This is used to track elements across frames, and
will cause a GlobalElementId to be passed to the request_layout, prepaint, and paint methods. Read more
Source§fn source_location(&self) -> Option<&'static Location<'static>>
fn source_location(&self) -> Option<&'static Location<'static>>
Source location where this element was constructed, used to disambiguate elements in the
inspector and navigate to their source code.
Source§fn request_layout(
&mut self,
_: Option<&GlobalElementId>,
_: Option<&InspectorElementId>,
window: &mut Window,
cx: &mut App,
) -> (LayoutId, Self::RequestLayoutState)
fn request_layout( &mut self, _: Option<&GlobalElementId>, _: Option<&InspectorElementId>, window: &mut Window, cx: &mut App, ) -> (LayoutId, Self::RequestLayoutState)
Before an element can be painted, we need to know where it’s going to be and how big it is.
Use this method to request a layout from Taffy and initialize the element’s state.
Source§fn prepaint(
&mut self,
_: Option<&GlobalElementId>,
_: Option<&InspectorElementId>,
_: Bounds<Pixels>,
_: &mut Self::RequestLayoutState,
_window: &mut Window,
_cx: &mut App,
) -> Self::PrepaintState
fn prepaint( &mut self, _: Option<&GlobalElementId>, _: Option<&InspectorElementId>, _: Bounds<Pixels>, _: &mut Self::RequestLayoutState, _window: &mut Window, _cx: &mut App, ) -> Self::PrepaintState
After laying out an element, we need to commit its bounds to the current frame for hitbox
purposes. The state argument is the same state that was returned from
Element::request_layout().Source§fn paint(
&mut self,
_: Option<&GlobalElementId>,
_: Option<&InspectorElementId>,
bounds: Bounds<Pixels>,
_: &mut Self::RequestLayoutState,
_: &mut Self::PrepaintState,
window: &mut Window,
cx: &mut App,
)
fn paint( &mut self, _: Option<&GlobalElementId>, _: Option<&InspectorElementId>, bounds: Bounds<Pixels>, _: &mut Self::RequestLayoutState, _: &mut Self::PrepaintState, window: &mut Window, cx: &mut App, )
Once layout has been completed, this method will be called to paint the element to the screen.
The state argument is the same state that was returned from
Element::request_layout().Source§fn into_any(self) -> AnyElement
fn into_any(self) -> AnyElement
Convert this element into a dynamically-typed
AnyElement.Source§impl IntoElement for EditorElement
impl IntoElement for EditorElement
Source§type Element = EditorElement
type Element = EditorElement
The specific type of element into which the implementing type is converted.
Useful for converting other types into elements automatically, like Strings
Source§fn into_element(self) -> Self::Element
fn into_element(self) -> Self::Element
Convert self into a type that implements
Element.Source§fn into_any_element(self) -> AnyElement
fn into_any_element(self) -> AnyElement
Convert self into a dynamically-typed
AnyElement.Auto Trait Implementations§
impl Freeze for EditorElement
impl !RefUnwindSafe for EditorElement
impl !Send for EditorElement
impl !Sync for EditorElement
impl Unpin for EditorElement
impl !UnwindSafe for EditorElement
Blanket Implementations§
Source§impl<E> AnimationExt for Ewhere
E: IntoElement + 'static,
impl<E> AnimationExt for Ewhere
E: IntoElement + 'static,
Source§fn with_animation(
self,
id: impl Into<ElementId>,
animation: Animation,
animator: impl Fn(Self, f32) -> Self + 'static,
) -> AnimationElement<Self>where
Self: Sized,
fn with_animation(
self,
id: impl Into<ElementId>,
animation: Animation,
animator: impl Fn(Self, f32) -> Self + 'static,
) -> AnimationElement<Self>where
Self: Sized,
Render this component or element with an animation
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
Mutably borrows from an owned value. Read more
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn 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.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
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.Source§fn as_any(&self) -> &(dyn Any + 'static)
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.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
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.Source§impl<T> FluentBuilder for Twhere
T: IntoElement,
impl<T> FluentBuilder for Twhere
T: IntoElement,
Source§fn map<U>(self, f: impl FnOnce(Self) -> U) -> Uwhere
Self: Sized,
fn map<U>(self, f: impl FnOnce(Self) -> U) -> Uwhere
Self: Sized,
Imperatively modify self with the given closure.
Source§fn when(self, condition: bool, then: impl FnOnce(Self) -> Self) -> Selfwhere
Self: Sized,
fn when(self, condition: bool, then: impl FnOnce(Self) -> Self) -> Selfwhere
Self: Sized,
Conditionally modify self with the given closure.
Source§fn when_else(
self,
condition: bool,
then: impl FnOnce(Self) -> Self,
else_fn: impl FnOnce(Self) -> Self,
) -> Selfwhere
Self: Sized,
fn when_else(
self,
condition: bool,
then: impl FnOnce(Self) -> Self,
else_fn: impl FnOnce(Self) -> Self,
) -> Selfwhere
Self: Sized,
Conditionally modify self with the given closure.
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§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>
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 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>
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