diff --git a/hammond-gtk/Cargo.toml b/hammond-gtk/Cargo.toml index 2c7800d..3669145 100644 --- a/hammond-gtk/Cargo.toml +++ b/hammond-gtk/Cargo.toml @@ -3,6 +3,7 @@ name = "hammond-gtk" version = "0.1.0" authors = ["Jordan Petridis "] workspace = "../" +build = "build.rs" [dependencies] gtk = { version = "0.2", features = ["v3_22"]} @@ -10,10 +11,10 @@ gdk = "0.6" glib = "0.3" gio = "0.2" gdk-pixbuf = "0.2" -libc = "0.2" +libc = "0.2" gio-sys = "0.4" -glib-sys = "^0.4" +glib-sys = "0.4" loggerv = "0.4" log = "0.3" diff --git a/hammond-gtk/build.rs b/hammond-gtk/build.rs index 002fd7f..aab183d 100644 --- a/hammond-gtk/build.rs +++ b/hammond-gtk/build.rs @@ -3,7 +3,7 @@ use std::process::Command; fn main() { Command::new("glib-compile-resources") .args(&["--generate", "resources.xml"]) - .current_dir("src/resources") + .current_dir("resources") .status() .unwrap(); } diff --git a/hammond-gtk/src/resources/banner.png b/hammond-gtk/resources/banner.png similarity index 100% rename from hammond-gtk/src/resources/banner.png rename to hammond-gtk/resources/banner.png diff --git a/hammond-gtk/src/resources/resources.xml b/hammond-gtk/resources/resources.xml similarity index 73% rename from hammond-gtk/src/resources/resources.xml rename to hammond-gtk/resources/resources.xml index 97ddcfc..ef9139f 100644 --- a/hammond-gtk/src/resources/resources.xml +++ b/hammond-gtk/resources/resources.xml @@ -1,6 +1,6 @@ - + banner.png diff --git a/hammond-gtk/src/static_resource.rs b/hammond-gtk/src/static_resource.rs index 3891f64..e7d2a76 100644 --- a/hammond-gtk/src/static_resource.rs +++ b/hammond-gtk/src/static_resource.rs @@ -2,12 +2,22 @@ extern crate gio_sys; extern crate glib_sys; extern crate libc; +use gio::{resources_register, Error, Resource}; +use glib::Bytes; + use std; -// https://github.com/sunnyone/gresource-gtkrs-example/blob/master/src/static_resource.rs -// TODO: slomo mentioned that the unsafe could be removed and use a safe API instead. -pub fn init() { - let res_bytes = include_bytes!("resources/resources.gresource"); +pub fn init() -> Result<(), Error> { + // load the gresource binary at build time and include/link it into the final binary. + let res_bytes = include_bytes!("../resources/resources.gresource"); + + // // Create Resource it will live as long the value lives. + // let resource = Resource::new_from_data(&Bytes::from(&res_bytes))?; + // let resource = Resource::new_from_data(&res_bytes.into())?; + + // // Register the resource so It wont be dropped and will continue to live in memory. + // resources_register(&resource); + unsafe { // gbytes and resource will not be freed let gbytes = @@ -15,4 +25,6 @@ pub fn init() { let resource = gio_sys::g_resource_new_from_data(gbytes, std::ptr::null_mut()); gio_sys::g_resources_register(resource); } + + Ok(()) } diff --git a/hammond-gtk/src/views/podcasts_view.rs b/hammond-gtk/src/views/podcasts_view.rs index 2959421..cae5817 100644 --- a/hammond-gtk/src/views/podcasts_view.rs +++ b/hammond-gtk/src/views/podcasts_view.rs @@ -9,6 +9,7 @@ use hammond_data::index_feed::Database; use widgets::podcast::*; use static_resource; + fn show_empty_view(stack: >k::Stack) { let builder = gtk::Builder::new_from_string(include_str!("../../gtk/empty_view.ui")); let view: gtk::Box = builder.get_object("empty_view").unwrap(); @@ -19,6 +20,8 @@ fn show_empty_view(stack: >k::Stack) { } fn populate_flowbox(db: &Database, stack: >k::Stack, flowbox: >k::FlowBox) { + static_resource::init().expect("Something went wrong with the resource file initialization."); + let podcasts = { let db = db.lock().unwrap(); dbqueries::get_podcasts(&db) @@ -63,9 +66,12 @@ fn create_flowbox_child(db: &Database, pd: &Podcast) -> gtk::FlowBoxChild { fn configure_banner(db: &Database, pd: &Podcast, banner: >k::Image, banner_title: >k::Label) { // TODO: move .ui files into gresources and refactor. - static_resource::init(); + // static_resource::init().expect("Something went wrong with the resource file + // initialization."); + info!("I RUN"); let bann = Pixbuf::new_from_resource_at_scale("/org/gtk/hammond/banner.png", 256, 256, true); + info!("{:?}", bann); if let Ok(b) = bann { banner.set_from_pixbuf(&b);