diff --git a/bench/src/lib.rs b/bench/src/lib.rs index fa90f2e..385cfd3 100644 --- a/bench/src/lib.rs +++ b/bench/src/lib.rs @@ -3,7 +3,7 @@ use ratatui::backend::{Backend, WindowSize}; use ratatui::buffer::Cell; -use ratatui::layout::{Rect, Size}; +use ratatui::layout::{Position, Size}; use ratatui::Terminal; use std::io; use tui_textarea::TextArea; @@ -75,10 +75,8 @@ impl Backend for DummyBackend { } #[inline] - fn size(&self) -> io::Result { - Ok(Rect { - x: 0, - y: 0, + fn size(&self) -> io::Result { + Ok(Size { width: self.width, height: self.height, }) @@ -102,6 +100,19 @@ impl Backend for DummyBackend { fn flush(&mut self) -> io::Result<()> { Ok(()) } + + #[inline] + fn get_cursor_position(&mut self) -> io::Result { + let (x, y) = self.cursor; + Ok(Position { x, y }) + } + + #[inline] + fn set_cursor_position>(&mut self, position: P) -> io::Result<()> { + let Position { x, y } = position.into(); + self.cursor = (x, y); + Ok(()) + } } #[inline] @@ -116,6 +127,6 @@ pub trait TerminalExt { impl TerminalExt for Terminal { #[inline] fn draw_textarea(&mut self, textarea: &TextArea<'_>) { - self.draw(|f| f.render_widget(textarea, f.size())).unwrap(); + self.draw(|f| f.render_widget(textarea, f.area())).unwrap(); } } diff --git a/examples/editor.rs b/examples/editor.rs index 90d97f4..846eb2b 100644 --- a/examples/editor.rs +++ b/examples/editor.rs @@ -185,7 +185,7 @@ impl<'a> Editor<'a> { ); self.term.draw(|f| { - let chunks = layout.split(f.size()); + let chunks = layout.split(f.area()); if search_height > 0 { f.render_widget(&self.search.textarea, chunks[0]); diff --git a/examples/minimal.rs b/examples/minimal.rs index 9850b1b..dfbe92e 100644 --- a/examples/minimal.rs +++ b/examples/minimal.rs @@ -26,7 +26,7 @@ fn main() -> io::Result<()> { loop { term.draw(|f| { - f.render_widget(&textarea, f.size()); + f.render_widget(&textarea, f.area()); })?; match crossterm::event::read()?.into() { Input { key: Key::Esc, .. } => break, diff --git a/examples/password.rs b/examples/password.rs index e7518a1..1d182b8 100644 --- a/examples/password.rs +++ b/examples/password.rs @@ -30,7 +30,7 @@ fn main() -> io::Result<()> { loop { term.draw(|f| { - let chunks = layout.split(f.size()); + let chunks = layout.split(f.area()); f.render_widget(&textarea, chunks[0]); })?; diff --git a/examples/single_line.rs b/examples/single_line.rs index 1b33df9..d5f36ef 100644 --- a/examples/single_line.rs +++ b/examples/single_line.rs @@ -49,7 +49,7 @@ fn main() -> io::Result<()> { loop { term.draw(|f| { - let chunks = layout.split(f.size()); + let chunks = layout.split(f.area()); f.render_widget(&textarea, chunks[0]); })?; diff --git a/examples/split.rs b/examples/split.rs index 9454651..78ebb23 100644 --- a/examples/split.rs +++ b/examples/split.rs @@ -52,7 +52,7 @@ fn main() -> io::Result<()> { loop { term.draw(|f| { - let chunks = layout.split(f.size()); + let chunks = layout.split(f.area()); for (textarea, chunk) in textarea.iter().zip(chunks.iter()) { f.render_widget(textarea, *chunk); } diff --git a/examples/termion.rs b/examples/termion.rs index 95c5662..cc8296b 100644 --- a/examples/termion.rs +++ b/examples/termion.rs @@ -57,7 +57,7 @@ fn main() -> Result<(), Box> { Event::Tick => {} } term.draw(|f| { - f.render_widget(&textarea, f.size()); + f.render_widget(&textarea, f.area()); })?; } diff --git a/examples/termwiz.rs b/examples/termwiz.rs index a6103f5..79355d3 100644 --- a/examples/termwiz.rs +++ b/examples/termwiz.rs @@ -22,7 +22,7 @@ fn main() -> Result<(), Box> { // The event loop loop { term.draw(|f| { - f.render_widget(&textarea, f.size()); + f.render_widget(&textarea, f.area()); })?; if let Some(input) = term diff --git a/examples/variable.rs b/examples/variable.rs index cb07a01..42fb93a 100644 --- a/examples/variable.rs +++ b/examples/variable.rs @@ -33,7 +33,7 @@ fn main() -> io::Result<()> { let chunks = Layout::default() .direction(Direction::Vertical) .constraints([Constraint::Length(height), Constraint::Min(0)]) - .split(f.size()); + .split(f.area()); f.render_widget(&textarea, chunks[0]); })?; match crossterm::event::read()?.into() { diff --git a/examples/vim.rs b/examples/vim.rs index e888b20..42da7ed 100644 --- a/examples/vim.rs +++ b/examples/vim.rs @@ -417,7 +417,7 @@ fn main() -> io::Result<()> { let mut vim = Vim::new(Mode::Normal); loop { - term.draw(|f| f.render_widget(&textarea, f.size()))?; + term.draw(|f| f.render_widget(&textarea, f.area()))?; vim = match vim.transition(crossterm::event::read()?.into(), &mut textarea) { Transition::Mode(mode) if vim.mode != mode => { diff --git a/src/textarea.rs b/src/textarea.rs index dbd588f..5d7f3a7 100644 --- a/src/textarea.rs +++ b/src/textarea.rs @@ -78,8 +78,8 @@ impl fmt::Display for YankText { /// println!("Lines: {:?}", textarea.lines()); /// ``` /// -/// It implements [`ratatui::widgets::Widget`] trait so it can be rendered to a -/// terminal screen via [`ratatui::terminal::Frame::render_widget`] method. +/// It implements [`ratatui::widgets::Widget`] trait so it can be rendered to a terminal screen via +/// [`ratatui::Frame::render_widget`] method. /// ```no_run /// use ratatui::backend::CrosstermBackend; /// use ratatui::layout::{Constraint, Direction, Layout}; @@ -96,7 +96,7 @@ impl fmt::Display for YankText { /// /// loop { /// term.draw(|f| { -/// let chunks = layout.split(f.size()); +/// let chunks = layout.split(f.area()); /// f.render_widget(&textarea, chunks[0]); /// }).unwrap(); /// @@ -1616,7 +1616,7 @@ impl<'a> TextArea<'a> { } /// Build a ratatui (or tui-rs) widget to render the current state of the textarea. The widget instance returned - /// from this method can be rendered with [`ratatui::terminal::Frame::render_widget`]. + /// from this method can be rendered with [`ratatui::Frame::render_widget`]. /// /// This method was deprecated at v0.5.3 and is no longer necessary. Instead you can directly pass `&TextArea` /// reference to the `Frame::render_widget` method call. diff --git a/src/widget.rs b/src/widget.rs index 7ea9f7f..46dffa6 100644 --- a/src/widget.rs +++ b/src/widget.rs @@ -15,8 +15,8 @@ use tui::text::Spans as Line; // instance. In the case, the TextArea instance cannot be accessed from any other objects since it is mutablly // borrowed. // -// `ratatui::terminal::Frame::render_stateful_widget` would be an assumed way to render a stateful widget. But at this -// point we stick with using `ratatui::terminal::Frame::render_widget` because it is simpler API. Users don't need to +// `ratatui::Frame::render_stateful_widget` would be an assumed way to render a stateful widget. But at this +// point we stick with using `ratatui::Frame::render_widget` because it is simpler API. Users don't need to // manage states of textarea instances separately. // https://docs.rs/ratatui/latest/ratatui/terminal/struct.Frame.html#method.render_stateful_widget #[derive(Default, Debug)]