Indicators

This commit is contained in:
2025-11-28 17:52:13 +01:00
parent 3e789661ef
commit b46666a703
19 changed files with 463 additions and 140 deletions

View File

@ -1,6 +1,5 @@
SVGS = $(wildcard ./*.svg)
TARGET_BMPS = $(SVGS:.svg=.bmp)
SIZE = 45
BACKCOLOR = 080808
.PHONY: all
@ -15,5 +14,5 @@ clean:
@convert $< -background "#$(BACKCOLOR)" -alpha remove -define bmp:subtype=RGB565 $@
%.png: %.svg
inkscape -h $(SIZE) -w $(SIZE) $< -o $@
inkscape $< -o $@

BIN
assets/a.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

52
assets/a.svg Normal file
View File

@ -0,0 +1,52 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="45"
height="45"
viewBox="0 0 28.421052 28.421053"
stroke-width="1.6"
fill="none"
color="#bababa"
data-darkreader-inline-color=""
version="1.1"
id="svg1"
sodipodi:docname="humidity-icon.svg"
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs1" />
<sodipodi:namedview
id="namedview1"
pagecolor="#000000"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="9.5273334"
inkscape:cx="19.942621"
inkscape:cy="22.829053"
inkscape:window-width="1916"
inkscape:window-height="1032"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="svg1" />
<rect
style="fill:#242424;stroke-width:11.5955;paint-order:markers stroke fill;fill-opacity:1"
id="rect1"
width="28.421053"
height="28.421053"
x="-2.1636963e-07"
y="-2.1636963e-07" />
<path
d="m 23.127726,16.838624 c 0,-5.022692 -9.094383,-13.6415758 -9.094383,-13.6415758 0,0 -9.0943834,8.6188838 -9.0943834,13.6415758 0,5.022714 4.0716919,9.094383 9.0943834,9.094383 5.022714,0 9.094383,-4.071669 9.094383,-9.094383 z"
stroke="#bababa"
stroke-width="1.6"
data-darkreader-inline-stroke=""
style="stroke:#0137f1;stroke-width:4.04437;stroke-dasharray:none;stroke-opacity:1"
id="path1" />
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@ -2,9 +2,9 @@
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="100mm"
height="100mm"
viewBox="0 0 100 100"
width="45"
height="45"
viewBox="0 0 11.90625 11.90625"
version="1.1"
id="svg1"
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
@ -23,9 +23,9 @@
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
inkscape:zoom="0.64"
inkscape:cx="-160.15625"
inkscape:cy="294.53125"
inkscape:zoom="7.6922777"
inkscape:cx="29.510115"
inkscape:cy="28.27511"
inkscape:window-width="1916"
inkscape:window-height="1032"
inkscape:window-x="0"
@ -37,45 +37,53 @@
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
id="layer1"
transform="translate(0.08272917,0.15224179)">
<rect
style="fill:#242424;fill-opacity:1;stroke:none;stroke-width:1.6006;stroke-dasharray:6.40237, 3.20118, 1.6006, 3.20118;paint-order:markers stroke fill"
id="rect1"
width="11.90625"
height="11.90625"
x="-0.082729168"
y="-0.1522418" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:36.3189px;font-family:'ProFont IIx Nerd Font Propo';-inkscape-font-specification:'ProFont IIx Nerd Font Propo';text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:#00ade7;fill-opacity:1;stroke-width:2.26994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0.2"
x="76.022087"
y="74.254074"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.74984px;font-family:'ProFont IIx Nerd Font Propo';-inkscape-font-specification:'ProFont IIx Nerd Font Propo';text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:#00ade7;fill-opacity:1;stroke-width:0.296867;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0.2"
x="9.2658949"
y="8.814003"
id="text1-3"
transform="scale(0.98156475,1.0187815)"
inkscape:label="2"><tspan
sodipodi:role="line"
id="tspan1-6"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:36.3189px;font-family:'ProFont IIx Nerd Font Propo';-inkscape-font-specification:'ProFont IIx Nerd Font Propo';fill:#00ade7;fill-opacity:1;stroke-width:2.26994"
x="76.022087"
y="74.254074">2</tspan></text>
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.74984px;font-family:'ProFont IIx Nerd Font Propo';-inkscape-font-specification:'ProFont IIx Nerd Font Propo';fill:#00ade7;fill-opacity:1;stroke-width:0.296867"
x="9.2658949"
y="8.814003">2</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:56.1282px;font-family:'ProFont IIx Nerd Font Propo';-inkscape-font-specification:'ProFont IIx Nerd Font Propo';text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:#00ade7;fill-opacity:1;stroke-width:3.50802;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0.2"
x="5.6048326"
y="81.050644"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.34054px;font-family:'ProFont IIx Nerd Font Propo';-inkscape-font-specification:'ProFont IIx Nerd Font Propo';text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:#00ade7;fill-opacity:1;stroke-width:0.458785;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0.2"
x="0.056607485"
y="9.7028713"
id="text1-3-3"
transform="scale(0.98156475,1.0187815)"
inkscape:label="2"><tspan
sodipodi:role="line"
id="tspan1-6-5"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:56.1282px;font-family:'ProFont IIx Nerd Font Propo';-inkscape-font-specification:'ProFont IIx Nerd Font Propo';fill:#00ade7;fill-opacity:1;stroke-width:3.50802"
x="5.6048326"
y="81.050644">C</tspan></text>
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.34054px;font-family:'ProFont IIx Nerd Font Propo';-inkscape-font-specification:'ProFont IIx Nerd Font Propo';fill:#00ade7;fill-opacity:1;stroke-width:0.458785"
x="0.056607485"
y="9.7028713">C</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:56.1282px;font-family:'ProFont IIx Nerd Font Propo';-inkscape-font-specification:'ProFont IIx Nerd Font Propo';text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:#00ade7;fill-opacity:1;stroke-width:3.50802;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0.2"
x="40.805176"
y="63.398773"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.34054px;font-family:'ProFont IIx Nerd Font Propo';-inkscape-font-specification:'ProFont IIx Nerd Font Propo';text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:#00ade7;fill-opacity:1;stroke-width:0.458785;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0.2"
x="4.6601677"
y="7.3943286"
id="text1-3-3-7"
transform="scale(0.98156475,1.0187815)"
inkscape:label="2"><tspan
sodipodi:role="line"
id="tspan1-6-5-9"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:56.1282px;font-family:'ProFont IIx Nerd Font Propo';-inkscape-font-specification:'ProFont IIx Nerd Font Propo';fill:#00ade7;fill-opacity:1;stroke-width:3.50802"
x="40.805176"
y="63.398773">O</tspan></text>
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.34054px;font-family:'ProFont IIx Nerd Font Propo';-inkscape-font-specification:'ProFont IIx Nerd Font Propo';fill:#00ade7;fill-opacity:1;stroke-width:0.458785"
x="4.6601677"
y="7.3943286">O</tspan></text>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@ -1,22 +1,20 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="38px"
height="38px"
viewBox="0 0 24 24"
<svg:svg
width="45"
height="45"
viewBox="0 0 28.421053 28.421053"
stroke-width="1.6"
fill="none"
color="#bababa"
data-darkreader-inline-color=""
style="--darkreader-inline-color: var(--darkreader-text-bababa, #bcb7ae);"
version="1.1"
id="svg1"
sodipodi:docname="humidity-icon.svg"
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
<svg:defs
id="defs1" />
<sodipodi:namedview
id="namedview1"
@ -28,19 +26,35 @@
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="9.5273334"
inkscape:cx="19.785179"
inkscape:cy="22.829053"
inkscape:cx="19.83766"
inkscape:cy="22.724092"
inkscape:window-width="1916"
inkscape:window-height="1032"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="svg1" />
<path
d="M20 14C20 9.58172 12 2 12 2C12 2 4 9.58172 4 14C4 18.4183 7.58172 22 12 22C16.4183 22 20 18.4183 20 14Z"
<svg:rect
style="fill:#242424;stroke-width:6.22986;stroke-dasharray:none;paint-order:markers stroke fill"
id="rect1"
width="28.421053"
height="28.421053"
x="3.3630371e-08"
y="3.3630371e-08" />
<svg:path
d="m 23.392462,16.891615 c 0,-5.071045 -9.181935,-13.7729019 -9.181935,-13.7729019 0,0 -9.1819355,8.7018569 -9.1819355,13.7729019 0,5.071068 4.1108899,9.181935 9.1819355,9.181935 5.071068,0 9.181935,-4.110867 9.181935,-9.181935 z"
stroke="#bababa"
stroke-width="1.6"
data-darkreader-inline-stroke=""
style="--darkreader-inline-stroke:#bababa;stroke:#0137f1;stroke-opacity:1"
style="stroke:#0137f1;stroke-width:4.0833;stroke-dasharray:none;stroke-opacity:1"
id="path1" />
</svg>
<style
class="darkreader darkreader--fallback">html, body, body :not(iframe) {
background-color: var(--darkreader-background-ffffff, #181a1b) !important;
border-color: var(--darkreader-border-404040, #776e62) !important;
color: var(--darkreader-text-000000, #e8e6e3) !important;
}
div[style*=&quot;background-color: rgb(135, 135, 135)&quot;] {
background-color: #878787 !important;
}</style>
</svg:svg>

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
assets/indic-falling.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 538 B

97
assets/indic-falling.svg Normal file
View File

@ -0,0 +1,97 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="10"
height="20"
viewBox="0 0 10 20"
version="1.1"
id="svg1"
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
sodipodi:docname="indic-falling.svg"
inkscape:export-filename="indic-rising.svg"
inkscape:export-xdpi="102.28008"
inkscape:export-ydpi="102.28008"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1"
pagecolor="#000000"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
inkscape:export-bgcolor="#080808ff"
inkscape:zoom="32"
inkscape:cx="3.46875"
inkscape:cy="9.140625"
inkscape:window-width="1916"
inkscape:window-height="1032"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="layer1" />
<defs
id="defs1" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="matrix(0.10139507,0,0,0.10139507,4.4930246,0.14783758)">
<rect
style="fill:#080808;fill-opacity:1;stroke:none;stroke-width:95.2216;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0.2;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
id="rect4"
width="98.624123"
height="197.24825"
x="-44.312061"
y="-1.4580333" />
<rect
style="fill:#3e3e3e;fill-opacity:1;stroke:none;stroke-width:10.4178;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0.2;stroke-dasharray:none;stroke-opacity:1"
id="rect3"
width="92.56852"
height="34.62767"
x="-41.28426"
y="79.852249"
rx="10.363558"
ry="15.606441" />
<path
sodipodi:type="star"
style="fill:#3e3e3e;fill-opacity:1;stroke:#080808;stroke-width:6.94267343;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0.2;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
id="path1"
inkscape:flatsided="true"
sodipodi:sides="3"
sodipodi:cx="25.63151"
sodipodi:cy="24.391275"
sodipodi:r1="55.859524"
sodipodi:r2="27.929762"
sodipodi:arg1="0.52359878"
sodipodi:arg2="1.5707963"
inkscape:rounded="0.1"
inkscape:randomized="0"
d="m 74.007276,52.321038 c -4.837576,8.378928 -91.913956,8.378928 -96.751533,-1e-6 -4.837577,-8.378929 38.700614,-83.789285 48.375767,-83.789285 9.675153,0 53.213343,75.410357 48.375766,83.789286 z"
inkscape:transform-center-y="-12.4031"
transform="matrix(0.82051985,0,0,0.88816373,-16.031162,29.570393)" />
<path
sodipodi:type="star"
style="fill:#db0000;fill-opacity:1;stroke:#080808;stroke-width:6.94267343;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0.2;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
id="path1-1"
inkscape:flatsided="true"
sodipodi:sides="3"
sodipodi:cx="25.63151"
sodipodi:cy="24.391275"
sodipodi:r1="55.859524"
sodipodi:r2="27.929762"
sodipodi:arg1="0.52359878"
sodipodi:arg2="1.5707963"
inkscape:rounded="0.1"
inkscape:randomized="0"
d="m 74.007276,52.321038 c -4.837576,8.378928 -91.913956,8.378928 -96.751533,-1e-6 -4.837577,-8.378929 38.700614,-83.789285 48.375767,-83.789285 9.675153,0 53.213343,75.410357 48.375766,83.789286 z"
inkscape:transform-center-y="12.403106"
transform="matrix(-0.82051985,0,0,-0.88816373,26.031162,164.76177)" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 538 B

View File

@ -29,7 +29,7 @@
inkscape:export-bgcolor="#080808ff"
inkscape:zoom="32"
inkscape:cx="3.46875"
inkscape:cy="9.15625"
inkscape:cy="9.140625"
inkscape:window-width="1916"
inkscape:window-height="1032"
inkscape:window-x="0"

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

BIN
assets/indic-steady.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 538 B

97
assets/indic-steady.svg Normal file
View File

@ -0,0 +1,97 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="10"
height="20"
viewBox="0 0 10 20"
version="1.1"
id="svg1"
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
sodipodi:docname="indic-steady.svg"
inkscape:export-filename="indic-rising.svg"
inkscape:export-xdpi="102.28008"
inkscape:export-ydpi="102.28008"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1"
pagecolor="#000000"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
inkscape:export-bgcolor="#080808ff"
inkscape:zoom="32"
inkscape:cx="3.46875"
inkscape:cy="9.140625"
inkscape:window-width="1916"
inkscape:window-height="1032"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="layer1" />
<defs
id="defs1" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="matrix(0.10139507,0,0,0.10139507,4.4930246,0.14783758)">
<rect
style="fill:#080808;fill-opacity:1;stroke:none;stroke-width:95.2216;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0.2;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
id="rect4"
width="98.624123"
height="197.24825"
x="-44.312061"
y="-1.4580333" />
<rect
style="fill:#f6ab00;fill-opacity:1;stroke:none;stroke-width:10.4178;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0.2;stroke-dasharray:none;stroke-opacity:1"
id="rect3"
width="92.56852"
height="34.62767"
x="-41.28426"
y="79.852249"
rx="10.363558"
ry="15.606441" />
<path
sodipodi:type="star"
style="fill:#3e3e3e;fill-opacity:1;stroke:#080808;stroke-width:6.94267343;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0.2;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
id="path1"
inkscape:flatsided="true"
sodipodi:sides="3"
sodipodi:cx="25.63151"
sodipodi:cy="24.391275"
sodipodi:r1="55.859524"
sodipodi:r2="27.929762"
sodipodi:arg1="0.52359878"
sodipodi:arg2="1.5707963"
inkscape:rounded="0.1"
inkscape:randomized="0"
d="m 74.007276,52.321038 c -4.837576,8.378928 -91.913956,8.378928 -96.751533,-1e-6 -4.837577,-8.378929 38.700614,-83.789285 48.375767,-83.789285 9.675153,0 53.213343,75.410357 48.375766,83.789286 z"
inkscape:transform-center-y="-12.4031"
transform="matrix(0.82051985,0,0,0.88816373,-16.031162,29.570393)" />
<path
sodipodi:type="star"
style="fill:#3e3e3e;fill-opacity:1;stroke:#080808;stroke-width:6.94267343;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0.2;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
id="path1-1"
inkscape:flatsided="true"
sodipodi:sides="3"
sodipodi:cx="25.63151"
sodipodi:cy="24.391275"
sodipodi:r1="55.859524"
sodipodi:r2="27.929762"
sodipodi:arg1="0.52359878"
sodipodi:arg2="1.5707963"
inkscape:rounded="0.1"
inkscape:randomized="0"
d="m 74.007276,52.321038 c -4.837576,8.378928 -91.913956,8.378928 -96.751533,-1e-6 -4.837577,-8.378929 38.700614,-83.789285 48.375767,-83.789285 9.675153,0 53.213343,75.410357 48.375766,83.789286 z"
inkscape:transform-center-y="12.403106"
transform="matrix(-0.82051985,0,0,-0.88816373,26.031162,164.76177)" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@ -1,22 +1,20 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="24px"
height="24px"
viewBox="0 0 24 24"
<svg:svg
width="45"
height="45"
viewBox="0 0 45 45"
stroke-width="1.5"
fill="none"
color="#ff6600"
data-darkreader-inline-color=""
style="--darkreader-inline-color: var(--darkreader-text-000000, #e8e6e3);"
version="1.1"
id="svg7"
sodipodi:docname="temperature-icon.svg"
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
<svg:defs
id="defs7" />
<sodipodi:namedview
id="namedview7"
@ -27,76 +25,92 @@
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="30.169889"
inkscape:cx="10.523738"
inkscape:cy="14.103466"
inkscape:zoom="10.216728"
inkscape:cx="24.861188"
inkscape:cy="27.748609"
inkscape:window-width="1916"
inkscape:window-height="1032"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="svg7" />
<path
d="M6 11.9995C4.78555 12.9117 4 14.3641 4 15.9999C4 18.7613 6.23858 20.9999 9 20.9999C11.7614 20.9999 14 18.7613 14 15.9999C14 14.3641 13.2144 12.9117 12 11.9995"
stroke="#ff6600"
stroke-width="1.5"
stroke-linecap="round"
stroke-linejoin="round"
data-darkreader-inline-stroke=""
style="--darkreader-inline-stroke: #ff6600;"
id="path1" />
<path
d="M6 12V3H12V12"
stroke="#ff6600"
stroke-width="1.5"
stroke-linecap="round"
stroke-linejoin="round"
data-darkreader-inline-stroke=""
style="--darkreader-inline-stroke: #ff6600;"
id="path2" />
<path
d="M12 3L14 3"
stroke="#ff6600"
stroke-width="1.5"
stroke-linecap="round"
stroke-linejoin="round"
data-darkreader-inline-stroke=""
style="--darkreader-inline-stroke: #ff6600;"
id="path3" />
<path
d="M12 6L14 6"
stroke="#ff6600"
stroke-width="1.5"
stroke-linecap="round"
stroke-linejoin="round"
data-darkreader-inline-stroke=""
style="--darkreader-inline-stroke: #ff6600;"
id="path4" />
<path
d="M12 9H14"
stroke="#ff6600"
stroke-width="1.5"
stroke-linecap="round"
stroke-linejoin="round"
data-darkreader-inline-stroke=""
style="--darkreader-inline-stroke: #ff6600;"
id="path5" />
<path
d="M19 7C20.1046 7 21 6.10457 21 5C21 3.89543 20.1046 3 19 3C17.8954 3 17 3.89543 17 5C17 6.10457 17.8954 7 19 7Z"
stroke="#ff6600"
stroke-width="1.5"
stroke-linecap="round"
stroke-linejoin="round"
data-darkreader-inline-stroke=""
style="--darkreader-inline-stroke: #ff6600;"
id="path6" />
<path
d="M9 14C7.89543 14 7 14.8954 7 16C7 17.1046 7.89543 18 9 18C10.1046 18 11 17.1046 11 16C11 14.8954 10.1046 14 9 14ZM9 14V11"
stroke="#ff6600"
stroke-width="1.5"
stroke-linecap="round"
stroke-linejoin="round"
data-darkreader-inline-stroke=""
style="--darkreader-inline-stroke: #ff6600;"
id="path7" />
</svg>
inkscape:current-layer="layer1" />
<style
class="darkreader darkreader--fallback">html, body, body :not(iframe) {
background-color: var(--darkreader-background-ffffff, #181a1b) !important;
border-color: var(--darkreader-border-404040, #776e62) !important;
color: var(--darkreader-text-000000, #e8e6e3) !important;
}
div[style*=&quot;background-color: rgb(135, 135, 135)&quot;] {
background-color: #878787 !important;
}</style>
<svg:g
inkscape:groupmode="layer"
id="layer1"
inkscape:label="Layer 1"
transform="matrix(2.0390253,0,0,2.0390253,-3.3768322,-2.3378069)">
<svg:rect
style="fill:#242424;fill-opacity:1;stroke-width:5.46432;paint-order:markers stroke fill"
id="rect1"
width="22.069368"
height="22.069368"
x="1.6561011"
y="1.1465315" />
<svg:path
d="m 6,11.9995 c -1.21445,0.9122 -2,2.3646 -2,4.0004 0,2.7614 2.23858,5 5,5 2.7614,0 5,-2.2386 5,-5 0,-1.6358 -0.7856,-3.0882 -2,-4.0004"
stroke="#ff6600"
stroke-width="1.5"
stroke-linecap="round"
stroke-linejoin="round"
data-darkreader-inline-stroke=""
id="path1" />
<svg:path
d="M 6,12 V 3 h 6 v 9"
stroke="#ff6600"
stroke-width="1.5"
stroke-linecap="round"
stroke-linejoin="round"
data-darkreader-inline-stroke=""
id="path2" />
<svg:path
d="m 12,3 h 2"
stroke="#ff6600"
stroke-width="1.5"
stroke-linecap="round"
stroke-linejoin="round"
data-darkreader-inline-stroke=""
id="path3" />
<svg:path
d="m 12,6 h 2"
stroke="#ff6600"
stroke-width="1.5"
stroke-linecap="round"
stroke-linejoin="round"
data-darkreader-inline-stroke=""
id="path4" />
<svg:path
d="m 12,9 h 2"
stroke="#ff6600"
stroke-width="1.5"
stroke-linecap="round"
stroke-linejoin="round"
data-darkreader-inline-stroke=""
id="path5" />
<svg:path
d="m 19,7 c 1.1046,0 2,-0.89543 2,-2 0,-1.10457 -0.8954,-2 -2,-2 -1.1046,0 -2,0.89543 -2,2 0,1.10457 0.8954,2 2,2 z"
stroke="#ff6600"
stroke-width="1.5"
stroke-linecap="round"
stroke-linejoin="round"
data-darkreader-inline-stroke=""
id="path6" />
<svg:path
d="m 9,14 c -1.10457,0 -2,0.8954 -2,2 0,1.1046 0.89543,2 2,2 1.1046,0 2,-0.8954 2,-2 0,-1.1046 -0.8954,-2 -2,-2 z m 0,0 v -3"
stroke="#ff6600"
stroke-width="1.5"
stroke-linecap="round"
stroke-linejoin="round"
data-darkreader-inline-stroke=""
id="path7"
inkscape:label="path7" />
</svg:g>
</svg:svg>

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@ -1,11 +1,13 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
viewBox="0 0 24 24"
viewBox="0 0 45 45"
fill="currentColor"
version="1.1"
id="svg1"
sodipodi:docname="voc-icon.svg"
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
width="45"
height="45"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
@ -21,17 +23,24 @@
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="21.333333"
inkscape:cx="6.2109375"
inkscape:cy="14.226563"
inkscape:zoom="12.529602"
inkscape:cx="23.624054"
inkscape:cy="30.687327"
inkscape:window-width="1916"
inkscape:window-height="1032"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="svg1" />
<rect
style="fill:#242424;stroke-width:12.8688;stroke-dasharray:51.4753, 25.7377, 12.8688, 25.7377;paint-order:markers stroke fill;fill-opacity:1"
id="rect1"
width="45"
height="45"
x="0"
y="0" />
<path
d="M4 4H8V6H4V4ZM16 19H20V21H16V19ZM2 9H7V11H2V9ZM9 9H12V11H9V9ZM14 9H20V11H14V9ZM4 14H10V16H4V14ZM12 14H15V16H12V14ZM17 14H22V16H17V14ZM10 4H22V6H10V4ZM2 19H14V21H2V19Z"
d="M 6.3874472,5.380413 H 14.443723 V 9.4085512 H 6.3874472 Z M 30.556276,35.591449 h 8.056276 v 4.028138 H 30.556276 Z M 2.359309,15.450758 h 10.070345 v 4.028139 H 2.359309 Z m 14.098484,0 H 22.5 v 4.028139 h -6.042207 z m 10.070345,0 h 12.084414 v 4.028139 H 26.528138 Z M 6.3874472,25.521104 H 18.471862 v 4.028138 H 6.3874472 Z m 16.1125528,0 h 6.042207 v 4.028138 H 22.5 Z m 10.070345,0 h 10.070346 v 4.028138 H 32.570345 Z M 18.471862,5.380413 H 42.640691 V 9.4085512 H 18.471862 Z M 2.359309,35.591449 h 24.168829 v 4.028138 H 2.359309 Z"
id="path1"
style="stroke:none;stroke-opacity:1;fill:#cacaca;fill-opacity:1" />
style="fill:#cacaca;fill-opacity:1;stroke:none;stroke-width:2.01407;stroke-opacity:1" />
</svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -8,6 +8,11 @@ thread_local! {
pub static TEMPERATURE_ICON: UnsafeCell<MaybeUninit<Bmp<'static, Rgb565>>> = const { UnsafeCell::new(MaybeUninit::zeroed()) };
pub static VOC_ICON: UnsafeCell<MaybeUninit<Bmp<'static, Rgb565>>> = const { UnsafeCell::new(MaybeUninit::zeroed()) };
pub static CO2_ICON: UnsafeCell<MaybeUninit<Bmp<'static, Rgb565>>> = const { UnsafeCell::new(MaybeUninit::zeroed()) };
// Tendency indicators
pub static TENDENCY_RISING: UnsafeCell<MaybeUninit<Bmp<'static, Rgb565>>> = const { UnsafeCell::new(MaybeUninit::zeroed()) };
pub static TENDENCY_STEADY: UnsafeCell<MaybeUninit<Bmp<'static, Rgb565>>> = const { UnsafeCell::new(MaybeUninit::zeroed()) };
pub static TENDENCY_FALLING: UnsafeCell<MaybeUninit<Bmp<'static, Rgb565>>> = const { UnsafeCell::new(MaybeUninit::zeroed()) };
}
macro_rules! load_image {
@ -28,12 +33,15 @@ macro_rules! get_image {
};
}
pub fn prepare_images()
{
pub fn prepare_images() {
unsafe {
load_image!(HUMIDITY_ICON, "../assets/humidity-icon.bmp");
load_image!(TEMPERATURE_ICON, "../assets/temperature-icon.bmp");
load_image!(VOC_ICON, "../assets/voc-icon.bmp");
load_image!(CO2_ICON, "../assets/co2-icon.bmp");
load_image!(TENDENCY_RISING, "../assets/indic-rising.bmp");
load_image!(TENDENCY_STEADY, "../assets/indic-steady.bmp");
load_image!(TENDENCY_FALLING, "../assets/indic-falling.bmp");
}
}

View File

@ -1,4 +1,4 @@
#![feature(unsafe_cell_access)]
//#![feature(unsafe_cell_access)]
mod images;
@ -45,13 +45,13 @@ fn main() {
fn hello_view() -> impl View<Rgb565> {
VStack::new((
HStack::new((
main_menu_indicator(MenuIndicatorType::Temperature(31.5)),
main_menu_indicator(MenuIndicatorType::Humidity(36.2)),
main_menu_indicator(MenuIndicatorType::Temperature(31.5), Tendency::Falling),
main_menu_indicator(MenuIndicatorType::Humidity(36.2), Tendency::Steady),
))
.with_spacing(5),
HStack::new((
main_menu_indicator(MenuIndicatorType::Co2(1329)),
main_menu_indicator(MenuIndicatorType::Voc(29)),
main_menu_indicator(MenuIndicatorType::Co2(1329), Tendency::Rising),
main_menu_indicator(MenuIndicatorType::Voc(29), Tendency::Falling),
))
.with_spacing(5),
))
@ -99,7 +99,7 @@ impl MenuIndicatorType {
}
}
fn main_menu_indicator(indicator_type: MenuIndicatorType) -> impl View<Rgb565> {
fn main_menu_indicator(indicator_type: MenuIndicatorType, tendency: Tendency) -> impl View<Rgb565> {
Rectangle
.corner_radius(10)
.stroked(FRAME_STROKE)
@ -112,14 +112,23 @@ fn main_menu_indicator(indicator_type: MenuIndicatorType) -> impl View<Rgb565> {
VStack::new((
HStack::new((
Spacer::default(),
buoyant::view::Image::new(get_image!(
indicator_type.get_corresponding_icon()
)),
ZStack::new((
Rectangle
.corner_radius(10)
//.stroked_offset(5, StrokeOffset::Outer)
.foreground_color(Rgb565::new(4, 9, 4)),
buoyant::view::Image::new(get_image!(
indicator_type.get_corresponding_icon()
)),
))
.flex_frame()
.with_max_size(53, 53)
.with_min_size(53, 53),
Spacer::default(),
)),
HStack::new((
Spacer::default(),
tendency_indicator(Tendency::Rising),
tendency_indicator(tendency),
Text::new(indicator_type.get_value_str(), &PROFONT_24_POINT),
Text::new(
indicator_type.get_corresponding_unit_string(),
@ -145,10 +154,26 @@ pub enum Tendency {
Falling,
}
fn tendency_indicator(tendency: Tendency) -> impl View<Rgb565> {
Rectangle
.foreground_color(Rgb565::WHITE)
.flex_frame()
.with_min_size(10, 20)
.with_max_size(10, 20)
impl Tendency {
pub fn get_corresponding_icon(
&self,
) -> &'static std::thread::LocalKey<UnsafeCell<MaybeUninit<Bmp<'static, Rgb565>>>> {
match self {
Self::Rising => &images::TENDENCY_RISING,
Self::Steady => &images::TENDENCY_STEADY,
Self::Falling => &images::TENDENCY_FALLING,
}
}
}
fn tendency_indicator(tendency: Tendency) -> impl View<Rgb565> {
HStack::new((
Image::new(get_image!(tendency.get_corresponding_icon()))
.flex_frame()
.with_min_size(10, 20)
.with_max_size(10, 20),
Spacer::default(),
))
.flex_frame()
.with_max_width(15)
}