mirror of
https://github.com/zed-industries/zed.git
synced 2025-01-30 14:17:02 +00:00
Add docs
This commit is contained in:
parent
7c922ad6ee
commit
d52c5646b4
2 changed files with 11 additions and 0 deletions
|
@ -1,6 +1,10 @@
|
||||||
use crate::{AsyncWindowContext, Bounds, Pixels, PlatformInputHandler, View, ViewContext};
|
use crate::{AsyncWindowContext, Bounds, Pixels, PlatformInputHandler, View, ViewContext};
|
||||||
use std::ops::Range;
|
use std::ops::Range;
|
||||||
|
|
||||||
|
/// Implement this trait to allow views to handle textual input when implementing an editor, field, etc.
|
||||||
|
///
|
||||||
|
/// Once your view `V` implements this trait, you can use it to construct an [ElementInputHandler<V>].
|
||||||
|
/// This input handler can then be assigned during paint by calling [WindowContext::handle_input].
|
||||||
pub trait InputHandler: 'static + Sized {
|
pub trait InputHandler: 'static + Sized {
|
||||||
fn text_for_range(&mut self, range: Range<usize>, cx: &mut ViewContext<Self>)
|
fn text_for_range(&mut self, range: Range<usize>, cx: &mut ViewContext<Self>)
|
||||||
-> Option<String>;
|
-> Option<String>;
|
||||||
|
@ -28,6 +32,8 @@ pub trait InputHandler: 'static + Sized {
|
||||||
) -> Option<Bounds<Pixels>>;
|
) -> Option<Bounds<Pixels>>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// The canonical implementation of `PlatformInputHandler`. Call `WindowContext::handle_input`
|
||||||
|
/// with an instance during your element's paint.
|
||||||
pub struct ElementInputHandler<V> {
|
pub struct ElementInputHandler<V> {
|
||||||
view: View<V>,
|
view: View<V>,
|
||||||
element_bounds: Bounds<Pixels>,
|
element_bounds: Bounds<Pixels>,
|
||||||
|
@ -35,6 +41,8 @@ pub struct ElementInputHandler<V> {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<V: 'static> ElementInputHandler<V> {
|
impl<V: 'static> ElementInputHandler<V> {
|
||||||
|
/// Used in [Element::paint] with the element's bounds and a view context for its
|
||||||
|
/// containing view.
|
||||||
pub fn new(element_bounds: Bounds<Pixels>, cx: &mut ViewContext<V>) -> Self {
|
pub fn new(element_bounds: Bounds<Pixels>, cx: &mut ViewContext<V>) -> Self {
|
||||||
ElementInputHandler {
|
ElementInputHandler {
|
||||||
view: cx.view(),
|
view: cx.view(),
|
||||||
|
|
|
@ -2170,6 +2170,9 @@ impl<'a, V: 'static> ViewContext<'a, V> {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Set an input handler, such as [ElementInputHandler], which interfaces with the
|
||||||
|
/// platform to receive textual input with proper integration with concerns such
|
||||||
|
/// as IME interactions.
|
||||||
pub fn handle_input(
|
pub fn handle_input(
|
||||||
&mut self,
|
&mut self,
|
||||||
focus_handle: &FocusHandle,
|
focus_handle: &FocusHandle,
|
||||||
|
|
Loading…
Reference in a new issue