diff --git a/Cargo.lock b/Cargo.lock index 3db1f70581..293b85ff30 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -685,7 +685,7 @@ dependencies = [ "serde-untagged", "serde-value", "thiserror 2.0.16", - "toml", + "toml 0.8.23", "unicode-xid", "url", ] @@ -2267,6 +2267,7 @@ dependencies = [ "wgpu", "windows", "winit", + "winres", ] [[package]] @@ -5550,7 +5551,7 @@ dependencies = [ "cfg-expr", "heck", "pkg-config", - "toml", + "toml 0.8.23", "version-compare", ] @@ -5816,6 +5817,15 @@ dependencies = [ "tokio", ] +[[package]] +name = "toml" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +dependencies = [ + "serde", +] + [[package]] name = "toml" version = "0.8.23" @@ -7357,6 +7367,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "winres" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b68db261ef59e9e52806f688020631e987592bd83619edccda9c47d42cde4f6c" +dependencies = [ + "toml 0.5.11", +] + [[package]] name = "wit-bindgen" version = "0.45.0" diff --git a/desktop/Cargo.toml b/desktop/Cargo.toml index b6dd579a27..e8e860fb76 100644 --- a/desktop/Cargo.toml +++ b/desktop/Cargo.toml @@ -48,7 +48,7 @@ serde = { workspace = true } ash = { version = "0.38", optional = true } # Windows-specific dependencies -[target.'cfg(windows)'.dependencies] +[target.'cfg(target_os = "windows")'.dependencies] windows = { version = "0.58.0", features = [ "Win32_Foundation", "Win32_Graphics_Direct3D11", @@ -72,3 +72,6 @@ core-foundation = { version = "0.9", optional = true } # Linux-specific dependencies [target.'cfg(target_os = "linux")'.dependencies] libc = { version = "0.2", optional = true } + +[target.'cfg(target_os = "windows")'.build-dependencies] +winres = "0.1" diff --git a/desktop/assets/graphite-icon-color.ico b/desktop/assets/graphite-icon-color.ico new file mode 100644 index 0000000000..d8005273de Binary files /dev/null and b/desktop/assets/graphite-icon-color.ico differ diff --git a/desktop/build.rs b/desktop/build.rs new file mode 100644 index 0000000000..bf70ac6202 --- /dev/null +++ b/desktop/build.rs @@ -0,0 +1,8 @@ +fn main() { + #[cfg(target_os = "windows")] + { + let mut res = winres::WindowsResource::new(); + res.set_icon("assets/graphite-icon-color.ico"); + res.compile().expect("Failed to compile Windows resources"); + } +} diff --git a/desktop/src/native_window.rs b/desktop/src/native_window.rs index 45dd37589d..80cadf47dc 100644 --- a/desktop/src/native_window.rs +++ b/desktop/src/native_window.rs @@ -39,8 +39,17 @@ impl NativeWindowHandle { } else { let x11_window = WindowAttributesX11::default().with_name(APP_ID, APP_NAME); window.with_platform_attributes(Box::new(x11_window)) + }; + } + + #[cfg(target_os = "windows")] + { + if let Ok(win_icon) = winit::platform::windows::WinIcon::from_resource(1, None) { + let icon = winit::icon::Icon(std::sync::Arc::new(win_icon)); + window = window.with_window_icon(Some(icon)); } } + window } #[allow(unused_variables)]