From d254916430a3fdb5cd7acc4f7e0b73f42ed33ce8 Mon Sep 17 00:00:00 2001 From: TrueDoctor Date: Sun, 21 Mar 2021 19:32:56 +0100 Subject: [PATCH] Define the js wasm-editor interface (#31) --- .gitignore | 3 +- Cargo.lock | 3 +- Cargo.toml | 1 + packages/graphite-editor/src/layout/mod.rs | 2 +- .../wasm-wrapper}/.gitignore | 0 .../wasm-wrapper}/Cargo.toml | 3 +- .../wasm-wrapper}/src/lib.rs | 9 +++++ .../wasm-wrapper}/src/utils.rs | 0 web-frontend/wasm-wrapper/src/viewport.rs | 18 +++++++++ web-frontend/wasm-wrapper/src/window.rs | 40 +++++++++++++++++++ 10 files changed, 75 insertions(+), 4 deletions(-) rename {packages/wasm-bindings => web-frontend/wasm-wrapper}/.gitignore (100%) rename {packages/wasm-bindings => web-frontend/wasm-wrapper}/Cargo.toml (87%) rename {packages/wasm-bindings => web-frontend/wasm-wrapper}/src/lib.rs (58%) rename {packages/wasm-bindings => web-frontend/wasm-wrapper}/src/utils.rs (100%) create mode 100644 web-frontend/wasm-wrapper/src/viewport.rs create mode 100644 web-frontend/wasm-wrapper/src/window.rs diff --git a/.gitignore b/.gitignore index 12933c0f..42f08a0e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ target/ -*.spv \ No newline at end of file +*.spv +*.exrc diff --git a/Cargo.lock b/Cargo.lock index 524663bd..e7f5a2c3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -199,10 +199,11 @@ dependencies = [ ] [[package]] -name = "wasm-bindings" +name = "wasm-wrapper" version = "0.1.0" dependencies = [ "console_error_panic_hook", + "graphite-editor", "wasm-bindgen", "wasm-bindgen-test", ] diff --git a/Cargo.toml b/Cargo.toml index 66313554..6c8d33d7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,7 @@ [workspace] members = [ "packages/*", + "web-frontend/wasm-wrapper", ] [profile.release.package.wasm-bindings] diff --git a/packages/graphite-editor/src/layout/mod.rs b/packages/graphite-editor/src/layout/mod.rs index 8b77134c..ba7e92b7 100644 --- a/packages/graphite-editor/src/layout/mod.rs +++ b/packages/graphite-editor/src/layout/mod.rs @@ -1,5 +1,5 @@ use crate::EditorError; -type PanelId = usize; +pub type PanelId = usize; struct LayoutRoot { hovered_panel: PanelId, diff --git a/packages/wasm-bindings/.gitignore b/web-frontend/wasm-wrapper/.gitignore similarity index 100% rename from packages/wasm-bindings/.gitignore rename to web-frontend/wasm-wrapper/.gitignore diff --git a/packages/wasm-bindings/Cargo.toml b/web-frontend/wasm-wrapper/Cargo.toml similarity index 87% rename from packages/wasm-bindings/Cargo.toml rename to web-frontend/wasm-wrapper/Cargo.toml index 1184348d..7a2eb2e1 100644 --- a/packages/wasm-bindings/Cargo.toml +++ b/web-frontend/wasm-wrapper/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "wasm-bindings" +name = "wasm-wrapper" version = "0.1.0" authors = ["Keavon Chambers "] edition = "2018" @@ -12,6 +12,7 @@ default = ["console_error_panic_hook"] [dependencies] wasm-bindgen = "0.2.72" +graphite-editor = { path = "../../packages/graphite-editor" } # The `console_error_panic_hook` crate provides better debugging of panics by # logging them with `console.error`. This is great for development, but requires diff --git a/packages/wasm-bindings/src/lib.rs b/web-frontend/wasm-wrapper/src/lib.rs similarity index 58% rename from packages/wasm-bindings/src/lib.rs rename to web-frontend/wasm-wrapper/src/lib.rs index 6bc897c1..f3ac30b2 100644 --- a/packages/wasm-bindings/src/lib.rs +++ b/web-frontend/wasm-wrapper/src/lib.rs @@ -1,4 +1,6 @@ mod utils; +mod viewport; +mod window; use wasm_bindgen::prelude::*; @@ -12,3 +14,10 @@ pub fn init() { utils::set_panic_hook(); alert("Hello, Graphite!"); } + +/// Send events +#[wasm_bindgen] +pub fn handle_event(event_name: String) { + // TODO: add payload + todo!() +} diff --git a/packages/wasm-bindings/src/utils.rs b/web-frontend/wasm-wrapper/src/utils.rs similarity index 100% rename from packages/wasm-bindings/src/utils.rs rename to web-frontend/wasm-wrapper/src/utils.rs diff --git a/web-frontend/wasm-wrapper/src/viewport.rs b/web-frontend/wasm-wrapper/src/viewport.rs new file mode 100644 index 00000000..411e1a2c --- /dev/null +++ b/web-frontend/wasm-wrapper/src/viewport.rs @@ -0,0 +1,18 @@ +/// Modify the currently selected tool in the document state store +#[wasm_bindgen] +pub fn select_tool(tool: String) { + todo!() +} + +/// Mouse movement with the bounds of the canvas +#[wasm_bindgen] +pub fn on_mouse_move(x: u32, y: u32) { + todo!() +} + +use graphite_editor::Color; +/// Update working colors +#[wasm_bindgen] +pub fn update_colors(primary_color: Color, secondary_color: Color) { + todo!() +} diff --git a/web-frontend/wasm-wrapper/src/window.rs b/web-frontend/wasm-wrapper/src/window.rs new file mode 100644 index 00000000..1c57480c --- /dev/null +++ b/web-frontend/wasm-wrapper/src/window.rs @@ -0,0 +1,40 @@ +type DocumentId = u32; + +/// Modify the active Document in the editor state store +#[wasm_bindgen] +pub fn set_active_document(document_id: DocumentId) { + todo!() +} + +/// Query the name of a specific document +#[wasm_bindgen] +pub fn get_document_name(document_id: DocumentId) -> String { + todo!() +} + +/// Query the id of the most recently interacted with document +#[wasm_bindgen] +pub fn get_active_document() -> DocumentId { + todo!() +} + +use graphite_editor::layout::PanelId; +/// Notify the editor that the mouse hovers above a panel +#[wasm_bindgen] +pub fn panel_hover_enter(panel_id: PanelId) { + todo!() +} + +/// Query a list of currently available operations +#[wasm_bindgen] +pub fn get_available_operations() -> Box<[String]> { + todo!() +} + +/* +/// Load a new .gdd file into the editor +/// Returns a unique document identifier +#[wasm_bindgen] +pub fn load_document(raw_data: &[u8]) -> DocumentId { + todo!() +}*/