mirror of
https://github.com/ricoriedel/wipe.git
synced 2024-11-23 00:16:38 +00:00
Hide curser during animation
This commit is contained in:
parent
eb2d283770
commit
09e9fe12e9
@ -112,7 +112,7 @@ fn main() -> Result<(), Error> {
|
|||||||
let char = Box::new(SimpleCharSampler::new(args.chars));
|
let char = Box::new(SimpleCharSampler::new(args.chars));
|
||||||
|
|
||||||
let sampler = ComposedSampler::new(animation, fill, color, char);
|
let sampler = ComposedSampler::new(animation, fill, color, char);
|
||||||
let surface = WriteSurface::new(stdout(), width, height);
|
let surface = WriteSurface::new(stdout(), width, height)?;
|
||||||
|
|
||||||
let renderer = SamplerRenderer::new(surface, sampler);
|
let renderer = SamplerRenderer::new(surface, sampler);
|
||||||
let timer = SimpleTimer::new(delay);
|
let timer = SimpleTimer::new(delay);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
use anyhow::Error;
|
use anyhow::Error;
|
||||||
use crossterm::cursor::MoveTo;
|
use crossterm::cursor::{Hide, MoveTo, Show};
|
||||||
use crossterm::{ExecutableCommand, QueueableCommand};
|
use crossterm::{ExecutableCommand, QueueableCommand};
|
||||||
use crossterm::style::{Color, Print, SetForegroundColor};
|
use crossterm::style::{Color, Print, SetForegroundColor};
|
||||||
use crossterm::terminal::{Clear, ClearType};
|
use crossterm::terminal::{Clear, ClearType};
|
||||||
@ -42,11 +42,19 @@ impl Default for Cell {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl<T: Write> WriteSurface<T> {
|
impl<T: Write> WriteSurface<T> {
|
||||||
pub fn new(out: T, width: usize, height: usize) -> Self {
|
pub fn new(mut out: T, width: usize, height: usize) -> Result<Self, Error> {
|
||||||
Self {
|
out.queue(Hide)?;
|
||||||
|
|
||||||
|
Ok(Self {
|
||||||
out,
|
out,
|
||||||
array: Array2D::new(width, height)
|
array: Array2D::new(width, height)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn try_drop(&mut self) -> Result<(), Error> {
|
||||||
|
self.out.queue(Show)?;
|
||||||
|
self.out.execute(Clear(ClearType::Purge))?;
|
||||||
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -93,7 +101,6 @@ impl<T: Write> Surface for WriteSurface<T> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
self.out.queue(MoveTo(0, 0))?;
|
|
||||||
self.out.flush()?;
|
self.out.flush()?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
@ -101,7 +108,7 @@ impl<T: Write> Surface for WriteSurface<T> {
|
|||||||
|
|
||||||
impl<T: Write> Drop for WriteSurface<T> {
|
impl<T: Write> Drop for WriteSurface<T> {
|
||||||
fn drop(&mut self) {
|
fn drop(&mut self) {
|
||||||
if let Err(e) = self.out.execute(Clear(ClearType::Purge)) {
|
if let Err(e) = self.try_drop() {
|
||||||
println!("{}", e);
|
println!("{}", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -156,7 +163,7 @@ mod test {
|
|||||||
fn width() {
|
fn width() {
|
||||||
let data = Data::new();
|
let data = Data::new();
|
||||||
let mock = MockWrite::new(data);
|
let mock = MockWrite::new(data);
|
||||||
let surface = WriteSurface::new(mock, 10, 2);
|
let surface = WriteSurface::new(mock, 10, 2).unwrap();
|
||||||
|
|
||||||
assert_eq!(10, surface.width());
|
assert_eq!(10, surface.width());
|
||||||
}
|
}
|
||||||
@ -165,7 +172,7 @@ mod test {
|
|||||||
fn height() {
|
fn height() {
|
||||||
let data = Data::new();
|
let data = Data::new();
|
||||||
let mock = MockWrite::new(data);
|
let mock = MockWrite::new(data);
|
||||||
let surface = WriteSurface::new(mock, 5, 8);
|
let surface = WriteSurface::new(mock, 5, 8).unwrap();
|
||||||
|
|
||||||
assert_eq!(8, surface.height());
|
assert_eq!(8, surface.height());
|
||||||
}
|
}
|
||||||
@ -175,17 +182,20 @@ mod test {
|
|||||||
// Execute
|
// Execute
|
||||||
let data = Data::new();
|
let data = Data::new();
|
||||||
let mock = MockWrite::new(data.clone());
|
let mock = MockWrite::new(data.clone());
|
||||||
let mut surface = WriteSurface::new(mock, 3, 2);
|
let mut surface = WriteSurface::new(mock, 3, 2).unwrap();
|
||||||
|
|
||||||
surface.draw(0, 0, 'A', Color::Green);
|
surface.draw(0, 0, 'A', Color::Green);
|
||||||
surface.draw(1, 0, 'x', Color::Green);
|
surface.draw(1, 0, 'x', Color::Green);
|
||||||
surface.clear(1, 1);
|
surface.clear(1, 1);
|
||||||
surface.present().unwrap();
|
surface.present().unwrap();
|
||||||
|
|
||||||
|
drop(surface);
|
||||||
|
|
||||||
// Recreate expectation
|
// Recreate expectation
|
||||||
let expected = Data::new();
|
let expected = Data::new();
|
||||||
let mut stream = MockWrite::new(expected.clone());
|
let mut stream = MockWrite::new(expected.clone());
|
||||||
|
|
||||||
|
stream.queue(Hide).unwrap();
|
||||||
stream.queue(MoveTo(0, 0)).unwrap();
|
stream.queue(MoveTo(0, 0)).unwrap();
|
||||||
stream.queue(SetForegroundColor(Color::Green)).unwrap();
|
stream.queue(SetForegroundColor(Color::Green)).unwrap();
|
||||||
stream.queue(Print('A')).unwrap();
|
stream.queue(Print('A')).unwrap();
|
||||||
@ -193,7 +203,9 @@ mod test {
|
|||||||
stream.queue(MoveTo(1, 1)).unwrap();
|
stream.queue(MoveTo(1, 1)).unwrap();
|
||||||
stream.queue(SetForegroundColor(Color::Reset)).unwrap();
|
stream.queue(SetForegroundColor(Color::Reset)).unwrap();
|
||||||
stream.queue(Print(' ')).unwrap();
|
stream.queue(Print(' ')).unwrap();
|
||||||
stream.queue(MoveTo(0, 0)).unwrap();
|
stream.flush().unwrap();
|
||||||
|
stream.queue(Show).unwrap();
|
||||||
|
stream.queue(Clear(ClearType::Purge)).unwrap();
|
||||||
stream.flush().unwrap();
|
stream.flush().unwrap();
|
||||||
|
|
||||||
// Compare
|
// Compare
|
||||||
|
Loading…
Reference in New Issue
Block a user