#![recursion_limit = "512"]
#[cfg(target_arch = "wasm32")]
#[path = "web_app.rs"]
pub mod sys;
#[cfg(target_arch = "wasm32")]
#[path = "web_fs.rs"]
pub mod fs;
#[cfg(not(target_arch = "wasm32"))]
extern crate glutin;
#[cfg(not(target_arch = "wasm32"))]
extern crate time;
#[cfg(all(not(target_arch = "wasm32"), feature = "http"))]
extern crate bytes;
#[cfg(all(not(target_arch = "wasm32"), feature = "http"))]
extern crate reqwest;
#[cfg(not(target_arch = "wasm32"))]
#[path = "native_app.rs"]
pub mod sys;
#[cfg(all(not(target_arch = "wasm32"), feature = "http"))]
#[path = "native_fs_http.rs"]
pub mod fs;
#[cfg(all(not(target_arch = "wasm32"), not(feature = "http")))]
#[path = "native_fs.rs"]
pub mod fs;
pub use self::fs::*;
pub use self::sys::*;
pub struct AppConfig {
pub title: String,
pub size: (u32, u32),
pub icon: Option<(u32,u32,Vec<u8>)>,
pub vsync: bool,
pub headless: bool,
pub fullscreen: bool,
pub resizable: bool,
pub show_cursor: bool,
pub intercept_close_request: bool,
}
impl AppConfig {
pub fn new<T: Into<String>>(title: T, size: (u32, u32)) -> AppConfig {
AppConfig {
title: title.into(),
size,
vsync: true,
headless: false,
fullscreen: false,
resizable: true,
show_cursor: true,
intercept_close_request: false,
icon : None,
}
}
}
pub mod events {
use std::fmt;
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum ScanCode {
Key1,
Key2,
Key3,
Key4,
Key5,
Key6,
Key7,
Key8,
Key9,
Key0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z,
Escape,
F1,
F2,
F3,
F4,
F5,
F6,
F7,
F8,
F9,
F10,
F11,
F12,
F13,
F14,
F15,
F16,
F17,
F18,
F19,
F20,
F21,
F22,
F23,
F24,
Snapshot,
ScrollLock,
Pause,
Insert,
Home,
Delete,
End,
PageDown,
PageUp,
Left,
Up,
Right,
Down,
Backspace,
Enter,
Space,
Compose,
Caret,
Numlock,
Numpad0,
Numpad1,
Numpad2,
Numpad3,
Numpad4,
Numpad5,
Numpad6,
Numpad7,
Numpad8,
Numpad9,
NumpadAdd,
NumpadDivide,
NumpadDecimal,
NumpadComma,
NumpadEnter,
NumpadEqual,
NumpadMultiply,
NumpadSubtract,
Apostrophe,
Asterisk,
Backslash,
CapsLock,
Colon,
Comma,
Convert,
Equal,
Backquote,
LAlt,
LBracket,
LCtrl,
LShift,
LWin,
Mail,
MediaSelect,
MediaStop,
Minus,
Mute,
Period,
Plus,
RAlt,
RBracket,
RCtrl,
RShift,
RWin,
Semicolon,
Slash,
Tab,
Underline,
Copy,
Paste,
Cut,
Unknown,
}
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum MouseButton {
Left,
Middle,
Right,
Other(usize),
}
#[derive(Debug, Clone)]
pub struct MouseButtonEvent {
pub button: MouseButton,
}
#[derive(Clone)]
pub struct KeyDownEvent {
pub code: ScanCode,
pub key: String,
pub shift: bool,
pub alt: bool,
pub ctrl: bool,
}
#[derive(Clone)]
pub struct KeyUpEvent {
pub code: ScanCode,
pub key: String,
pub shift: bool,
pub alt: bool,
pub ctrl: bool,
}
impl fmt::Debug for KeyUpEvent {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(
f,
"{} {} {} {:?} {}",
if self.shift { "shift" } else { "" },
if self.alt { "alt" } else { "" },
if self.ctrl { "ctrl" } else { "" },
self.code,
self.key,
)
}
}
impl fmt::Debug for KeyDownEvent {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(
f,
"{} {} {} {:?} {}",
if self.shift { "shift" } else { "" },
if self.alt { "alt" } else { "" },
if self.ctrl { "ctrl" } else { "" },
self.code,
self.key,
)
}
}
}
pub use events::*;
#[derive(Debug, Clone)]
pub enum AppEvent {
MouseDown(MouseButtonEvent),
MouseUp(MouseButtonEvent),
KeyDown(KeyDownEvent),
KeyUp(KeyUpEvent),
CharEvent(char),
Resized((u32, u32)),
MousePos((f64, f64)),
FileDropped(String),
CloseRequested,
}