Initial Commit
This commit is contained in:
commit
115bc83b8e
5 changed files with 109 additions and 0 deletions
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
target/
|
||||
Cargo.lock
|
||||
9
Cargo.toml
Normal file
9
Cargo.toml
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
[package]
|
||||
name = "mosaic-tile"
|
||||
version = "0.1.0"
|
||||
authors = ["Brooks J Rady <b.j.rady@gmail.com>"]
|
||||
edition = "2018"
|
||||
|
||||
[dependencies]
|
||||
serde = { version = "1.0", features = ["derive"] }
|
||||
serde_json = "1.0"
|
||||
37
src/keys.rs
Normal file
37
src/keys.rs
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
use serde::{Deserialize, Serialize};
|
||||
|
||||
#[derive(Debug, PartialOrd, PartialEq, Eq, Clone, Copy, Hash, Serialize, Deserialize)]
|
||||
pub struct KeyEvent {
|
||||
pub code: KeyCode,
|
||||
pub modifiers: KeyModifiers,
|
||||
}
|
||||
|
||||
#[derive(Debug, PartialOrd, PartialEq, Eq, Clone, Copy, Hash, Serialize, Deserialize)]
|
||||
pub struct KeyModifiers {
|
||||
pub bits: u8,
|
||||
//pub shift: bool,
|
||||
//pub ctrl: bool,
|
||||
//pub alt: bool,
|
||||
}
|
||||
|
||||
#[derive(Debug, PartialOrd, PartialEq, Eq, Clone, Copy, Hash, Serialize, Deserialize)]
|
||||
pub enum KeyCode {
|
||||
Backspace,
|
||||
Enter,
|
||||
Left,
|
||||
Right,
|
||||
Up,
|
||||
Down,
|
||||
Home,
|
||||
End,
|
||||
PageUp,
|
||||
PageDown,
|
||||
Tab,
|
||||
BackTab,
|
||||
Delete,
|
||||
Insert,
|
||||
F(u8),
|
||||
Char(char),
|
||||
Null,
|
||||
Esc,
|
||||
}
|
||||
43
src/lib.rs
Normal file
43
src/lib.rs
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
mod keys;
|
||||
mod shim;
|
||||
|
||||
pub use keys::*;
|
||||
pub use shim::*;
|
||||
|
||||
pub trait MosaicPlugin {
|
||||
fn init(&mut self);
|
||||
fn draw(&mut self, rows: usize, cols: usize);
|
||||
fn handle_key(&mut self, key: KeyEvent);
|
||||
}
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! register_plugin {
|
||||
($t:ty) => {
|
||||
use mosaic_plugin::*;
|
||||
|
||||
use std::cell::RefCell;
|
||||
thread_local! {
|
||||
static STATE: RefCell<$t> = RefCell::new(Default::default());
|
||||
}
|
||||
|
||||
fn main() {
|
||||
STATE.with(|state| {
|
||||
state.borrow_mut().init();
|
||||
});
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub fn draw(rows: i32, cols: i32) {
|
||||
STATE.with(|state| {
|
||||
state.borrow_mut().draw(rows as usize, cols as usize);
|
||||
});
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub fn handle_key() {
|
||||
STATE.with(|state| {
|
||||
state.borrow_mut().handle_key(get_key());
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
||||
18
src/shim.rs
Normal file
18
src/shim.rs
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
use crate::keys::KeyEvent;
|
||||
use std::{io, path::Path};
|
||||
|
||||
pub fn get_key() -> KeyEvent {
|
||||
let mut json = String::new();
|
||||
io::stdin().read_line(&mut json).unwrap();
|
||||
serde_json::from_str(&json).unwrap()
|
||||
}
|
||||
|
||||
pub fn open_file(path: &Path) {
|
||||
println!("{}", path.to_string_lossy());
|
||||
unsafe { host_open_file() };
|
||||
}
|
||||
|
||||
#[link(wasm_import_module = "mosaic")]
|
||||
extern "C" {
|
||||
fn host_open_file();
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue