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 = {