Skip to content

Commit 8f95e0e

Browse files
committed
feat: add application icon
1 parent deb5c0d commit 8f95e0e

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ eframe = "0.33"
1919
egui = "0.33"
2020
egui-file-dialog = "0.12"
2121
egui-snarl = "0.9"
22+
image = { version = "0.25", default-features = false, features = ["png"] }
2223

2324
[build-dependencies]
2425
winres = "0.1"

src/main.rs

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,11 +58,21 @@ fn main() -> anyhow::Result<()> {
5858
// Supervision Loop
5959
spawn_supervision_loop(&rt, midi.clone(), tx_midi, rx_system, cfg.clone());
6060

61+
// Load Icon
62+
let icon = match load_icon() {
63+
Ok(i) => Some(i),
64+
Err(e) => {
65+
warn!("Failed to load app icon: {}", e);
66+
None
67+
}
68+
};
69+
6170
// Launch the GUI
6271
let options = eframe::NativeOptions {
6372
viewport: egui::ViewportBuilder::default()
6473
.with_inner_size([840.0, 510.0])
65-
.with_maximized(true),
74+
.with_maximized(true)
75+
.with_icon(icon.unwrap_or_default()), // Handle optional efficiently
6676
..Default::default()
6777
};
6878
let app_midi = midi.clone();
@@ -525,3 +535,16 @@ fn connect_device_output(midi_state: Arc<Mutex<Midi>>, device_name: &str) {
525535
warn!("MIDI Output device '{}' not found", device_name);
526536
}
527537
}
538+
539+
fn load_icon() -> anyhow::Result<egui::IconData> {
540+
let icon_bytes = include_bytes!("../assets/icon.png");
541+
let image = image::load_from_memory(icon_bytes)
542+
.context("Failed to decode icon PNG")?
543+
.into_rgba8();
544+
let (width, height) = image.dimensions();
545+
Ok(egui::IconData {
546+
rgba: image.into_raw(),
547+
width,
548+
height,
549+
})
550+
}

0 commit comments

Comments
 (0)