commit aebb418093209a0b9123a8318d34f3ad9186efdd
parent 48c93f651ecc8d08708ab0acc36ca99b7c696a1a
Author: Sylvia Ivory <git@sivory.net>
Date: Fri, 20 Jun 2025 01:16:23 -0700
Embed icons into binary
Diffstat:
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))