use asdf_overlay_client::common::event::window::input;
use napi_derive::napi;
use crate::event::ime::Ime;
pub enum InputEvent {
Cursor { event: CursorInput },
Keyboard { event: KeyboardInput },
}
impl From<input::InputEvent> for InputEvent {
fn from(event: input::InputEvent) -> Self {
match event {
input::InputEvent::Cursor(cursor) => InputEvent::Cursor {
event: cursor.into(),
},
input::InputEvent::Keyboard(keyboard) => InputEvent::Keyboard {
event: keyboard.into(),
},
}
}
}
#[napi(object)]
pub struct CursorInput {
pub x: i32,
pub y: i32,
pub kind: CursorInputKind,
}
impl From<input::CursorInput> for CursorInput {
fn from(input: input::CursorInput) -> Self {
CursorInput {
x: input.pos.x,
y: input.pos.y,
kind: input.event.into(),
}
}
}
#[napi]
pub enum CursorInputKind {
Enter,
Leave,
Move,
Action {
action: CursorAction,
state: CursorInputState,
},
Scroll { axis: ScrollAxis, delta: i16 },
}
impl From<input::CursorEvent> for CursorInputKind {
fn from(event: input::CursorEvent) -> Self {
match event {
input::CursorEvent::Enter => CursorInputKind::Enter,
input::CursorEvent::Leave => CursorInputKind::Leave,
input::CursorEvent::Move => CursorInputKind::Move,
input::CursorEvent::Action { state, action } => CursorInputKind::Action {
action: action.into(),
state: state.into(),
},
input::CursorEvent::Scroll { axis, delta } => CursorInputKind::Scroll {
axis: axis.into(),
delta,
},
}
}
}
#[napi]
pub enum KeyboardInput {
Key { key: Key, state: KeyInputState },
Char {
ch: String,
},
Ime {
ime: Ime,
},
}
impl From<input::KeyboardInput> for KeyboardInput {
fn from(input: input::KeyboardInput) -> Self {
match input {
input::KeyboardInput::Key { key, state } => KeyboardInput::Key {
key: key.into(),
state: state.into(),
},
input::KeyboardInput::Char(ch) => KeyboardInput::Char { ch: ch.to_string() },
input::KeyboardInput::Ime(ime) => KeyboardInput::Ime { ime: ime.into() },
}
}
}
#[napi(object)]
pub struct Key {
pub code: u8,
pub extended: bool,
}
impl From<input::Key> for Key {
fn from(key: input::Key) -> Self {
Key {
code: key.code.get(),
extended: key.extended,
}
}
}
#[napi]
pub fn key(code: u8, extended: Option<bool>) -> Key {
Key {
code,
extended: extended.unwrap_or(false),
}
}
#[napi(string_enum)]
pub enum ScrollAxis {
X,
Y,
}
impl From<input::ScrollAxis> for ScrollAxis {
fn from(axis: input::ScrollAxis) -> Self {
match axis {
input::ScrollAxis::X => ScrollAxis::X,
input::ScrollAxis::Y => ScrollAxis::Y,
}
}
}
#[napi(string_enum)]
pub enum CursorAction {
Left,
Right,
Middle,
Back,
Forward,
}
impl From<input::CursorAction> for CursorAction {
fn from(action: input::CursorAction) -> Self {
match action {
input::CursorAction::Left => CursorAction::Left,
input::CursorAction::Right => CursorAction::Right,
input::CursorAction::Middle => CursorAction::Middle,
input::CursorAction::Back => CursorAction::Back,
input::CursorAction::Forward => CursorAction::Forward,
}
}
}
#[napi]
pub enum CursorInputState {
Pressed {
click_count: u32,
},
Released,
}
impl From<input::CursorInputState> for CursorInputState {
fn from(state: input::CursorInputState) -> Self {
match state {
input::CursorInputState::Pressed { click_count } => {
CursorInputState::Pressed { click_count }
}
input::CursorInputState::Released => CursorInputState::Released,
}
}
}
#[napi(string_enum)]
pub enum KeyInputState {
Pressed,
Released,
}
impl From<input::KeyInputState> for KeyInputState {
fn from(state: input::KeyInputState) -> Self {
match state {
input::KeyInputState::Pressed => KeyInputState::Pressed,
input::KeyInputState::Released => KeyInputState::Released,
}
}
}
#[napi]
pub enum Cursor {
Default = 0,
Help,
Pointer,
Progress,
Wait,
Cell,
Crosshair,
Text,
VerticalText,
Alias,
Copy,
Move,
NotAllowed,
Grab,
Grabbing,
ColResize,
RowResize,
EastWestResize,
NorthSouthResize,
NorthEastSouthWestResize,
NorthWestSouthEastResize,
ZoomIn,
ZoomOut,
UpArrow,
Pin,
Person,
Pen,
Cd,
PanMiddle,
PanMiddleHorizontal,
PanMiddleVertical,
PanEast,
PanNorth,
PanNorthEast,
PanNorthWest,
PanSouth,
PanSouthEast,
PanSouthWest,
PanWest,
}
#[napi]
pub enum ImeConversion {
None = 0,
Native = 1,
Fullshape = 2,
NoConversion = 4,
HanjaConvert = 8,
Katakana = 16,
}