A simple CPU rendered GUI IDE experience.
Diffstat (limited to 'src/bar.rs')
| -rw-r--r-- | src/bar.rs | 63 |
1 files changed, 26 insertions, 37 deletions
@@ -2,30 +2,13 @@ use std::iter::{once, repeat}; use dsb::Cell; use dsb::cell::Style; +use winit::keyboard::{Key, ModifiersState, NamedKey}; pub struct Bar { - pub state: state::StateMachine, pub text: crate::text::TextArea, pub last_action: String, } -rust_fsm::state_machine! { - #[derive(Debug, PartialEq, Eq, Copy, Clone)] - pub(crate) state(Inactive) - - Inactive => { - Control => Control, - }, - Control => { - Saved => Inactive, - WaitingForFname => InputFname, - Released => Inactive, - }, - InputFname => { - Enter => Inactive, - } -} - impl Bar { pub fn write_to( &self, @@ -34,6 +17,7 @@ impl Bar { (into, (w, _)): (&mut [Cell], (usize, usize)), oy: usize, fname: &str, + state: &super::State, ) { let row = &mut into[oy * w..oy * w + w]; row.fill(Cell { @@ -43,26 +27,14 @@ impl Bar { fn s(s: &str) -> impl Iterator<Item = (char, u8)> { s.chars().zip(repeat(0)) } - match self.state.state() { - state::State::Inactive => { - row[1.."gracilaria".len() + 1] - .iter_mut() - .zip("gracilaria".chars()) - .for_each(|(x, y)| x.letter = Some(y)); - row[w / 2 - fname.len() / 2 - ..w / 2 - fname.len() / 2 + fname.len()] - .iter_mut() - .zip(fname.chars()) - .for_each(|(x, y)| x.letter = Some(y)); - row.iter_mut() - .rev() - .zip(self.last_action.chars().rev()) - .for_each(|(x, y)| x.letter = Some(y)); - } - state::State::Control => { + use super::State; + match state { + State::Default if super::ctrl() => { let x = s("C + { ") .chain(once(('S', Style::BOLD))) .chain(s("ave, ")) + .chain(once(('Q', Style::BOLD))) + .chain(s("uit, ")) .chain(once(('C', Style::BOLD))) .chain(s("opy }")); @@ -74,11 +46,26 @@ impl Bar { } }); } - state::State::InputFname => { + State::Default => { + row[1.."gracilaria".len() + 1] + .iter_mut() + .zip("gracilaria".chars()) + .for_each(|(x, y)| x.letter = Some(y)); + row[w / 2 - fname.len() / 2 + ..w / 2 - fname.len() / 2 + fname.len()] + .iter_mut() + .zip(fname.chars()) + .for_each(|(x, y)| x.letter = Some(y)); + row.iter_mut() + .rev() + .zip(self.last_action.chars().rev()) + .for_each(|(x, y)| x.letter = Some(y)); + } + State::InputFname(x) => { "write to file: " .chars() .zip(repeat(Style::BOLD | Style::ITALIC)) - .chain(s(&self.text.rope.to_string())) + .chain(s(&x.rope.to_string())) .zip(row) .for_each(|((x, z), y)| { *y = Cell { @@ -88,6 +75,8 @@ impl Bar { } }); } + State::Save => unreachable!(), + _ => {} } } } |