diff options
Diffstat (limited to 'helix-term/src/compositor.rs')
-rw-r--r-- | helix-term/src/compositor.rs | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/helix-term/src/compositor.rs b/helix-term/src/compositor.rs index 99f9bb0e..6b39bb62 100644 --- a/helix-term/src/compositor.rs +++ b/helix-term/src/compositor.rs @@ -4,7 +4,7 @@ use crossterm::event::Event; use helix_core::Position; -use tui::{buffer::Buffer as Surface, layout::Rect}; +use tui::{buffer::Buffer as Surface, layout::Rect, terminal::CursorKind}; pub type Callback = Box<dyn FnOnce(&mut Compositor)>; @@ -47,8 +47,9 @@ pub trait Component: Any + AnyComponent { /// Render the component onto the provided surface. fn render(&self, area: Rect, frame: &mut Surface, ctx: &mut Context); - fn cursor_position(&self, area: Rect, ctx: &Editor) -> Option<Position> { - None + /// Get cursor position and cursor kind. + fn cursor(&self, area: Rect, ctx: &Editor) -> (Option<Position>, CursorKind) { + (None, CursorKind::Hidden) } /// May be used by the parent component to compute the child area. @@ -137,20 +138,19 @@ impl Compositor { layer.render(area, surface, cx) } - let pos = self - .cursor_position(area, cx.editor) - .map(|pos| (pos.col as u16, pos.row as u16)); + let (pos, kind) = self.cursor(area, cx.editor); + let pos = pos.map(|pos| (pos.col as u16, pos.row as u16)); - self.terminal.draw(pos); + self.terminal.draw(pos, kind); } - pub fn cursor_position(&self, area: Rect, editor: &Editor) -> Option<Position> { + pub fn cursor(&self, area: Rect, editor: &Editor) -> (Option<Position>, CursorKind) { for layer in self.layers.iter().rev() { - if let Some(pos) = layer.cursor_position(area, editor) { - return Some(pos); + if let (Some(pos), kind) = layer.cursor(area, editor) { + return (Some(pos), kind); } } - None + (None, CursorKind::Hidden) } pub fn find(&mut self, type_name: &str) -> Option<&mut dyn Component> { |