diff options
author | Ivan Tham | 2021-06-15 05:03:56 +0000 |
---|---|---|
committer | Ivan Tham | 2021-06-15 15:46:21 +0000 |
commit | 124514aa7024b0cf40bf01def54d280fcc86897c (patch) | |
tree | e4fa3e9566755d40bd322578fd25f7de99b28377 /helix-term/src/compositor.rs | |
parent | 6bdf609caaf4eb1c137f503f147d1e4e4f3e8676 (diff) |
Add cursor kind to separate hidden cursor from pos
Now IME cursor position should be correct since we can still set cursor
position without drawing the cursor.
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> { |