lib-nested/src/main.rs

99 lines
3.1 KiB
Rust
Raw Normal View History

2020-12-04 20:38:51 +01:00
#![feature(trait_alias)]
2020-12-08 15:51:24 +01:00
#![feature(assoc_char_funcs)]
2020-12-04 20:38:51 +01:00
pub mod view;
pub mod port;
pub mod channel;
pub mod singleton_buffer;
pub mod vec_buffer;
2020-12-09 12:56:38 +01:00
pub mod terminal;
2020-12-14 19:36:21 +01:00
pub mod string_editor;
2020-12-04 20:38:51 +01:00
use {
2020-12-09 17:56:33 +01:00
async_std::{task},
std::{
sync::{Arc, RwLock}
},
cgmath::{Vector2},
crate::{
view::{View, Observer},
port::{ViewPort, InnerViewPort, OuterViewPort},
singleton_buffer::SingletonBuffer,
2020-12-09 12:56:38 +01:00
vec_buffer::VecBuffer,
2020-12-14 19:36:21 +01:00
terminal::{
Terminal,
TerminalAtom,
TerminalStyle,
TerminalCompositor,
TerminalEvent
}
},
termion::event::{Event, Key}
};
2020-12-04 20:38:51 +01:00
struct Fill(TerminalAtom);
impl View for Fill {
type Key = Vector2<i16>;
type Value = TerminalAtom;
fn view(&self, _: Vector2<i16>) -> Option<TerminalAtom> {
Some(self.0.clone())
}
}
2020-12-04 20:38:51 +01:00
#[async_std::main]
async fn main() {
let composite_view = port::ViewPort::new();
let mut compositor = TerminalCompositor::new(composite_view.inner());
2020-12-08 15:51:24 +01:00
task::spawn(async move {
2020-12-14 19:36:21 +01:00
/*\
<<<<>>>><<>><><<>><<<*>>><<>><><<>><<<<>>>>
Setup Views
<<<<>>>><<>><><<>><<<*>>><<>><><<>><<<<>>>>
\*/
let fp = port::ViewPort::with_view(Arc::new(Fill(TerminalAtom::new('.', TerminalStyle::fg_color((50,50,50))))));
compositor.push(fp.outer());
2020-12-14 19:36:21 +01:00
let ep = port::ViewPort::new();
let mut editor = string_editor::StringEditor::new(ep.inner());
compositor.push(ep.outer());
2020-12-04 20:38:51 +01:00
2020-12-14 19:36:21 +01:00
/*\
<<<<>>>><<>><><<>><<<*>>><<>><><<>><<<<>>>>
Event Loop
<<<<>>>><<>><><<>><<<*>>><<>><><<>><<<<>>>>
\*/
let mut term = Terminal::new();
loop {
match term.next_event().await {
TerminalEvent::Resize(size) => {
for x in 0 .. size.x {
for y in 0 .. size.y {
fp.inner().notify(Vector2::new(x,y));
}
}
},
TerminalEvent::Input(Event::Key(Key::Left)) => editor.prev(),
TerminalEvent::Input(Event::Key(Key::Right)) => editor.next(),
TerminalEvent::Input(Event::Key(Key::Home)) => editor.goto(0),
TerminalEvent::Input(Event::Key(Key::End)) => editor.goto_end(),
TerminalEvent::Input(Event::Key(Key::Char(c))) => editor.insert(c),
TerminalEvent::Input(Event::Key(Key::Delete)) => editor.delete(),
TerminalEvent::Input(Event::Key(Key::Backspace)) => { editor.prev(); editor.delete(); },
TerminalEvent::Input(Event::Key(Key::Ctrl('c'))) => break,
_ => {}
}
}
});
2020-12-04 20:38:51 +01:00
2020-12-14 19:36:21 +01:00
/*\
<<<<>>>><<>><><<>><<<*>>><<>><><<>><<<<>>>>
Terminal Rendering
<<<<>>>><<>><><<>><<<*>>><<>><><<>><<<<>>>>
\*/
2020-12-09 17:56:33 +01:00
Terminal::show(composite_view.into_outer()).await.ok();
2020-12-04 20:38:51 +01:00
}