From dea7cac5643327c5df55f47f5b8c5c5d0d6162cb Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Fri, 20 May 2022 13:50:53 +0100 Subject: [PATCH] window icon --- Cargo.lock | 191 ++++++++++++++++++++++++++++++++++++++++++-- lapce-ui/Cargo.toml | 1 + lapce-ui/src/app.rs | 32 ++++++++ 3 files changed, 216 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2e5ec994..c7e80555 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -188,6 +188,12 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f59bbe95d4e52a6398ec21238d31577f2b28a9d86807f06ca59d191d8440d0bb" +[[package]] +name = "bit_field" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcb6dd1c2376d2e096796e234a70e17e94cc2d5d54ff8ce42b28cef1d0d359a4" + [[package]] name = "bitflags" version = "1.3.2" @@ -765,7 +771,7 @@ dependencies = [ [[package]] name = "druid" version = "0.7.0" -source = "git+https://github.com/lapce/druid?branch=shell_opengl#e4ddc00f428d88b5e5845c29750903d9f8815773" +source = "git+https://github.com/lapce/druid?branch=shell_opengl#fda8c4dcd7244dcffc3b0a7e39b12f5115d32de0" dependencies = [ "console_error_panic_hook", "druid-derive", @@ -788,7 +794,7 @@ dependencies = [ [[package]] name = "druid-derive" version = "0.4.0" -source = "git+https://github.com/lapce/druid?branch=shell_opengl#e4ddc00f428d88b5e5845c29750903d9f8815773" +source = "git+https://github.com/lapce/druid?branch=shell_opengl#fda8c4dcd7244dcffc3b0a7e39b12f5115d32de0" dependencies = [ "proc-macro2", "quote", @@ -798,7 +804,7 @@ dependencies = [ [[package]] name = "druid-shell" version = "0.7.0" -source = "git+https://github.com/lapce/druid?branch=shell_opengl#e4ddc00f428d88b5e5845c29750903d9f8815773" +source = "git+https://github.com/lapce/druid?branch=shell_opengl#fda8c4dcd7244dcffc3b0a7e39b12f5115d32de0" dependencies = [ "anyhow", "bitflags", @@ -810,6 +816,7 @@ dependencies = [ "core-foundation", "core-graphics", "foreign-types", + "gdk-pixbuf", "gdk-sys", "gl_loader", "glib-sys", @@ -904,6 +911,22 @@ dependencies = [ "num-traits 0.2.14", ] +[[package]] +name = "exr" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14cc0e06fb5f67e5d6beadf3a382fec9baca1aa751c6d5368fdeee7e5932c215" +dependencies = [ + "bit_field", + "deflate", + "flume", + "half", + "inflate", + "lebe", + "smallvec", + "threadpool", +] + [[package]] name = "fallible-iterator" version = "0.2.0" @@ -1029,6 +1052,19 @@ dependencies = [ "thiserror", ] +[[package]] +name = "flume" +version = "0.10.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "843c03199d0c0ca54bc1ea90ac0d507274c28abcc4f691ae8b4eaa375087c76a" +dependencies = [ + "futures-core", + "futures-sink", + "nanorand", + "pin-project", + "spin 0.9.3", +] + [[package]] name = "fnv" version = "1.0.7" @@ -1233,6 +1269,12 @@ version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b" +[[package]] +name = "futures-sink" +version = "0.3.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21163e139fa306126e6eedaf49ecdb4588f939600f0b1e770f4205ee4b7fa868" + [[package]] name = "futures-task" version = "0.3.21" @@ -1358,13 +1400,15 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.3" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" +checksum = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad" dependencies = [ "cfg-if 1.0.0", + "js-sys", "libc", "wasi 0.10.0+wasi-snapshot-preview1", + "wasm-bindgen", ] [[package]] @@ -1653,6 +1697,12 @@ dependencies = [ "syn", ] +[[package]] +name = "half" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" + [[package]] name = "hashbrown" version = "0.11.2" @@ -1755,6 +1805,26 @@ dependencies = [ "version_check", ] +[[package]] +name = "image" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28edd9d7bc256be2502e325ac0628bde30b7001b9b52e0abe31a1a9dc2701212" +dependencies = [ + "bytemuck", + "byteorder", + "color_quant", + "exr", + "gif", + "jpeg-decoder", + "num-iter", + "num-rational", + "num-traits 0.2.14", + "png", + "scoped_threadpool", + "tiff", +] + [[package]] name = "include_dir" version = "0.6.1" @@ -1790,6 +1860,15 @@ dependencies = [ "serde 1.0.130", ] +[[package]] +name = "inflate" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cdb29978cc5797bd8dcc8e5bf7de604891df2a8dc576973d71a281e916db2ff" +dependencies = [ + "adler32", +] + [[package]] name = "inotify" version = "0.7.1" @@ -1891,6 +1970,9 @@ name = "jpeg-decoder" version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "744c24117572563a98a7e9168a5ac1ee4a1ca7f702211258797bbe0ed0346c3c" +dependencies = [ + "rayon", +] [[package]] name = "js-sys" @@ -2134,6 +2216,7 @@ dependencies = [ "fuzzy-matcher", "hashbrown", "im", + "image", "include_dir", "indexmap", "itertools", @@ -2180,6 +2263,12 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" +[[package]] +name = "lebe" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7efd1d698db0759e6ef11a7cd44407407399a910c774dd804c64c032da7826ff" + [[package]] name = "lexical-core" version = "0.7.6" @@ -2553,6 +2642,15 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7843ec2de400bcbc6a6328c958dc38e5359da6e93e72e37bc5246bf1ae776389" +[[package]] +name = "nanorand" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" +dependencies = [ + "getrandom", +] + [[package]] name = "net2" version = "0.2.37" @@ -2644,6 +2742,28 @@ dependencies = [ "num-traits 0.2.14", ] +[[package]] +name = "num-iter" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" +dependencies = [ + "autocfg", + "num-integer", + "num-traits 0.2.14", +] + +[[package]] +name = "num-rational" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d41702bd167c2df5520b384281bc111a4b5efcf7fbc4c9c222c815b07e0a6a6a" +dependencies = [ + "autocfg", + "num-integer", + "num-traits 0.2.14", +] + [[package]] name = "num-traits" version = "0.1.43" @@ -2940,6 +3060,26 @@ dependencies = [ "usvg 0.22.0", ] +[[package]] +name = "pin-project" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58ad3879ad3baf4e44784bc6a718a8698867bb991f8ce24d1bcbe2cfb4c3a75e" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "744b6f092ba29c3650faf274db506afd39944f48420f6c86b17cfe0ee1cb36bb" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "pin-project-lite" version = "0.2.7" @@ -3234,7 +3374,7 @@ dependencies = [ "cc", "libc", "once_cell", - "spin", + "spin 0.5.2", "untrusted", "web-sys", "winapi 0.3.9", @@ -3384,6 +3524,12 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "scoped_threadpool" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d51f5df5af43ab3f1360b429fa5e0152ac5ce8c0bd6485cae490332e96846a8" + [[package]] name = "scopeguard" version = "1.1.0" @@ -3652,9 +3798,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.6.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" +checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83" [[package]] name = "spin" @@ -3662,6 +3808,15 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" +[[package]] +name = "spin" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c530c2b0d0bf8b69304b39fe2001993e267461948b890cd037d8ad4293fa1a0d" +dependencies = [ + "lock_api", +] + [[package]] name = "spsc-buffer" version = "0.1.1" @@ -3919,6 +4074,26 @@ dependencies = [ "once_cell", ] +[[package]] +name = "threadpool" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" +dependencies = [ + "num_cpus", +] + +[[package]] +name = "tiff" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cfada0986f446a770eca461e8c6566cb879682f7d687c8348aa0c857bd52286" +dependencies = [ + "flate2", + "jpeg-decoder", + "weezl", +] + [[package]] name = "time" version = "0.1.44" diff --git a/lapce-ui/Cargo.toml b/lapce-ui/Cargo.toml index fc4847d3..dfd5f597 100644 --- a/lapce-ui/Cargo.toml +++ b/lapce-ui/Cargo.toml @@ -5,6 +5,7 @@ authors = ["Dongdong Zhou "] edition = "2021" [dependencies] +image = "0.24" chrono = "0.4.19" log = "0.4.14" fern = "0.6.0" diff --git a/lapce-ui/src/app.rs b/lapce-ui/src/app.rs index 36fa29ea..055fc50f 100644 --- a/lapce-ui/src/app.rs +++ b/lapce-ui/src/app.rs @@ -12,6 +12,9 @@ use crate::logging::override_log_levels; use crate::window::LapceWindowNew; +const LOGO_PNG: &[u8] = include_bytes!("../../extra/images/logo.png"); +const LOGO_ICO: &[u8] = include_bytes!("../../extra/windows/lapce.ico"); + pub fn build_window(data: &LapceWindowData) -> impl Widget { LapceWindowNew::new(data).lens(LapceWindowLens(data.window_id)) } @@ -68,6 +71,10 @@ fn new_window_desc( .window_size(size) .set_position(pos); + if let Some(icon) = window_icon() { + desc = desc.with_window_icon(icon); + } + #[cfg(target_os = "macos")] if true { desc = macos_window_desc(desc); @@ -76,6 +83,31 @@ fn new_window_desc( desc } +#[cfg(target_os = "macos")] +fn window_icon() -> Option { + None +} + +#[cfg(target_os = "linux")] +fn window_icon() -> Option { + let image = image::load_from_memory(LOGO_PNG) + .expect("Invalid Icon") + .into_rgba8(); + let (width, height) = image.dimensions(); + let rgba = image.into_raw(); + Some(druid::Icon::from_rgba(rgba, width, height).expect("Failed to open icon")) +} + +#[cfg(target_os = "windows")] +fn window_icon() -> Option { + let image = image::load_from_memory(LOGO_ICO) + .expect("Invalid Icon") + .into_rgba8(); + let (width, height) = image.dimensions(); + let rgba = image.into_raw(); + Some(druid::Icon::from_rgba(rgba, width, height).expect("Failed to open icon")) +} + #[cfg(target_os = "macos")] fn macos_window_desc(desc: WindowDesc) -> WindowDesc { desc.show_titlebar(false).menu(|_, _, _| {