diff --git a/.github/workflows/bundle.yml b/.github/workflows/bundle.yml new file mode 100644 index 0000000..98a456f --- /dev/null +++ b/.github/workflows/bundle.yml @@ -0,0 +1,25 @@ +name: bundle + +on: + push: + branches: [ release ] + pull_request: + branches: [ release ] + +env: + CARGO_TERM_COLOR: always + +jobs: + build: + + runs-on: macos-latest + + steps: + - uses: actions/checkout@v3 + - name: Build + run: cargo install cargo-bundle && cargo bundle --release --features=fltk/fltk-bundled + - name: Upload a Build Artifact + uses: actions/upload-artifact@v2 + with: + name: sysinfo-gui-bundle + path: target/release/bundle/osx/sysinfo-gui.app diff --git a/Cargo.lock b/Cargo.lock index 7b016d7..dcb44bd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -902,13 +902,14 @@ dependencies = [ [[package]] name = "sysinfo-gui" -version = "0.1.10" +version = "0.1.11" dependencies = [ "dark-light", "fltk", "fltk-grid", "parking_lot 0.12.0", "sysinfo", + "winres", ] [[package]] @@ -1131,6 +1132,15 @@ dependencies = [ "winapi", ] +[[package]] +name = "winres" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b68db261ef59e9e52806f688020631e987592bd83619edccda9c47d42cde4f6c" +dependencies = [ + "toml", +] + [[package]] name = "zbus" version = "2.2.0" diff --git a/Cargo.toml b/Cargo.toml index cbe3777..5e9018b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sysinfo-gui" -version = "0.1.10" +version = "0.1.11" edition = "2021" repository = "https://github.com/MoAlyousef/sysinfo-gui" keywords = ["cross-platform", "monitoring", "gui"] @@ -9,6 +9,11 @@ categories = ["visualization"] description = "A cross-platform system-monitoring gui application based on sysinfo and fltk" documentation = "https://docs.rs/sysinfo-gui" readme = "README.md" +build = "build.rs" + +[package.metadata.bundle] +identifier = "io.github.moalyousef" +icon = ["assets/icon.png"] [dependencies] sysinfo = { version = "0.23.10", default-features = false } @@ -17,6 +22,9 @@ fltk-grid = "0.1" parking_lot = "0.12" dark-light = { version = "0.2.2", optional = true } +[target.'cfg(target_os = "windows")'.build-dependencies] +winres = "0.1" + [profile.release] opt-level = 3 strip = true diff --git a/README.md b/README.md index ee870ad..24b6396 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # Sysinfo-gui +![alt_test](https://github.com/MoAlyousef/sysinfo-gui/raw/main/assets/icon.png) + A lightweight cross-platform system-monitoring [fltk](https://github.com/fltk-rs/fltk-rs) gui application based on [sysinfo](https://github.com/GuillaumeGomez/sysinfo). The UI design is inspired by [stacer](https://github.com/oguzhaninan/Stacer). diff --git a/Roboto-Medium.ttf b/assets/Roboto-Medium.ttf similarity index 100% rename from Roboto-Medium.ttf rename to assets/Roboto-Medium.ttf diff --git a/assets/icon.ico b/assets/icon.ico new file mode 100755 index 0000000..e08258d Binary files /dev/null and b/assets/icon.ico differ diff --git a/assets/icon.png b/assets/icon.png new file mode 100755 index 0000000..44cac5c Binary files /dev/null and b/assets/icon.png differ diff --git a/assets/sysinfo-gui.desktop b/assets/sysinfo-gui.desktop new file mode 100644 index 0000000..b3500f2 --- /dev/null +++ b/assets/sysinfo-gui.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Type=Application +Name=sysinfo-gui +Comment=A cross-platform system-monitoring gui application based on sysinfo and fltk +Exec=sysinfo-gui +Icon=icon +Terminal=false +Categories=System; \ No newline at end of file diff --git a/build.rs b/build.rs new file mode 100644 index 0000000..ab313e4 --- /dev/null +++ b/build.rs @@ -0,0 +1,10 @@ +#[cfg(target_os = "windows")] +fn main() { + let mut res = winres::WindowsResource::new(); + res.set_icon("assets/icon.ico"); + res.compile().unwrap(); +} + +#[cfg(not(target_os = "windows"))] +fn main() { +} \ No newline at end of file diff --git a/src/gui/app.rs b/src/gui/app.rs index 8728e64..3f569f3 100644 --- a/src/gui/app.rs +++ b/src/gui/app.rs @@ -4,6 +4,8 @@ use super::widgets::*; use super::{message::Message, View}; use fltk::{enums::*, prelude::*, *}; +const ICON: &[u8] = include_bytes!("../../assets/icon.png"); + pub struct App { a: app::App, r: app::Receiver, @@ -37,7 +39,7 @@ impl App { app::set_font_size(18); let temp = std::env::temp_dir().join("Roboto-Medium.ttf"); if !temp.exists() { - let bytes = include_bytes!("../../Roboto-Medium.ttf"); + let bytes = include_bytes!("../../assets/Roboto-Medium.ttf"); std::fs::write(&temp, bytes).ok(); } if let Ok(f) = Font::load_font(temp) { @@ -48,6 +50,7 @@ impl App { .with_size(800, 600) .with_label("sysinfo-gui"); win.set_xclass("sysinfo"); + win.set_icon(Some(image::PngImage::from_data(ICON).unwrap())); let mut grp = group::Group::default().with_size(60, 600); grp.set_frame(FrameType::FlatBox); grp.set_color(BLUE);