From dd943aa829493a9b27dedd826d5865c1e2a8e343 Mon Sep 17 00:00:00 2001 From: Julian T Date: Sun, 24 Jan 2021 21:11:26 +0100 Subject: Add start of gui --- src/bin/mod.rs | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 src/bin/mod.rs (limited to 'src/bin') diff --git a/src/bin/mod.rs b/src/bin/mod.rs new file mode 100644 index 0000000..08d65de --- /dev/null +++ b/src/bin/mod.rs @@ -0,0 +1,78 @@ +extern crate gtk; +extern crate gdk_pixbuf; +extern crate glib; + +use gtk::*; +use gdk_pixbuf::{Pixbuf, Colorspace}; +use glib::Bytes; +use std::process; + +struct App { + window: Window, + header: Header, + content: Content, +} + +struct Header { + container: HeaderBar, +} + +struct Content { + area: Image, +} + +impl App { + fn new() -> App { + let window = Window::new(WindowType::Toplevel); + let header = Header::new(); + let content = Content::new(); + + window.set_titlebar(Some(&header.container)); + window.set_title("Pathtrace"); + Window::set_default_icon_name("iconname"); + + window.add(&content.area); + + window.connect_delete_event(move |_, _| { + main_quit(); + Inhibit(false) + }); + + App { window, header, content } + } +} + +impl Header { + fn new() -> Header { + let container = HeaderBar::new(); + + container.set_title(Some("Pathtrace")); + container.set_show_close_button(true); + + Header { container } + } +} + +impl Content { + fn new() -> Content { + // Create a test image + let imagebuff = vec![0; 300]; + let buff = Pixbuf::from_bytes(&Bytes::from(&imagebuff), Colorspace::Rgb, false, 24, 10, 10, 30); + let area = Image::from_pixbuf(Some(&buff)); + + Content { area } + } +} + +fn main() { + if gtk::init().is_err() { + eprintln!("failed to init GTK"); + process::exit(1); + } + + let app = App::new(); + + app.window.show_all(); + + gtk::main(); +} -- cgit v1.2.3