fjordgard

A desktop clock application
Log | Files | Refs | README | LICENSE

commit aebb418093209a0b9123a8318d34f3ad9186efdd
parent 48c93f651ecc8d08708ab0acc36ca99b7c696a1a
Author: Sylvia Ivory <git@sivory.net>
Date:   Fri, 20 Jun 2025 01:16:23 -0700

Embed icons into binary

Diffstat:
MCargo.lock | 46++++++++++++++++++++++++++++++++++++++++++++++
MCargo.toml | 2++
Msrc/icon.rs | 14+++++++++++---
3 files changed, 59 insertions(+), 3 deletions(-)

diff --git a/Cargo.lock b/Cargo.lock @@ -1344,6 +1344,7 @@ dependencies = [ "log", "open", "rfd", + "rust-embed", "send_wrapper", "serde", "serde_json", @@ -3937,6 +3938,40 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97" [[package]] +name = "rust-embed" +version = "8.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "025908b8682a26ba8d12f6f2d66b987584a4a87bc024abc5bbc12553a8cd178a" +dependencies = [ + "rust-embed-impl", + "rust-embed-utils", + "walkdir", +] + +[[package]] +name = "rust-embed-impl" +version = "8.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6065f1a4392b71819ec1ea1df1120673418bf386f50de1d6f54204d836d4349c" +dependencies = [ + "proc-macro2", + "quote", + "rust-embed-utils", + "syn 2.0.103", + "walkdir", +] + +[[package]] +name = "rust-embed-utils" +version = "8.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6cc0c81648b20b70c491ff8cce00c1c3b223bb8ed2b5d41f0e54c6c4c0a3594" +dependencies = [ + "sha2", + "walkdir", +] + +[[package]] name = "rust-ini" version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -4240,6 +4275,17 @@ dependencies = [ ] [[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] name = "shlex" version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" diff --git a/Cargo.toml b/Cargo.toml @@ -26,6 +26,7 @@ iced = { version = "0.13.1", features = ["canvas", "image", "svg", "tokio"] } tokio = { version = "1.45.1", features = ["fs", "time"] } env_logger = "0.11.8" open = "5.3.2" +rust-embed = "8.7.2" [target.'cfg(target_arch="wasm32")'.dependencies] iced = { version = "0.13.1", features = ["canvas", "image", "svg", "webgl", "fira-sans"] } @@ -33,5 +34,6 @@ tokio = { version = "1.45.1", features = ["time"] } console_error_panic_hook = "0.1.7" console_log = { version = "1.0.0", features = ["color"] } send_wrapper = "0.6.0" +rust-embed = { version = "8.7.2", features = ["debug-embed"] } # will not work without this instant = { version = "0.1", features = ["wasm-bindgen"] } diff --git a/src/icon.rs b/src/icon.rs @@ -2,9 +2,17 @@ use iced::{ Color, Element, Length, Theme, widget::{button, svg}, }; +use rust_embed::Embed; -pub fn icon<'a, Message>(handle: impl Into<svg::Handle>) -> Element<'a, Message> { - svg(handle) +#[derive(Embed)] +#[folder = "icons/"] +#[prefix = "icons/"] +struct Icon; + +pub fn icon<'a, Message>(path: &str) -> Element<'a, Message> { + let bytes = Icon::get(path).unwrap().data; + + svg(svg::Handle::from_memory(bytes)) .height(Length::Fixed(16.0)) .width(Length::Fixed(16.0)) .style(white) @@ -12,7 +20,7 @@ pub fn icon<'a, Message>(handle: impl Into<svg::Handle>) -> Element<'a, Message> } pub fn icon_button<'a, Message: 'a + Clone>( - handle: impl Into<svg::Handle>, + handle: &str, on_press: Message, ) -> Element<'a, Message> { button(icon(handle))