diff --git a/babylonia-terminal-gui/Cargo.lock b/babylonia-terminal-gui/Cargo.lock index f259fb2..c2994f3 100644 --- a/babylonia-terminal-gui/Cargo.lock +++ b/babylonia-terminal-gui/Cargo.lock @@ -69,6 +69,7 @@ version = "0.1.0" dependencies = [ "anyhow", "babylonia-terminal-sdk", + "glib-build-tools", "log", "relm4", "relm4-components", @@ -724,6 +725,15 @@ dependencies = [ "smallvec", ] +[[package]] +name = "glib-build-tools" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7029c2651d9b5d5a3eea93ec8a1995665c6d3a69ce9bf6042ad9064d134736d8" +dependencies = [ + "gio", +] + [[package]] name = "glib-macros" version = "0.20.5" @@ -1268,6 +1278,37 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "libadwaita" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8611ee9fb85e7606c362b513afcaf5b59853f79e4d98caaaf581d99465014247" +dependencies = [ + "gdk4", + "gio", + "glib", + "gtk4", + "libadwaita-sys", + "libc", + "pango", +] + +[[package]] +name = "libadwaita-sys" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b099a223560118d4d4fa04b6d23f3ea5b7171fe1d83dfb7e6b45b54cdfc83af9" +dependencies = [ + "gdk4-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "gtk4-sys", + "libc", + "pango-sys", + "system-deps", +] + [[package]] name = "libc" version = "0.2.168" @@ -1613,6 +1654,7 @@ dependencies = [ "fragile", "futures", "gtk4", + "libadwaita", "once_cell", "relm4-css", "relm4-macros", diff --git a/babylonia-terminal-gui/Cargo.toml b/babylonia-terminal-gui/Cargo.toml index 92d167f..437bf38 100644 --- a/babylonia-terminal-gui/Cargo.toml +++ b/babylonia-terminal-gui/Cargo.toml @@ -7,6 +7,9 @@ edition = "2021" babylonia-terminal-sdk = { path = "./../babylonia-terminal-sdk" } anyhow = "1.0.94" log = "0.4.22" -relm4 = "0.9.1" relm4-components = "0.9.1" wincompatlib = "0.7.5" +relm4 = { version = "0.9.1", features = ["libadwaita"] } + +[build-dependencies] +glib-build-tools = "0.20.0" diff --git a/babylonia-terminal-gui/assets/icon.png b/babylonia-terminal-gui/assets/icon.png new file mode 100644 index 0000000..7a2bf9c Binary files /dev/null and b/babylonia-terminal-gui/assets/icon.png differ diff --git a/babylonia-terminal-gui/assets/resources.xml b/babylonia-terminal-gui/assets/resources.xml new file mode 100644 index 0000000..955cb1d --- /dev/null +++ b/babylonia-terminal-gui/assets/resources.xml @@ -0,0 +1,7 @@ + + + + + icon.png + + diff --git a/babylonia-terminal-gui/build.rs b/babylonia-terminal-gui/build.rs new file mode 100644 index 0000000..02048bf --- /dev/null +++ b/babylonia-terminal-gui/build.rs @@ -0,0 +1,5 @@ +use glib_build_tools::compile_resources; + +fn main() { + compile_resources(&["assets"], "assets/resources.xml", "resources.gresource"); +} diff --git a/babylonia-terminal-gui/src/lib.rs b/babylonia-terminal-gui/src/lib.rs index e076d8b..d39949d 100644 --- a/babylonia-terminal-gui/src/lib.rs +++ b/babylonia-terminal-gui/src/lib.rs @@ -1,11 +1,22 @@ use log::debug; -use relm4::RelmApp; +use relm4::{ + gtk::{self, gdk, gio}, + RelmApp, +}; mod manager; mod ui; +pub const APP_RESOURCE_PATH: &str = "/moe/celica/babylonia-terminal"; + pub fn run() { debug!("Start GUI!"); let app = RelmApp::new("moe.celica.BabyloniaTerminal").with_args(vec![]); + + gio::resources_register_include!("resources.gresource").unwrap(); + + let display = gdk::Display::default().unwrap(); + let theme = gtk::IconTheme::for_display(&display); + theme.add_resource_path(&format!("{APP_RESOURCE_PATH}/icons")); ui::run(app); } diff --git a/babylonia-terminal-gui/src/ui/mod.rs b/babylonia-terminal-gui/src/ui/mod.rs index 843acb5..1e35dc0 100644 --- a/babylonia-terminal-gui/src/ui/mod.rs +++ b/babylonia-terminal-gui/src/ui/mod.rs @@ -4,6 +4,7 @@ use crate::manager; use babylonia_terminal_sdk::game_state::GameState; use relm4::{ + adw::{self, ApplicationWindow}, gtk::{ self, prelude::{BoxExt, ButtonExt, GtkWindowExt, OrientableExt, WidgetExt}, @@ -13,6 +14,8 @@ use relm4::{ view, Component, RelmApp, RelmWidgetExt, WorkerController, }; +use crate::APP_RESOURCE_PATH; + pub fn run(app: RelmApp) { app.run_async::(None); } @@ -50,11 +53,16 @@ impl SimpleAsyncComponent for MainWindow { view! { #[root] - gtk::Window { + adw::ApplicationWindow { gtk::Box { set_orientation: gtk::Orientation::Vertical, - set_spacing: 5, - set_margin_all: 5, + + adw::HeaderBar, + + gtk::Image { + set_resource: Some(&format!("{APP_RESOURCE_PATH}/icons/hicolor/scalable/apps/icon.png")), + set_height_request: 256, + }, #[name(start_button)] gtk::Button { diff --git a/babylonia-terminal/Cargo.lock b/babylonia-terminal/Cargo.lock index f3fa33a..d76acbf 100644 --- a/babylonia-terminal/Cargo.lock +++ b/babylonia-terminal/Cargo.lock @@ -147,6 +147,7 @@ version = "0.1.0" dependencies = [ "anyhow", "babylonia-terminal-sdk", + "glib-build-tools", "log", "relm4", "relm4-components", @@ -905,6 +906,15 @@ dependencies = [ "smallvec", ] +[[package]] +name = "glib-build-tools" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7029c2651d9b5d5a3eea93ec8a1995665c6d3a69ce9bf6042ad9064d134736d8" +dependencies = [ + "gio", +] + [[package]] name = "glib-macros" version = "0.20.5" @@ -1474,6 +1484,37 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +[[package]] +name = "libadwaita" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8611ee9fb85e7606c362b513afcaf5b59853f79e4d98caaaf581d99465014247" +dependencies = [ + "gdk4", + "gio", + "glib", + "gtk4", + "libadwaita-sys", + "libc", + "pango", +] + +[[package]] +name = "libadwaita-sys" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b099a223560118d4d4fa04b6d23f3ea5b7171fe1d83dfb7e6b45b54cdfc83af9" +dependencies = [ + "gdk4-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "gtk4-sys", + "libc", + "pango-sys", + "system-deps", +] + [[package]] name = "libc" version = "0.2.168" @@ -1875,6 +1916,7 @@ dependencies = [ "fragile", "futures", "gtk4", + "libadwaita", "once_cell", "relm4-css", "relm4-macros", diff --git a/flake.nix b/flake.nix index ad20090..86df783 100644 --- a/flake.nix +++ b/flake.nix @@ -46,6 +46,7 @@ cargo-watch rust-analyzer gtk4 + libadwaita ]; env = {