diff --git a/client/web/assets/16px-solid/copy.svg b/client/web/assets/16px-solid/copy.svg new file mode 100644 index 000000000..b8e5d45ca --- /dev/null +++ b/client/web/assets/16px-solid/copy.svg @@ -0,0 +1,4 @@ + + + + diff --git a/client/web/assets/16px-solid/file-new.svg b/client/web/assets/16px-solid/file.svg similarity index 100% rename from client/web/assets/16px-solid/file-new.svg rename to client/web/assets/16px-solid/file.svg diff --git a/client/web/assets/16px-solid/paste.svg b/client/web/assets/16px-solid/paste.svg new file mode 100644 index 000000000..fa211a58e --- /dev/null +++ b/client/web/assets/16px-solid/paste.svg @@ -0,0 +1,4 @@ + + + + diff --git a/client/web/src/components/widgets/inputs/MenuBarInput.vue b/client/web/src/components/widgets/inputs/MenuBarInput.vue index d739c3bfc..875462e54 100644 --- a/client/web/src/components/widgets/inputs/MenuBarInput.vue +++ b/client/web/src/components/widgets/inputs/MenuBarInput.vue @@ -65,7 +65,7 @@ const menuEntries: MenuListEntries = [ ref: undefined, children: [ [ - { label: "New", icon: "FileNew", shortcut: ["Ctrl", "N"] }, + { label: "New", icon: "File", shortcut: ["Ctrl", "N"] }, { label: "Open…", shortcut: ["Ctrl", "O"] }, { label: "Open Recent", @@ -94,7 +94,7 @@ const menuEntries: MenuListEntries = [ ], [ { label: "Import…", shortcut: ["Ctrl", "I"] }, - { label: "Export…", shortcut: ["Ctrl", "E"] }, + { label: "Export…", shortcut: ["Ctrl", "E"], action: async () => (await wasm).export_document() }, ], [{ label: "Quit", shortcut: ["Ctrl", "Q"] }], ], @@ -104,13 +104,13 @@ const menuEntries: MenuListEntries = [ ref: undefined, children: [ [ - { label: "Undo", shortcut: ["Ctrl", "Z"], action: async () => (await wasm).undo()}, + { label: "Undo", shortcut: ["Ctrl", "Z"], action: async () => (await wasm).undo() }, { label: "Redo", shortcut: ["Ctrl", "⇧", "Z"] }, ], [ { label: "Cut", shortcut: ["Ctrl", "X"] }, - { label: "Copy", shortcut: ["Ctrl", "C"] }, - { label: "Paste", shortcut: ["Ctrl", "V"] }, + { label: "Copy", icon: "Copy", shortcut: ["Ctrl", "C"] }, + { label: "Paste", icon: "Paste", shortcut: ["Ctrl", "V"] }, ], ], }, diff --git a/client/web/src/components/widgets/labels/Icon.vue b/client/web/src/components/widgets/labels/Icon.vue index be58ad272..f2573a6c5 100644 --- a/client/web/src/components/widgets/labels/Icon.vue +++ b/client/web/src/components/widgets/labels/Icon.vue @@ -74,7 +74,9 @@ import ViewModePixels from "../../../../assets/16px-solid/view-mode-pixels.svg"; import EyeVisible from "../../../../assets/16px-solid/visibility-eye-visible.svg"; import EyeHidden from "../../../../assets/16px-solid/visibility-eye-hidden.svg"; import GraphiteLogo from "../../../../assets/16px-solid/graphite-logo.svg"; -import FileNew from "../../../../assets/16px-solid/file-new.svg"; +import File from "../../../../assets/16px-solid/file.svg"; +import Copy from "../../../../assets/16px-solid/copy.svg"; +import Paste from "../../../../assets/16px-solid/paste.svg"; import SwapButton from "../../../../assets/12px-solid/swap.svg"; import ResetColorsButton from "../../../../assets/12px-solid/reset-colors.svg"; @@ -143,7 +145,9 @@ const icons = { EyeVisible: { component: EyeVisible, size: 16 }, EyeHidden: { component: EyeHidden, size: 16 }, GraphiteLogo: { component: GraphiteLogo, size: 16 }, - FileNew: { component: FileNew, size: 16 }, + File: { component: File, size: 16 }, + Copy: { component: Copy, size: 16 }, + Paste: { component: Paste, size: 16 }, SwapButton: { component: SwapButton, size: 12 }, ResetColorsButton: { component: ResetColorsButton, size: 12 }, DropdownArrow: { component: DropdownArrow, size: 12 }, diff --git a/client/web/wasm/src/document.rs b/client/web/wasm/src/document.rs index 5571a3dd7..f73b58944 100644 --- a/client/web/wasm/src/document.rs +++ b/client/web/wasm/src/document.rs @@ -98,6 +98,12 @@ pub fn undo() -> Result<(), JsValue> { EDITOR_STATE.with(|editor| editor.borrow_mut().handle_message(DocumentMessage::Undo)).map_err(convert_error) } +/// Export the document +#[wasm_bindgen] +pub fn export_document() -> Result<(), JsValue> { + EDITOR_STATE.with(|editor| editor.borrow_mut().handle_message(DocumentMessage::ExportDocument)).map_err(convert_error) +} + /// Select a layer from the layer list #[wasm_bindgen] pub fn select_layer(path: Vec) -> Result<(), JsValue> {