Files
create/icons/themed/tree-sync-view.svg
forbes d7b532255b
Some checks failed
Build and Test / build (pull_request) Has been cancelled
feat(icons): add icon theming infrastructure with Catppuccin color remapping
- Remove hand-crafted kindred-icons/ in favor of auto-generated themed icons
- Add icons/mappings/ with FCAD.csv (Tango palette) and kindred.csv (Catppuccin Mocha)
- Add icons/retheme.py script to remap upstream FreeCAD SVG colors
- Generate icons/themed/ with 1,595 themed SVGs (45,300 color replacements)
- BitmapFactory loads icons/themed/ as highest priority before default icons
- 157-color mapping covers the full Tango palette, interpolating between
  4 luminance anchors per color family

Regenerate: python3 icons/retheme.py
2026-02-15 20:34:22 -06:00

644 lines
21 KiB
XML

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
id="svg11300"
height="64"
width="64"
version="1.1"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<defs
id="defs3">
<linearGradient
id="linearGradient3873">
<stop
style="stop-color:#cdd6f4;stop-opacity:1;"
offset="0"
id="stop3875" />
<stop
style="stop-color:#6c7086;stop-opacity:1"
offset="1"
id="stop3877" />
</linearGradient>
<linearGradient
id="linearGradient3863">
<stop
style="stop-color:#94e2d5;stop-opacity:1"
offset="0"
id="stop3865" />
<stop
style="stop-color:#54d1bc;stop-opacity:1"
offset="1"
id="stop3867" />
</linearGradient>
<linearGradient
id="linearGradient3253">
<stop
style="stop-color:#89b4fa;stop-opacity:1;"
offset="0"
id="stop3255" />
<stop
style="stop-color:#258d7d;stop-opacity:1;"
offset="1"
id="stop3257" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient3253"
id="radialGradient3270"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-0.3741544,0.4236661,-0.5825572,-0.5144765,35.157782,16.985792)"
cx="18.195206"
cy="17.38835"
fx="18.195206"
fy="17.38835"
r="27.986706" />
<linearGradient
id="linearGradient11979">
<stop
style="stop-color:#cdd6f4;stop-opacity:1;"
offset="0"
id="stop11981" />
<stop
style="stop-color:#89b4fa;stop-opacity:1"
offset="1"
id="stop11983" />
</linearGradient>
<linearGradient
id="linearGradient2846">
<stop
id="stop2848"
offset="0.0000000"
style="stop-color:#8a8a8a;stop-opacity:1.0000000;" />
<stop
id="stop2850"
offset="1.0000000"
style="stop-color:#484848;stop-opacity:1.0000000;" />
</linearGradient>
<linearGradient
id="linearGradient2366">
<stop
id="stop2368"
offset="0"
style="stop-color:#cdd6f4;stop-opacity:1;" />
<stop
style="stop-color:#cdd6f4;stop-opacity:0.21904762;"
offset="0.50000000"
id="stop2374" />
<stop
id="stop2370"
offset="1.0000000"
style="stop-color:#cdd6f4;stop-opacity:1.0000000;" />
</linearGradient>
<linearGradient
id="linearGradient4467">
<stop
style="stop-color:#cdd6f4;stop-opacity:1;"
offset="0"
id="stop4469" />
<stop
style="stop-color:#cdd6f4;stop-opacity:0.24761905;"
offset="1.0000000"
id="stop4471" />
</linearGradient>
<linearGradient
id="linearGradient4454">
<stop
style="stop-color:#89b4fa;stop-opacity:0.20784314;"
offset="0.0000000"
id="stop4456" />
<stop
style="stop-color:#89b4fa;stop-opacity:0.67619050;"
offset="1.0000000"
id="stop4458" />
</linearGradient>
<linearGradient
id="linearGradient4440">
<stop
style="stop-color:#7d7d7d;stop-opacity:1;"
offset="0"
id="stop4442" />
<stop
id="stop4448"
offset="0.50000000"
style="stop-color:#b1b1b1;stop-opacity:1.0000000;" />
<stop
style="stop-color:#686868;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop4444" />
</linearGradient>
<radialGradient
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.914812,0.01265023,-0.00821502,0.213562,2.253914,27.18889)"
r="10.31934"
fy="35.127438"
fx="23.070683"
cy="35.127438"
cx="23.070683"
id="radialGradient2097"
xlink:href="#linearGradient2091" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="34.976799"
x2="27.900846"
y1="22.851799"
x1="16.874998"
id="linearGradient7922"
xlink:href="#linearGradient7916" />
<linearGradient
y2="50.939667"
x2="45.380436"
y1="45.264122"
x1="46.834816"
gradientUnits="userSpaceOnUse"
id="linearGradient7186"
xlink:href="#linearGradient2871" />
<linearGradient
y2="26.649363"
x2="53.588623"
y1="23.667896"
x1="18.935766"
gradientUnits="userSpaceOnUse"
id="linearGradient7184"
xlink:href="#linearGradient2402" />
<linearGradient
y2="50.939667"
x2="45.380436"
y1="45.264122"
x1="46.834816"
gradientUnits="userSpaceOnUse"
id="linearGradient7182"
xlink:href="#linearGradient2871" />
<linearGradient
y2="20.60858"
x2="15.984863"
y1="36.061237"
x1="62.513836"
gradientUnits="userSpaceOnUse"
id="linearGradient7180"
xlink:href="#linearGradient2380" />
<linearGradient
gradientTransform="matrix(-1,0,0,-1,47.93934,50.02474)"
y2="23.554308"
x2="22.374878"
y1="13.604306"
x1="13.435029"
gradientUnits="userSpaceOnUse"
id="linearGradient7189"
xlink:href="#linearGradient7179" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="23.554308"
x2="22.374878"
y1="13.604306"
x1="13.435029"
id="linearGradient7185"
xlink:href="#linearGradient7179" />
<linearGradient
gradientTransform="translate(-18.01785,-13.57119)"
gradientUnits="userSpaceOnUse"
y2="48.547989"
x2="45.918697"
y1="36.422989"
x1="34.892849"
id="linearGradient4975"
xlink:href="#linearGradient1322" />
<linearGradient
id="linearGradient1322">
<stop
style="stop-color:#89b4fa"
offset="0.0000000"
id="stop1324" />
<stop
style="stop-color:#5187d6;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop1326" />
</linearGradient>
<linearGradient
id="linearGradient2316">
<stop
id="stop2318"
offset="0"
style="stop-color:#11111b;stop-opacity:1;" />
<stop
id="stop2320"
offset="1"
style="stop-color:#cdd6f4;stop-opacity:0.65979379;" />
</linearGradient>
<linearGradient
id="linearGradient7179">
<stop
id="stop7181"
offset="0"
style="stop-color:#cdd6f4;stop-opacity:1;" />
<stop
id="stop7183"
offset="1"
style="stop-color:#cdd6f4;stop-opacity:0;" />
</linearGradient>
<linearGradient
y2="26.048164"
x2="52.854095"
y1="26.048164"
x1="5.9649177"
gradientUnits="userSpaceOnUse"
id="linearGradient1491"
xlink:href="#linearGradient2797" />
<linearGradient
id="linearGradient2797">
<stop
id="stop2799"
offset="0"
style="stop-color:#cdd6f4;stop-opacity:1;" />
<stop
id="stop2801"
offset="1"
style="stop-color:#cdd6f4;stop-opacity:0;" />
</linearGradient>
<linearGradient
y2="26.048164"
x2="52.854095"
y1="26.048164"
x1="5.9649177"
gradientUnits="userSpaceOnUse"
id="linearGradient1493"
xlink:href="#linearGradient2797" />
<linearGradient
id="linearGradient2402">
<stop
id="stop2404"
offset="0"
style="stop-color:#89b4fa;stop-opacity:1;" />
<stop
id="stop2406"
offset="1"
style="stop-color:#659df9;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient2871">
<stop
id="stop2873"
offset="0"
style="stop-color:#307bf7;stop-opacity:1;" />
<stop
id="stop2875"
offset="1"
style="stop-color:#307bf7;stop-opacity:1" />
</linearGradient>
<linearGradient
gradientTransform="translate(-48.77039,-5.765705)"
gradientUnits="userSpaceOnUse"
y2="24.842253"
x2="37.124462"
y1="30.748846"
x1="32.647972"
id="linearGradient2696"
xlink:href="#linearGradient2690" />
<linearGradient
id="linearGradient2690">
<stop
id="stop2692"
offset="0"
style="stop-color:#89b4fa;stop-opacity:1;" />
<stop
id="stop2694"
offset="1"
style="stop-color:#89b4fa;stop-opacity:0;" />
</linearGradient>
<linearGradient
gradientTransform="translate(-48.77039,-5.765705)"
gradientUnits="userSpaceOnUse"
y2="24.842253"
x2="37.124462"
y1="31.455952"
x1="36.713837"
id="linearGradient2688"
xlink:href="#linearGradient2682" />
<linearGradient
id="linearGradient2682">
<stop
id="stop2684"
offset="0"
style="stop-color:#4f8ff8;stop-opacity:1;" />
<stop
id="stop2686"
offset="1"
style="stop-color:#89b4fa;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient2380">
<stop
id="stop2382"
offset="0"
style="stop-color:#89b4fa;stop-opacity:1" />
<stop
id="stop2384"
offset="1"
style="stop-color:#89b4fa;stop-opacity:1" />
</linearGradient>
<linearGradient
y2="19.115122"
x2="15.419417"
y1="10.612206"
x1="13.478554"
gradientTransform="translate(-48.30498,-6.043298)"
gradientUnits="userSpaceOnUse"
id="linearGradient1486"
xlink:href="#linearGradient2831" />
<linearGradient
id="linearGradient2831">
<stop
id="stop2833"
offset="0"
style="stop-color:#307bf7;stop-opacity:1;" />
<stop
style="stop-color:#679ef9;stop-opacity:1;"
offset="0.33333334"
id="stop2855" />
<stop
id="stop2835"
offset="1"
style="stop-color:#89b4fa;stop-opacity:0;" />
</linearGradient>
<linearGradient
y2="26.194071"
x2="37.065414"
y1="29.729605"
x1="37.128052"
gradientTransform="matrix(-1,0,0,-1,-1.24248,40.0817)"
gradientUnits="userSpaceOnUse"
id="linearGradient1488"
xlink:href="#linearGradient2847" />
<linearGradient
id="linearGradient2847">
<stop
id="stop2849"
offset="0"
style="stop-color:#307bf7;stop-opacity:1;" />
<stop
id="stop2851"
offset="1"
style="stop-color:#307bf7;stop-opacity:0;" />
</linearGradient>
<radialGradient
r="15.644737"
fy="36.421127"
fx="24.837126"
cy="36.421127"
cx="24.837126"
gradientTransform="matrix(1,0,0,0.536723,0,16.87306)"
gradientUnits="userSpaceOnUse"
id="radialGradient1503"
xlink:href="#linearGradient8662" />
<linearGradient
id="linearGradient8662">
<stop
id="stop8664"
offset="0"
style="stop-color:#11111b;stop-opacity:1;" />
<stop
id="stop8666"
offset="1"
style="stop-color:#11111b;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient7916">
<stop
id="stop7918"
offset="0"
style="stop-color:#cdd6f4;stop-opacity:1;" />
<stop
id="stop7920"
offset="1.0000000"
style="stop-color:#cdd6f4;stop-opacity:0.34020618;" />
</linearGradient>
<linearGradient
id="linearGradient2091">
<stop
id="stop2093"
offset="0"
style="stop-color:#11111b;stop-opacity:1;" />
<stop
id="stop2095"
offset="1"
style="stop-color:#11111b;stop-opacity:0;" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient3253"
id="radialGradient2695"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.97170193,0.00229703,-0.00584891,0.35910699,59.357114,-51.534761)"
cx="44.286785"
cy="6.4023118"
fx="44.286785"
fy="6.4023118"
r="27.986706" />
<radialGradient
xlink:href="#linearGradient3857"
id="radialGradient3163"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.57142881,0.57142866,-0.9230769,0.92307704,56.905976,-22.610628)"
cx="43.783218"
cy="41.446495"
fx="43.783218"
fy="41.446495"
r="12.458333" />
<linearGradient
id="linearGradient3857">
<stop
style="stop-color:#94e2d5;stop-opacity:1"
offset="0"
id="stop3859" />
<stop
style="stop-color:#258e7e;stop-opacity:1"
offset="1"
id="stop3861" />
</linearGradient>
<linearGradient
xlink:href="#linearGradient3863"
id="linearGradient3869"
x1="139.61827"
y1="38.502964"
x2="140.73358"
y2="44.079514"
gradientUnits="userSpaceOnUse" />
<radialGradient
xlink:href="#linearGradient8662"
id="radialGradient1503-3"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.55205915,0,0,0.19748495,-141.82176,-41.593261)"
cx="24.837126"
cy="36.421127"
fx="24.837126"
fy="36.421127"
r="15.644737" />
<linearGradient
xlink:href="#linearGradient3063-2"
id="linearGradient4587"
gradientUnits="userSpaceOnUse"
x1="42.703487"
y1="20.547306"
x2="26.605606"
y2="33.634254" />
<linearGradient
id="linearGradient3063-2">
<stop
id="stop3065-6"
offset="0"
style="stop-color:#89b4fa;stop-opacity:1" />
<stop
id="stop3067-0"
offset="1"
style="stop-color:#0846b3;stop-opacity:1" />
</linearGradient>
<linearGradient
xlink:href="#linearGradient3873"
id="linearGradient3034"
gradientUnits="userSpaceOnUse"
x1="41.791897"
y1="20.134634"
x2="23.705669"
y2="34.083359" />
<linearGradient
id="linearGradient2380-9">
<stop
style="stop-color:#89b4fa;stop-opacity:1"
offset="0"
id="stop2382-4" />
<stop
style="stop-color:#307bf7;stop-opacity:1"
offset="1"
id="stop2384-6" />
</linearGradient>
<linearGradient
xlink:href="#linearGradient3873"
id="linearGradient3034-4"
gradientUnits="userSpaceOnUse"
x1="26.221533"
y1="31.125586"
x2="46.731483"
y2="21.766298" />
<linearGradient
xlink:href="#linearGradient3063-2"
id="linearGradient4321"
gradientUnits="userSpaceOnUse"
x1="42.703487"
y1="20.547306"
x2="26.605606"
y2="33.634254" />
</defs>
<metadata
id="metadata4">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:creator>
<cc:Agent>
<dc:title>Martin Ruskov</dc:title>
</cc:Agent>
</dc:creator>
<dc:source>http://commons.wikimedia.org/wiki/Tango_icon</dc:source>
<cc:license
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
<cc:permits
rdf:resource="http://web.resource.org/cc/Reproduction" />
<cc:permits
rdf:resource="http://web.resource.org/cc/Distribution" />
<cc:requires
rdf:resource="http://web.resource.org/cc/Notice" />
<cc:requires
rdf:resource="http://web.resource.org/cc/Attribution" />
<cc:permits
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
<cc:requires
rdf:resource="http://web.resource.org/cc/ShareAlike" />
</cc:License>
</rdf:RDF>
</metadata>
<g
id="layer1"
transform="translate(0,16)">
<g
id="g3157"
transform="matrix(1.7932228,0,0,1.7932228,-206.36667,-43.04439)">
<path
id="rect3057"
d="m 133,36.999994 4,-4 12,12.000016 -4,3.999987 z"
style="fill:url(#linearGradient3869);fill-opacity:1;stroke:#103b35;stroke-width:1.11531043000000007;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:2.04000000000000004" />
<path
id="path3865"
d="m 147.80553,45.380783 -10,-9.999995"
style="fill:none;stroke:#94e2d5;stroke-width:1.11531043;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
transform="matrix(1.0183269,0,0,1.0183268,80.09464,-16.850374)"
d="M 59,44.5 A 11.5,11.5 0 0 1 47.5,56 11.5,11.5 0 0 1 36,44.5 11.5,11.5 0 0 1 47.5,33 11.5,11.5 0 0 1 59,44.5 Z"
id="path3055"
style="fill:url(#radialGradient3163);fill-opacity:1;stroke:#103b35;stroke-width:1.09523809000000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:2.04000000000000004" />
<path
transform="matrix(0.92134334,0,0,0.92134334,84.70136,-12.53461)"
d="M 59,44.5 A 11.5,11.5 0 0 1 47.5,56 11.5,11.5 0 0 1 36,44.5 11.5,11.5 0 0 1 47.5,33 11.5,11.5 0 0 1 59,44.5 Z"
id="path3055-1"
style="fill:none;stroke:#94e2d5;stroke-width:1.21052635;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:2.04" />
<ellipse
ry="3.0896015"
rx="8.6368198"
cy="-34.400635"
cx="-128.1102"
transform="scale(-1,-1)"
id="path8660"
style="color:#11111b;display:inline;overflow:visible;visibility:visible;opacity:0.38333333;fill:url(#radialGradient1503-3);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none" />
<g
id="g4346"
transform="matrix(1.086755,0,0,1.0862006,-10.804533,-2.6448999)"
style="stroke-width:0.920404">
<g
style="fill:url(#linearGradient4321);fill-opacity:1;stroke:#0846b3;stroke-width:0.674482;stroke-opacity:1"
transform="matrix(-0.21458192,-0.17978428,-0.18129574,0.21279294,140.23095,24.974324)"
id="g1878-1">
<path
style="color:#11111b;display:block;overflow:visible;visibility:visible;fill:url(#linearGradient3034);fill-opacity:1;fill-rule:nonzero;stroke:#103b35;stroke-width:3.00089;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
d="M 44.306783,50.229694 C 62.821497,35.818859 49.664587,13.411704 22.462411,12.49765 L 22.113843,3.1515478 7.6245439,20.496754 22.714328,33.219189 c 0,0 -0.251917,-9.88122 -0.251917,-9.88122 18.82976,0.998977 32.981627,14.071729 21.844372,26.891725 z"
id="path1880-27" />
</g>
<g
id="g2805-0"
transform="matrix(-0.18845081,-0.15789058,-0.15921799,0.18687969,138.79509,24.993869)"
style="fill:none;stroke:#8c92ab;stroke-width:0.674482;stroke-opacity:1">
<path
id="path2807-9"
d="M 52.368857,42.344789 C 57.336994,33.465615 49.176003,12.601866 19.05552,12.672851 L 18.677956,5.6633463 7.4378077,19.282655 19.129354,29.167094 18.807724,20.554957 c 18.244937,0.381972 33.804002,9.457851 33.561133,21.789832 z"
style="color:#11111b;display:block;overflow:visible;visibility:visible;fill:none;stroke:#8c92ab;stroke-width:2.02626;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:21;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" />
</g>
<g
style="fill:url(#linearGradient4587);fill-opacity:1;stroke:#0846b3;stroke-width:0.674482;stroke-opacity:1"
transform="matrix(0.21458192,0.17978428,0.18129574,-0.21279294,116.07282,32.308039)"
id="g1878-6">
<path
style="color:#11111b;display:block;overflow:visible;visibility:visible;fill:url(#linearGradient3034-4);fill-opacity:1;fill-rule:nonzero;stroke:#103b35;stroke-width:3.00089;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
d="M 44.306783,50.229694 C 62.821497,35.818859 49.664587,13.411704 22.462411,12.49765 L 22.113843,3.1515478 7.6245439,20.496754 22.714328,33.219189 c 0,0 -0.251917,-9.88122 -0.251917,-9.88122 18.82976,0.998977 32.981627,14.071729 21.844372,26.891725 z"
id="path1880-2" />
</g>
<g
id="g2805-4"
transform="matrix(0.18845081,0.15789058,0.15921799,-0.18687969,117.50868,32.288494)"
style="fill:none;stroke:#8c92ab;stroke-width:0.674482;stroke-opacity:1">
<path
id="path2807-5"
d="M 52.368857,42.344789 C 57.864671,33.591679 49.176003,12.601866 19.05552,12.672851 L 18.677956,5.6633463 7.4378077,19.282655 19.129354,29.167094 18.807724,20.554957 c 18.244937,0.381972 33.804002,9.457851 33.561133,21.789832 z"
style="color:#11111b;display:block;overflow:visible;visibility:visible;fill:none;stroke:#8c92ab;stroke-width:2.02626;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:21;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" />
</g>
</g>
</g>
</g>
</svg>