GResource
Following the GResource section, we'll make use of GResource to quickly bundle our assets in the app:
data/dev.geopjr.tinystats.gresource.xml
xml
<?xml version="1.0" encoding="UTF-8"?>
<gresources>
<gresource prefix="/dev/geopjr/tinystats">
<file compressed="true">css/style.css</file>
<file compressed="true" preprocess="xml-stripblanks">icons/dev.geopjr.tinystats.svg</file>
<file compressed="true" preprocess="xml-stripblanks">ui/app.ui</file>
</gresource>
</gresources>
Code
src/modules/prerequisites.cr
We no longer need the UI
and CSS
global variables, so we can go ahead and comment them out (or remove them) while loading the gresource:
crystal
# UI = {{read_file("./data/ui/app.ui")}}
# CSS_STRING = {{read_file("./data/css/style.css")}}
Gio.register_resource("data/dev.geopjr.tinystats.gresource.xml", "data")
src/tiny-stats.cr
We can now load the ui file from the resource:
crystal
B_UI = Gtk::Builder.new_from_resource("/dev/geopjr/tinystats/ui/app.ui")
src/modules/views/main.cr
We can load our CSS from the GResource too:
crystal
def startup(app : Gtk::Application)
CSS.load_from_resource("/dev/geopjr/tinystats/css/style.css")
end