aboutsummaryrefslogtreecommitdiff
path: root/src/gui/welcome.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/welcome.rs')
-rw-r--r--src/gui/welcome.rs51
1 files changed, 44 insertions, 7 deletions
diff --git a/src/gui/welcome.rs b/src/gui/welcome.rs
index 3dac0dd..7c7d02f 100644
--- a/src/gui/welcome.rs
+++ b/src/gui/welcome.rs
@@ -1,3 +1,4 @@
+use gtk::glib;
use gtk::prelude::*;
use super::state::{View, ViewManager};
use std::rc::Rc;
@@ -15,25 +16,61 @@ impl View for Welcome {
self.vm = vm
}
- fn make_current(&self) -> gtk::Box {
+ fn make_current(&self) -> Option<gtk::Box> {
+ let splash = gtk::Window::new(gtk::WindowType::Popup);
+ splash.set_type_hint(gtk::gdk::WindowTypeHint::Splashscreen);
+ splash.set_decorated(false);
+ splash.set_position(gtk::WindowPosition::Center);
+ splash.set_resizable(false);
+ splash.set_size_request(300, 200);
let center = gtk::Box::new(gtk::Orientation::Vertical, 10);
let main = gtk::Box::new(gtk::Orientation::Horizontal, 10);
let gen_button = gtk::Button::with_label("Generate");
- let merge_button = gtk::Button::with_label("Merge");
let load_button = gtk::Button::with_label("Load");
- main.pack_start(&gen_button, true, false, 10);
- main.pack_start(&merge_button, true, false, 10);
- main.pack_start(&load_button, true, false, 10);
+ main.pack_start(&gen_button, true, true, 0);
+ main.pack_start(&load_button, true, true, 0);
+ main.set_height_request(50);
+ main.set_homogeneous(true);
+
+ let bt = include_bytes!("icon.svg");
+ let loader = gtk::gdk_pixbuf::PixbufLoader::new();
+ loader.write(bt).ok();
+ loader.set_size(100, 100);
+ loader.close().ok();
+ let pixbuf = loader.pixbuf().unwrap();
+ let image = gtk::Image::from_pixbuf(Some(&pixbuf));
+
+ center.pack_start(&image, true, true, 0);
center.pack_start(&main, true, false, 0);
+ self.vm.get_window().set_type_hint(gtk::gdk::WindowTypeHint::Splashscreen);
+
let vm = Rc::clone(&self.vm);
- gen_button.connect_clicked(move |_| {
+ gen_button.connect_clicked(glib::clone!(@weak splash => move |_| {
vm.set_current_view("generate");
+ splash.close();
+ }));
+
+ let vm = Rc::clone(&self.vm);
+ load_button.connect_clicked(glib::clone!(@weak splash => move |_| {
+ vm.set_current_view("load");
+ splash.close();
+ }));
+
+ let vm = Rc::clone(&self.vm);
+ splash.connect_hide(move |_| {
+ if vm.get_current_view() == "welcome" {
+ vm.get_window().application().unwrap().quit();
+ }
});
- center
+ center.set_margin(10);
+ splash.add(&center);
+ splash.show_all();
+
+ None
}
}