gsetup: Load a Gio Resource with our application icons
We can put all our icons into a single resource bundle that gets loaded and only exists for our app. Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
5cd5d2640d
commit
4be26c5fee
|
@ -5,3 +5,4 @@
|
|||
*.txt
|
||||
*.patch
|
||||
PKGBUILD
|
||||
emmental.gresource*
|
||||
|
|
15
Makefile
15
Makefile
|
@ -6,9 +6,10 @@ export EMMENTAL_LIB = ${PREFIX}/lib/emmental
|
|||
export EMMENTAL_BIN = ${PREFIX}/bin
|
||||
export EMMENTAL_SHARE = ${PREFIX}/share
|
||||
|
||||
all: flake8
|
||||
all: emmental.gresource flake8
|
||||
|
||||
clean:
|
||||
find . -type f -name "*gresource*" -exec rm {} \+
|
||||
find . -type d -name __pycache__ -exec rm -r {} \+
|
||||
find data/ -type d -name "Test Album" -exec rm -r {} \+
|
||||
find data/ -type d -name "Test Library" -exec rm -r {} \+
|
||||
|
@ -17,8 +18,16 @@ clean:
|
|||
flake8:
|
||||
flake8 emmental/ tests/
|
||||
|
||||
.PHONY: emmental.gresource.xml
|
||||
emmental.gresource.xml:
|
||||
exec tools/find-resources.py
|
||||
|
||||
.PHONY: emmental.gresource
|
||||
emmental.gresource: emmental.gresource.xml
|
||||
glib-compile-resources emmental.gresource.xml
|
||||
|
||||
.PHONY: install
|
||||
install:
|
||||
install: emmental.gresource
|
||||
exec tools/install.sh
|
||||
|
||||
.PHONY: uninstall
|
||||
|
@ -40,7 +49,7 @@ pkgbuild:
|
|||
cd aur && makepkg --printsrcinfo > .SRCINFO
|
||||
|
||||
.PHONY: pytest
|
||||
pytest:
|
||||
pytest: emmental.gresource
|
||||
pytest
|
||||
|
||||
.PHONY: tests
|
||||
|
|
|
@ -15,7 +15,8 @@ class Application(Adw.Application):
|
|||
|
||||
def __init__(self):
|
||||
"""Initialize an Application."""
|
||||
super().__init__(application_id=gsetup.APPLICATION_ID)
|
||||
super().__init__(application_id=gsetup.APPLICATION_ID,
|
||||
resource_base_path=gsetup.RESOURCE_PATH)
|
||||
self.add_main_option_entries([options.Version])
|
||||
|
||||
def do_handle_local_options(self, opts: GLib.VariantDict) -> int:
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# Copyright 2022 (c) Anna Schumaker.
|
||||
"""Set up GObject Introspection and custom styling."""
|
||||
"""Set up GObject Introspection, and custom styling, and icons."""
|
||||
import pathlib
|
||||
import sys
|
||||
import gi
|
||||
|
@ -8,6 +8,7 @@ gi.require_version("Gdk", "4.0")
|
|||
gi.require_version("Gtk", "4.0")
|
||||
gi.require_version("Adw", "1")
|
||||
|
||||
gi.importlib.import_module("gi.repository.Gio")
|
||||
gi.importlib.import_module("gi.repository.Gtk")
|
||||
|
||||
DEBUG_STR = "-debug" if __debug__ else ""
|
||||
|
@ -18,6 +19,12 @@ CSS_PRIORITY = gi.repository.Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION
|
|||
CSS_PROVIDER = gi.repository.Gtk.CssProvider()
|
||||
CSS_PROVIDER.load_from_path(str(CSS_FILE))
|
||||
|
||||
RESOURCE_PATH = "/com/nowheycreamery/emmental"
|
||||
RESOURCE_ICONS = f"{RESOURCE_PATH}/icons/scalable/apps"
|
||||
RESOURCE_FILE = pathlib.Path(__file__).parent.parent / "emmental.gresource"
|
||||
RESOURCE = gi.repository.Gio.Resource.load(str(RESOURCE_FILE))
|
||||
gi.repository.Gio.resources_register(RESOURCE)
|
||||
|
||||
|
||||
def add_style():
|
||||
"""Add our stylesheet to the default display."""
|
||||
|
|
|
@ -0,0 +1,118 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="512"
|
||||
height="512"
|
||||
viewBox="0 0 135.46666 135.46667"
|
||||
version="1.1"
|
||||
id="svg75"
|
||||
inkscape:version="0.92.4 5da689c313, 2019-01-14"
|
||||
sodipodi:docname="emmental.svg">
|
||||
<defs
|
||||
id="defs69">
|
||||
<symbol
|
||||
id="icon-music-note">
|
||||
<title
|
||||
id="title78520">music-note</title>
|
||||
<path
|
||||
d="M26.625 2.006c-0.137 0-0.319 0.038-0.319 0.038l-13.6 2.075c-0.863 0.231-1.644 1.069-1.706 1.975v17.906h-3.813v-0.006c-1.75 0-3.194 1.25-3.194 3s1.444 3 3.206 3h2.263c0.956 0 1.806-0.431 2.394-1.094 0.006-0.006 0.019-0.006 0.025-0.012 0.037-0.038 0.063-0.094 0.094-0.131 0.081-0.1 0.15-0.2 0.213-0.313 0.6-0.881 0.813-2.050 0.813-2.569v-14.5l13-2.375c0 0 0 8.5 0 12h-3.781c-1.769 0-3.2 1.244-3.2 3s1.431 3 3.2 3h2.325c1.137 0 2.131-0.375 2.7-1.313 0 0 0.006 0 0.012 0 0.563-0.75 0.75-1.887 0.75-3.431 0-1.55 0-18.925 0-18.925-0.006-0.731-0.625-1.325-1.381-1.325z"
|
||||
id="path78522" />
|
||||
</symbol>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.7"
|
||||
inkscape:cx="-114.53623"
|
||||
inkscape:cy="26.266036"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="992"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="49"
|
||||
inkscape:window-maximized="1"
|
||||
units="px" />
|
||||
<metadata
|
||||
id="metadata72">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-161.53332)">
|
||||
<path
|
||||
id="path15"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="M 0.26458333,188.52082 135.20208,221.59374 m 0,0 v 15.875 c -12.17431,8.4e-4 -12.20048,27.68831 0,27.78125 v 31.75 L 79.374999,283.37394 c 2.35699,-19.88199 -19.689115,-25.71573 -23.8125,-5.82083 L 0.26458333,263.92707 V 188.52082 C 17.837267,162.07974 75.40625,161.53332 75.40625,161.53332 Z"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccccccc" />
|
||||
<path
|
||||
style="display:inline;fill:#f8da4a;fill-opacity:1;stroke-width:0.71428573"
|
||||
d="M 255.34656,163.53518 C 116.62289,129.63458 2.7276541,101.76636 2.2460509,101.60583 -0.02198624,100.84982 18.093321,80.754076 29.000001,71.927033 69.000157,39.553927 134.66532,16.65992 217.92857,6.0575146 c 19.46392,-2.478456 51.1476,-5.0575103 62.13152,-5.0575103 h 4.6559 L 396.85714,113.14286 c 61.67764,61.67857 111.82011,112.11742 111.42773,112.08632 -0.3924,-0.0311 -114.21463,-27.79339 -252.93831,-61.694 z"
|
||||
id="path819"
|
||||
inkscape:connector-curvature="0"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,0,161.53332)" />
|
||||
<path
|
||||
style="fill:#f3b722;fill-opacity:1;stroke-width:1.42857146"
|
||||
d="m 408.89234,485.99486 c -55,-13.51607 -101.71207,-25.0166 -103.8046,-25.55674 -3.73443,-0.96396 -3.8052,-1.20196 -3.83781,-12.90451 -0.0849,-30.43852 -18.1526,-54.01679 -43.12787,-56.28146 -20.53696,-1.86223 -38.83107,12.75464 -46.46432,37.12467 -1.41508,4.51786 -3.03845,8.21429 -3.60748,8.21429 -0.56903,0 -39.82663,-9.57995 -87.23912,-21.28875 C 73.398659,403.59355 27.374486,392.28746 18.5352,390.17774 L 2.4637718,386.34188 V 244.88305 103.42423 l 3.9285714,1.00678 c 2.1607143,0.55373 113.8571468,27.96349 248.2142868,60.91058 134.35714,32.94709 246.69643,60.5528 249.64286,61.34601 l 5.35714,1.4422 v 29.04808 29.04806 l -6.06056,0.96912 c -9.02576,1.44328 -19.56647,12.79662 -24.09478,25.95235 -4.51516,13.11753 -4.85962,38.48575 -0.6869,50.58655 5.73031,16.61778 17.11014,28.57143 27.19987,28.57143 h 3.64237 v 59.28572 c 0,32.60714 -0.16072,59.21657 -0.35714,59.13207 -0.19643,-0.0846 -45.35715,-11.21226 -100.35715,-24.72832 z"
|
||||
id="path822"
|
||||
inkscape:connector-curvature="0"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,0,161.53332)" />
|
||||
<ellipse
|
||||
style="fill:#db9822;fill-opacity:1;stroke-width:0.26458332"
|
||||
id="path828"
|
||||
cx="52.72768"
|
||||
cy="179.44939"
|
||||
rx="14.552083"
|
||||
ry="6.4255953" />
|
||||
<ellipse
|
||||
style="fill:#e7af19;fill-opacity:1;stroke-width:0.26458332"
|
||||
id="path830"
|
||||
cx="92.604164"
|
||||
cy="200.99403"
|
||||
rx="8.6934528"
|
||||
ry="3.7797618" />
|
||||
<ellipse
|
||||
style="fill:#db9518;fill-opacity:1;stroke-width:0.26458332"
|
||||
id="path836"
|
||||
cx="109.04613"
|
||||
cy="266.19492"
|
||||
rx="7.3705359"
|
||||
ry="6.614583" />
|
||||
<ellipse
|
||||
style="fill:#db9518;fill-opacity:1;stroke-width:0.26458332"
|
||||
id="path838"
|
||||
cx="21.544643"
|
||||
cy="218.94791"
|
||||
rx="13.229166"
|
||||
ry="11.90625" />
|
||||
<path
|
||||
style="fill:#b36d00;fill-opacity:1;stroke:none;stroke-width:1.84337676"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 86.73677,215.05635 c -0.282072,0 -0.656796,0.0627 -0.656796,0.0627 l -28.00136,3.42457 c -1.776851,0.38124 -3.38487,1.76427 -3.512523,3.25953 v 29.55198 h -7.850676 v -0.01 c -3.603116,0 -6.576201,2.06299 -6.576201,4.95118 0,2.8882 2.973085,4.95119 6.600908,4.95119 h 4.659344 c 1.968331,0 3.718416,-0.71132 4.929063,-1.80553 0.01235,-0.01 0.03912,-0.01 0.05147,-0.0198 0.07618,-0.0627 0.129712,-0.15513 0.193539,-0.2162 0.166773,-0.16504 0.308838,-0.33008 0.438551,-0.51657 1.235354,-1.454 1.673904,-3.38331 1.673904,-4.23987 V 230.5188 l 26.766006,-3.91969 c 0,0 0,14.02836 0,19.80474 h -7.78479 c -3.642236,0 -6.588555,2.0531 -6.588555,4.95119 0,2.89809 2.946319,4.95119 6.588555,4.95119 h 4.786997 c 2.340996,0 4.387566,-0.6189 5.559094,-2.16697 0,0 0.01235,0 0.02471,0 1.159174,-1.2378 1.544192,-3.1143 1.544192,-5.66251 0,-2.55811 0,-31.23373 0,-31.23373 -0.01235,-1.20644 -1.286827,-2.18678 -2.843373,-2.18678 z"
|
||||
id="path860" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 6.4 KiB |
|
@ -23,3 +23,5 @@ class TestEmmental(unittest.TestCase):
|
|||
self.assertIsInstance(self.application, gi.repository.Adw.Application)
|
||||
self.assertEqual(self.application.get_application_id(),
|
||||
"com.nowheycreamery.emmental-debug")
|
||||
self.assertEqual(self.application.get_property("resource-base-path"),
|
||||
"/com/nowheycreamery/emmental")
|
||||
|
|
|
@ -38,3 +38,18 @@ class TestGSetup(unittest.TestCase):
|
|||
gi.repository.Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
|
||||
self.assertIsInstance(emmental.gsetup.CSS_PROVIDER,
|
||||
gi.repository.Gtk.CssProvider)
|
||||
|
||||
def test_resource(self):
|
||||
"""Check that emmental.resource has been loaded."""
|
||||
path = pathlib.Path(emmental.__file__).parent.parent
|
||||
path = path / "emmental.gresource"
|
||||
|
||||
self.assertEqual(emmental.gsetup.RESOURCE_PATH,
|
||||
"/com/nowheycreamery/emmental")
|
||||
icons = f"{emmental.gsetup.RESOURCE_PATH}/icons/scalable/apps"
|
||||
self.assertEqual(emmental.gsetup.RESOURCE_ICONS, icons)
|
||||
self.assertEqual(emmental.gsetup.RESOURCE_FILE, path)
|
||||
self.assertTrue(emmental.gsetup.RESOURCE_FILE.is_file())
|
||||
|
||||
self.assertIsInstance(emmental.gsetup.RESOURCE,
|
||||
gi.repository.Gio.Resource)
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
#!/usr/bin/python
|
||||
# Copyright 2022 (c) Anna Schumaker.
|
||||
"""Generate the emmental.gresource.xml file."""
|
||||
from xml.dom import minidom
|
||||
import pathlib
|
||||
|
||||
project_dir = pathlib.Path(__file__).parent.parent
|
||||
resource_file = project_dir / "emmental.gresource.xml"
|
||||
|
||||
xml = minidom.Document()
|
||||
|
||||
gresources = xml.createElement("gresources")
|
||||
xml.appendChild(gresources)
|
||||
|
||||
gresource = xml.createElement("gresource")
|
||||
gresource.setAttribute("prefix", "/com/nowheycreamery/emmental")
|
||||
gresources.appendChild(gresource)
|
||||
|
||||
for f in (project_dir / "icons").glob("**/*"):
|
||||
if f.is_file():
|
||||
file = xml.createElement("file")
|
||||
text = xml.createTextNode(str(f.relative_to(project_dir)))
|
||||
file.appendChild(text)
|
||||
gresource.appendChild(file)
|
||||
|
||||
with open(project_dir / "emmental.gresource.xml", "w") as f:
|
||||
f.write(xml.toprettyxml())
|
Loading…
Reference in New Issue