From 5c0034aabdd0628e51218e26a14ed2346be22d40 Mon Sep 17 00:00:00 2001 From: Miguel da Mota Date: Sun, 14 Jan 2024 23:16:45 +0100 Subject: [PATCH] feat: windows support --- .editorconfig | 1 + src-tauri/Cargo.lock | 113 +++++++++++++++++++++++++++--- src-tauri/Cargo.toml | 2 + src-tauri/src/main.rs | 8 +++ src-tauri/tauri.conf.json | 21 ------ src-tauri/tauri.macos.conf.json | 24 +++++++ src-tauri/tauri.windows.conf.json | 22 ++++++ src/App.tsx | 4 ++ src/components/title-bar.tsx | 78 +++++++++++++++++++++ 9 files changed, 242 insertions(+), 31 deletions(-) create mode 100644 src-tauri/tauri.macos.conf.json create mode 100644 src-tauri/tauri.windows.conf.json create mode 100644 src/components/title-bar.tsx diff --git a/.editorconfig b/.editorconfig index ef01478..a441ff3 100644 --- a/.editorconfig +++ b/.editorconfig @@ -3,6 +3,7 @@ root = true [*] insert_final_newline = true trim_trailing_whitespace = true +end_of_line = lf [*.{js,ts,jsx,tsx,cjs}] indent_style = tab diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 688994d..678d1fd 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -119,6 +119,15 @@ version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + [[package]] name = "bitflags" version = "1.3.2" @@ -309,8 +318,24 @@ dependencies = [ "block", "cocoa-foundation", "core-foundation", - "core-graphics", - "foreign-types", + "core-graphics 0.22.3", + "foreign-types 0.3.2", + "libc", + "objc", +] + +[[package]] +name = "cocoa" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6140449f97a6e97f9511815c5632d84c8aacf8ac271ad77c559218161a1373c" +dependencies = [ + "bitflags 1.3.2", + "block", + "cocoa-foundation", + "core-foundation", + "core-graphics 0.23.1", + "foreign-types 0.5.0", "libc", "objc", ] @@ -376,7 +401,20 @@ dependencies = [ "bitflags 1.3.2", "core-foundation", "core-graphics-types", - "foreign-types", + "foreign-types 0.3.2", + "libc", +] + +[[package]] +name = "core-graphics" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "970a29baf4110c26fedbc7f82107d42c23f7e88e404c4577ed73fe99ff85a212" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "core-graphics-types", + "foreign-types 0.5.0", "libc", ] @@ -710,7 +748,28 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" dependencies = [ - "foreign-types-shared", + "foreign-types-shared 0.1.1", +] + +[[package]] +name = "foreign-types" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +dependencies = [ + "foreign-types-macros", + "foreign-types-shared 0.3.1", +] + +[[package]] +name = "foreign-types-macros" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", ] [[package]] @@ -719,6 +778,12 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" +[[package]] +name = "foreign-types-shared" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" + [[package]] name = "form_urlencoded" version = "1.2.1" @@ -2532,9 +2597,9 @@ dependencies = [ "bitflags 1.3.2", "cairo-rs", "cc", - "cocoa", + "cocoa 0.24.1", "core-foundation", - "core-graphics", + "core-graphics 0.22.3", "crossbeam-channel", "dispatch", "gdk", @@ -2605,7 +2670,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd27c04b9543776a972c86ccf70660b517ecabbeced9fb58d8b961a13ad129af" dependencies = [ "anyhow", - "cocoa", + "cocoa 0.24.1", "dirs-next", "embed_plist", "encoding_rs", @@ -2653,6 +2718,8 @@ dependencies = [ "serde_json", "tauri", "tauri-build", + "tauri-plugin-window-state", + "window-shadows", ] [[package]] @@ -2714,6 +2781,20 @@ dependencies = [ "tauri-utils", ] +[[package]] +name = "tauri-plugin-window-state" +version = "0.1.0" +source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v1#c5e8cd31ec86ba7ddcd524f1377a5bf09229fb9e" +dependencies = [ + "bincode", + "bitflags 2.4.1", + "log", + "serde", + "serde_json", + "tauri", + "thiserror", +] + [[package]] name = "tauri-runtime" version = "0.14.2" @@ -2741,7 +2822,7 @@ version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6cae61fbc731f690a4899681c9052dde6d05b159b44563ace8186fc1bfb7d158" dependencies = [ - "cocoa", + "cocoa 0.24.1", "gtk", "percent-encoding", "rand 0.8.5", @@ -3345,6 +3426,18 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "window-shadows" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67ff424735b1ac21293b0492b069394b0a189c8a463fb015a16dea7c2e221c08" +dependencies = [ + "cocoa 0.25.0", + "objc", + "raw-window-handle", + "windows-sys 0.48.0", +] + [[package]] name = "windows" version = "0.39.0" @@ -3664,8 +3757,8 @@ checksum = "6ad85d0e067359e409fcb88903c3eac817c392e5d638258abfb3da5ad8ba6fc4" dependencies = [ "base64 0.13.1", "block", - "cocoa", - "core-graphics", + "cocoa 0.24.1", + "core-graphics 0.22.3", "crossbeam-channel", "dunce", "gdk", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 72143c0..3195e25 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -14,8 +14,10 @@ tauri-build = { version = "1.5", features = [] } [dependencies] tauri = { version = "1.5", features = [ "macos-private-api", "window-minimize", "window-maximize", "window-hide", "window-unminimize", "window-unmaximize", "window-start-dragging", "window-close", "window-show", "shell-open"] } +tauri-plugin-window-state = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v1" } serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" +window-shadows = "0.2" [features] # this feature is used for production builds or when `devPath` points to the filesystem diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index 1508e77..1c6226c 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -2,10 +2,17 @@ #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] use tauri::Manager; +use window_shadows::set_shadow; fn main() { tauri::Builder::default() .invoke_handler(tauri::generate_handler![close_splashscreen]) + .setup(|app| { + let window = app.get_window("main").unwrap(); + + set_shadow(&window, true).expect("Unsupported platform!"); + Ok(()) + }) .run(tauri::generate_context!()) .expect("error while running tauri application"); } @@ -13,6 +20,7 @@ fn main() { #[tauri::command] async fn close_splashscreen(window: tauri::Window) { if let Some(splashscreen) = window.get_window("splashscreen") { + println!("Closing splashscreen"); splashscreen.close().unwrap(); } window.get_window("main").unwrap().show().unwrap(); diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 99c0912..0fcedce 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -43,27 +43,6 @@ "security": { "csp": null }, - "windows": [ - { - "fullscreen": false, - "resizable": true, - "title": "Vybr", - "width": 800, - "height": 600, - "decorations": true, - "hiddenTitle": true, - "titleBarStyle": "Overlay", - "visible": false, - "userAgent": "Vybr-App" - }, - { - "width": 300, - "height": 400, - "decorations": false, - "url": "splashscreen.html", - "label": "splashscreen" - } - ], "macOSPrivateApi": true } } diff --git a/src-tauri/tauri.macos.conf.json b/src-tauri/tauri.macos.conf.json new file mode 100644 index 0000000..fbf5b58 --- /dev/null +++ b/src-tauri/tauri.macos.conf.json @@ -0,0 +1,24 @@ +{ + "tauri": { + "windows": [ + { + "fullscreen": false, + "resizable": true, + "title": "Vybr (MacOS)", + "width": 800, + "height": 600, + "decorations": true, + "hiddenTitle": true, + "titleBarStyle": "Overlay", + "visible": false + }, + { + "width": 300, + "height": 400, + "decorations": false, + "url": "splashscreen.html", + "label": "splashscreen" + } + ] + } +} diff --git a/src-tauri/tauri.windows.conf.json b/src-tauri/tauri.windows.conf.json new file mode 100644 index 0000000..8715b5e --- /dev/null +++ b/src-tauri/tauri.windows.conf.json @@ -0,0 +1,22 @@ +{ + "tauri": { + "windows": [ + { + "fullscreen": false, + "resizable": true, + "title": "Vybr (Windows)", + "width": 800, + "height": 600, + "decorations": false, + "visible": false + }, + { + "width": 300, + "height": 400, + "decorations": false, + "url": "splashscreen.html", + "label": "splashscreen" + } + ] + } +} diff --git a/src/App.tsx b/src/App.tsx index d905ca3..89606c4 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,8 +1,10 @@ +import { isWindows } from "@tauri-apps/api/helpers/os-check"; import Sidebar from "./components/sidebar"; import { cn } from "./lib/utils"; import { dragging } from "./store"; +import TitleBar from "./components/title-bar"; export default function App() { return ( @@ -11,6 +13,8 @@ export default function App() { "cursor-col-resize": dragging.value.isDragging, })} > + {isWindows() && } +
diff --git a/src/components/title-bar.tsx b/src/components/title-bar.tsx new file mode 100644 index 0000000..97a3b9d --- /dev/null +++ b/src/components/title-bar.tsx @@ -0,0 +1,78 @@ +import { isWindows } from "@tauri-apps/api/helpers/os-check"; +import { appWindow } from "@tauri-apps/api/window"; + +export default function TitleBar() { + return ( +
+ {isWindows() && } +
+ ); +} + +function Windows() { + return ( +
+ + + +
+ ); +}