From 0c39ccad054195201e53993c25a6c1cd7a6b8327 Mon Sep 17 00:00:00 2001 From: wagesj45 Date: Mon, 20 Apr 2026 11:49:03 -0500 Subject: [PATCH] Adding logos --- resources/img/logo-dark-16.png | Bin 0 -> 619 bytes resources/img/logo-dark-32.png | Bin 0 -> 1105 bytes resources/img/logo-dark-64.png | Bin 0 -> 2283 bytes resources/img/logo-light-16.png | Bin 0 -> 619 bytes resources/img/logo-light-32.png | Bin 0 -> 1105 bytes resources/img/logo-light-64.png | Bin 0 -> 2283 bytes resources/img/logo.png | Bin 0 -> 18942 bytes resources/img/logo128.png | Bin 0 -> 4562 bytes resources/img/logo16.png | Bin 0 -> 619 bytes resources/img/logo32.png | Bin 0 -> 1105 bytes resources/img/logo48.png | Bin 0 -> 1702 bytes resources/img/logo64.png | Bin 0 -> 2283 bytes resources/img/logo96.png | Bin 0 -> 3382 bytes resources/svg/.gitkeep | 1 + resources/{ => svg}/logo.svg | 0 resources/svg2img.ps1 | 149 ++++++++++++++++++++++++++++++++ resources/svg2img.sh | 144 ++++++++++++++++++++++++++++++ 17 files changed, 294 insertions(+) create mode 100644 resources/img/logo-dark-16.png create mode 100644 resources/img/logo-dark-32.png create mode 100644 resources/img/logo-dark-64.png create mode 100644 resources/img/logo-light-16.png create mode 100644 resources/img/logo-light-32.png create mode 100644 resources/img/logo-light-64.png create mode 100644 resources/img/logo.png create mode 100644 resources/img/logo128.png create mode 100644 resources/img/logo16.png create mode 100644 resources/img/logo32.png create mode 100644 resources/img/logo48.png create mode 100644 resources/img/logo64.png create mode 100644 resources/img/logo96.png create mode 100644 resources/svg/.gitkeep rename resources/{ => svg}/logo.svg (100%) create mode 100644 resources/svg2img.ps1 create mode 100755 resources/svg2img.sh diff --git a/resources/img/logo-dark-16.png b/resources/img/logo-dark-16.png new file mode 100644 index 0000000000000000000000000000000000000000..04a431b1c3dbcb9e3c010657a9c504f892adfaa1 GIT binary patch literal 619 zcmV-x0+juUP)3j~y9r6B651>Gw{DQa?A_i_dZ1=lQ|Ryd!4DcBI=%13`H~ zIwz}LeD#c(>=k4x467d6oy5}r01|CMx+fY`835Z8@qG26>#*AgUsVK1=VZ0U!#q&4 zh3|{^dQR0hdf|ojrAF5t)@R^$te!3l&m&v{=7CyOKM3@x@lty8NB#jAQXdU_Z*5^; z>Yn%3_7}3IKut260IoNG5u+y>wrqL~z_RJFO^~JUSpM;GY3*(Y5U%8s>f}A({uCHC zVZa+h)}I=ds}o1ntXVv#Y;mrMnKy8t5&Jxnx8l_0KvhqIxs6t6#%NZP>%g#@&tP)R z1Z<&z)U|*HNaAoxel4625SF)E&nA_MP#8zlf%jm`Fg*hMo2COF`seCo8HhzQqQ2Gj z=6~|zTL*<4>`p^$CoImwY!3D{BC%aVVrB$A6Bi7-TMnUAgqhb+*8-(ED7*s!5)BZq ze&BDV&Tf39t`A8KG=sO=^?BqToseYvGhA$yl~T-#pAu4Y=&c~5VYdE>877sk(H-l$ z>9MDXjf?4hGuLB-{U4*Air46?R&J=*jC#$QbKT`(fZvUK;%k*L5|;n~002ovPDHLk FV1m*U6r%tD literal 0 HcmV?d00001 diff --git a/resources/img/logo-dark-32.png b/resources/img/logo-dark-32.png new file mode 100644 index 0000000000000000000000000000000000000000..8a7bfc2198818c23dbadad4c9ffcdbd2edb325f6 GIT binary patch literal 1105 zcmV-X1g`suP)6E656)M=GmL^qN*px(UDJ{_G0#gYZ6BAu&SQ&!Tw4=BX zHYT)o46M)?TpAOjQG+jtr8PVj)JK5gEnuxoqgL9g^kLh%_jfVFFzq~grzOFK|8DL% z_k7A{6glQNOB)?$X``aYJqQ$vF>R?Dk_1E$qNSD= zu95sFG*mLFp^{0B6f}8}5M@hj?92k}J--6Toev&==3Qb&m8AWiCE#nZpEff&DU&4? zJR1p}9`BaAJ*($Fk0+roXg8_y(Ojwd;Ijq`g#F?h`$Uk&n=d;sa0VT^01Aj)QjuNS z*?uA}AbT$_H#5#p2nDGIcEu{y1LfgN@VLawy{nCD4aDL0SLoy@l+`17g)sQ-u>N7+ zq3Skh_nRku045T75s{Q|0He-TtJRMCIBgYHV!PF9yTra32J7a`V{lpfI4miQJ};{; z62}>3^vXeCLu|QahnLx96$59I;WuJs)iPA8r6%AvvC>#`%LP`fMJk(;;ebwzfR*Fu zsnFz&<2Ys6WgV*MP%m=*cgQP%;>zSc*MEgyPDAMik^LB>ilQ>Gc(?<7UqZMCOb+^I z82#aW^sm7L_;0BF1yWRw6jwRyL!&t$dNd1^$V)%p8UOLhxn=Q$n;1c=c0gGjQneGg zXFc?HCBQ#Nipt@EO@P>{XtWHQuap`qVgvpK%{(#Nr^jLNJ1B1iUoJQ^FmWw9^SdkH z{zr%wjK1o$J@~o-(2g}%McD<(pURBky3lugcDDQPLTCO#FMNm&{fJ((Q^2|C>hwXF za~%6x>}OSY+uKTLY}tpCOU;>r!SB)0eo%$tN@V4_1UTEZy`n!!06>D5OAJmk%68yB z(j830{m_2`sd^Ifl1mLI0#^LaI|cM1`kw1fA4YznRt%lQDb8l)F=orr|ou8yF39C%Rz03!Pho5vauEytlpzj>o4oA>_( X!;0d(@+JO%00000NkvXXu0mjf98dsq literal 0 HcmV?d00001 diff --git a/resources/img/logo-dark-64.png b/resources/img/logo-dark-64.png new file mode 100644 index 0000000000000000000000000000000000000000..cb1a91c276fc61a093c121280aaed189c6726688 GIT binary patch literal 2283 zcmVmNO`SeF>u`?Z$Klz4=sSM^n3fw#QK+<;((r;@j|rah zfarjiTk!y*HCA`Q)46ZPLl2O~V~Z@Ky8+1^r6hz6CZOwP9hX&Y3#~ zpuA;l{e?a=b8j{ccrw6h2)-e3Z#E5O4|y5PhaeA;+4$d?G2JV*X<@IY=xz;=#+E6T zvESnwUOx!>cV|q`-Cj&^Eyi-}`@EFTfDU8q*~W6_0H=M37l$IBvU*B??xl`vK`Oe~ zJEdXhFt$^t>uXx{nZOZ)sl#UzfNx0Su|;kRyEZ`7nwuS;I8GVcsne$eZLtfwZr1Ur z2_2)1odnC6@47DQI;!ZDtk^`*VQi;9QG5(h6YBA`C&=AyOS&>ZzTb8OP?RN`VNZT2 za?lg1-R?iQ>j4#^Y*$RD(mna1NazWEm|!t`m#bW5L<3|6w%ucY3-D?}+HRi?KE4j8 zw5cxareH<`q_JhTH8uE8go5uvW-+1x)f(aj;j-d+#)GvAqLhP7`Lo?%mLrww+W4M8&@X6nNzAi}*M>FD5tx zaB?r&*#^m)E{n)U(;s?D|Ms)X!`c{XfUIeqV~MpNxX~kDU&Y7yxG`a%8$G%m`Y&Y) z)vjtS)7{VhJ1Ksm0rKF1LaTi2LD1P=i5jD~>-w1oyw-CAX>6Ho89Vjn$UrxGbQ|qEs?&x0ACgRxamT!!2<4GAo>x%JKnM;Ips)~izATpSA#?*Y=htHA25Zbzxkg#>3^ zZN~A$ZU`E@%rvRQPq{N~aXo!ddH-DjP+^tsdTs+G^Z>i3>fRiQ_a7l|;sIpRe4%8# z0TAWE*!8#pDtsw7Y<KXfra&mcMm?Jw6ANA@8;WJ+7ggt0~1%SNpp!A zbrBwj_gCobEQ4A7=P$k==Z$c*qY#S6}FJ; z51}r^$Drq1;lv)|!i!2H10#xdwMVwZ$S59x?}XRY{wnEO+D*|l!Q~3SMM%9FF;+C{+g)q6Wp;J z0qy(HGlwGay)J1zK;bpDoX7Q#!i+#ir=K3Qyk6slKCm!aH+NEPVKcpfJdJ+KMF zA*6gV%=|o_)?mhoyaL6;4yYO6oItyxZyKjyt3FqAaHMdfJ1DsVo9TzjJXJcrZ=#$J zwgPD34Xe20>%Vqg_dok9de)`F^_V`SATQm-rURj2b>JGQ^MPk`Fj1oDgFxV?@>t@1LKkuVEU+4th2N0vn+|-GR--$9G zK#)!B9{ao>eDZSONkm?W{!u53*L)#k*%ac@$A}1^`I?>P2Go_oVsyE6Vfcow6U~LVP6t zHSp_kseiZ>Eq*|h`+!=&K{%*JUeMj^cjUC~Yr%kg;(vwh@p%t~vgrT-002ovPDHLk FV1oPAMcV)X literal 0 HcmV?d00001 diff --git a/resources/img/logo-light-16.png b/resources/img/logo-light-16.png new file mode 100644 index 0000000000000000000000000000000000000000..04a431b1c3dbcb9e3c010657a9c504f892adfaa1 GIT binary patch literal 619 zcmV-x0+juUP)3j~y9r6B651>Gw{DQa?A_i_dZ1=lQ|Ryd!4DcBI=%13`H~ zIwz}LeD#c(>=k4x467d6oy5}r01|CMx+fY`835Z8@qG26>#*AgUsVK1=VZ0U!#q&4 zh3|{^dQR0hdf|ojrAF5t)@R^$te!3l&m&v{=7CyOKM3@x@lty8NB#jAQXdU_Z*5^; z>Yn%3_7}3IKut260IoNG5u+y>wrqL~z_RJFO^~JUSpM;GY3*(Y5U%8s>f}A({uCHC zVZa+h)}I=ds}o1ntXVv#Y;mrMnKy8t5&Jxnx8l_0KvhqIxs6t6#%NZP>%g#@&tP)R z1Z<&z)U|*HNaAoxel4625SF)E&nA_MP#8zlf%jm`Fg*hMo2COF`seCo8HhzQqQ2Gj z=6~|zTL*<4>`p^$CoImwY!3D{BC%aVVrB$A6Bi7-TMnUAgqhb+*8-(ED7*s!5)BZq ze&BDV&Tf39t`A8KG=sO=^?BqToseYvGhA$yl~T-#pAu4Y=&c~5VYdE>877sk(H-l$ z>9MDXjf?4hGuLB-{U4*Air46?R&J=*jC#$QbKT`(fZvUK;%k*L5|;n~002ovPDHLk FV1m*U6r%tD literal 0 HcmV?d00001 diff --git a/resources/img/logo-light-32.png b/resources/img/logo-light-32.png new file mode 100644 index 0000000000000000000000000000000000000000..8a7bfc2198818c23dbadad4c9ffcdbd2edb325f6 GIT binary patch literal 1105 zcmV-X1g`suP)6E656)M=GmL^qN*px(UDJ{_G0#gYZ6BAu&SQ&!Tw4=BX zHYT)o46M)?TpAOjQG+jtr8PVj)JK5gEnuxoqgL9g^kLh%_jfVFFzq~grzOFK|8DL% z_k7A{6glQNOB)?$X``aYJqQ$vF>R?Dk_1E$qNSD= zu95sFG*mLFp^{0B6f}8}5M@hj?92k}J--6Toev&==3Qb&m8AWiCE#nZpEff&DU&4? zJR1p}9`BaAJ*($Fk0+roXg8_y(Ojwd;Ijq`g#F?h`$Uk&n=d;sa0VT^01Aj)QjuNS z*?uA}AbT$_H#5#p2nDGIcEu{y1LfgN@VLawy{nCD4aDL0SLoy@l+`17g)sQ-u>N7+ zq3Skh_nRku045T75s{Q|0He-TtJRMCIBgYHV!PF9yTra32J7a`V{lpfI4miQJ};{; z62}>3^vXeCLu|QahnLx96$59I;WuJs)iPA8r6%AvvC>#`%LP`fMJk(;;ebwzfR*Fu zsnFz&<2Ys6WgV*MP%m=*cgQP%;>zSc*MEgyPDAMik^LB>ilQ>Gc(?<7UqZMCOb+^I z82#aW^sm7L_;0BF1yWRw6jwRyL!&t$dNd1^$V)%p8UOLhxn=Q$n;1c=c0gGjQneGg zXFc?HCBQ#Nipt@EO@P>{XtWHQuap`qVgvpK%{(#Nr^jLNJ1B1iUoJQ^FmWw9^SdkH z{zr%wjK1o$J@~o-(2g}%McD<(pURBky3lugcDDQPLTCO#FMNm&{fJ((Q^2|C>hwXF za~%6x>}OSY+uKTLY}tpCOU;>r!SB)0eo%$tN@V4_1UTEZy`n!!06>D5OAJmk%68yB z(j830{m_2`sd^Ifl1mLI0#^LaI|cM1`kw1fA4YznRt%lQDb8l)F=orr|ou8yF39C%Rz03!Pho5vauEytlpzj>o4oA>_( X!;0d(@+JO%00000NkvXXu0mjf98dsq literal 0 HcmV?d00001 diff --git a/resources/img/logo-light-64.png b/resources/img/logo-light-64.png new file mode 100644 index 0000000000000000000000000000000000000000..cb1a91c276fc61a093c121280aaed189c6726688 GIT binary patch literal 2283 zcmVmNO`SeF>u`?Z$Klz4=sSM^n3fw#QK+<;((r;@j|rah zfarjiTk!y*HCA`Q)46ZPLl2O~V~Z@Ky8+1^r6hz6CZOwP9hX&Y3#~ zpuA;l{e?a=b8j{ccrw6h2)-e3Z#E5O4|y5PhaeA;+4$d?G2JV*X<@IY=xz;=#+E6T zvESnwUOx!>cV|q`-Cj&^Eyi-}`@EFTfDU8q*~W6_0H=M37l$IBvU*B??xl`vK`Oe~ zJEdXhFt$^t>uXx{nZOZ)sl#UzfNx0Su|;kRyEZ`7nwuS;I8GVcsne$eZLtfwZr1Ur z2_2)1odnC6@47DQI;!ZDtk^`*VQi;9QG5(h6YBA`C&=AyOS&>ZzTb8OP?RN`VNZT2 za?lg1-R?iQ>j4#^Y*$RD(mna1NazWEm|!t`m#bW5L<3|6w%ucY3-D?}+HRi?KE4j8 zw5cxareH<`q_JhTH8uE8go5uvW-+1x)f(aj;j-d+#)GvAqLhP7`Lo?%mLrww+W4M8&@X6nNzAi}*M>FD5tx zaB?r&*#^m)E{n)U(;s?D|Ms)X!`c{XfUIeqV~MpNxX~kDU&Y7yxG`a%8$G%m`Y&Y) z)vjtS)7{VhJ1Ksm0rKF1LaTi2LD1P=i5jD~>-w1oyw-CAX>6Ho89Vjn$UrxGbQ|qEs?&x0ACgRxamT!!2<4GAo>x%JKnM;Ips)~izATpSA#?*Y=htHA25Zbzxkg#>3^ zZN~A$ZU`E@%rvRQPq{N~aXo!ddH-DjP+^tsdTs+G^Z>i3>fRiQ_a7l|;sIpRe4%8# z0TAWE*!8#pDtsw7Y<KXfra&mcMm?Jw6ANA@8;WJ+7ggt0~1%SNpp!A zbrBwj_gCobEQ4A7=P$k==Z$c*qY#S6}FJ; z51}r^$Drq1;lv)|!i!2H10#xdwMVwZ$S59x?}XRY{wnEO+D*|l!Q~3SMM%9FF;+C{+g)q6Wp;J z0qy(HGlwGay)J1zK;bpDoX7Q#!i+#ir=K3Qyk6slKCm!aH+NEPVKcpfJdJ+KMF zA*6gV%=|o_)?mhoyaL6;4yYO6oItyxZyKjyt3FqAaHMdfJ1DsVo9TzjJXJcrZ=#$J zwgPD34Xe20>%Vqg_dok9de)`F^_V`SATQm-rURj2b>JGQ^MPk`Fj1oDgFxV?@>t@1LKkuVEU+4th2N0vn+|-GR--$9G zK#)!B9{ao>eDZSONkm?W{!u53*L)#k*%ac@$A}1^`I?>P2Go_oVsyE6Vfcow6U~LVP6t zHSp_kseiZ>Eq*|h`+!=&K{%*JUeMj^cjUC~Yr%kg;(vwh@p%t~vgrT-002ovPDHLk FV1oPAMcV)X literal 0 HcmV?d00001 diff --git a/resources/img/logo.png b/resources/img/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a3bf895b7a830af40412de8d1881b553cb559183 GIT binary patch literal 18942 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 X6;sa)`f|8E00000NkvXXu0mjfy{;~9 literal 0 HcmV?d00001 diff --git a/resources/img/logo128.png b/resources/img/logo128.png new file mode 100644 index 0000000000000000000000000000000000000000..8c4974a0df5e64fcef666a76697622d7751dafd3 GIT binary patch literal 4562 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 FV1m*U6r%tD literal 0 HcmV?d00001 diff --git a/resources/img/logo32.png b/resources/img/logo32.png new file mode 100644 index 0000000000000000000000000000000000000000..8a7bfc2198818c23dbadad4c9ffcdbd2edb325f6 GIT binary patch literal 1105 zcmV-X1g`suP)6E656)M=GmL^qN*px(UDJ{_G0#gYZ6BAu&SQ&!Tw4=BX zHYT)o46M)?TpAOjQG+jtr8PVj)JK5gEnuxoqgL9g^kLh%_jfVFFzq~grzOFK|8DL% z_k7A{6glQNOB)?$X``aYJqQ$vF>R?Dk_1E$qNSD= zu95sFG*mLFp^{0B6f}8}5M@hj?92k}J--6Toev&==3Qb&m8AWiCE#nZpEff&DU&4? zJR1p}9`BaAJ*($Fk0+roXg8_y(Ojwd;Ijq`g#F?h`$Uk&n=d;sa0VT^01Aj)QjuNS z*?uA}AbT$_H#5#p2nDGIcEu{y1LfgN@VLawy{nCD4aDL0SLoy@l+`17g)sQ-u>N7+ zq3Skh_nRku045T75s{Q|0He-TtJRMCIBgYHV!PF9yTra32J7a`V{lpfI4miQJ};{; z62}>3^vXeCLu|QahnLx96$59I;WuJs)iPA8r6%AvvC>#`%LP`fMJk(;;ebwzfR*Fu zsnFz&<2Ys6WgV*MP%m=*cgQP%;>zSc*MEgyPDAMik^LB>ilQ>Gc(?<7UqZMCOb+^I z82#aW^sm7L_;0BF1yWRw6jwRyL!&t$dNd1^$V)%p8UOLhxn=Q$n;1c=c0gGjQneGg zXFc?HCBQ#Nipt@EO@P>{XtWHQuap`qVgvpK%{(#Nr^jLNJ1B1iUoJQ^FmWw9^SdkH z{zr%wjK1o$J@~o-(2g}%McD<(pURBky3lugcDDQPLTCO#FMNm&{fJ((Q^2|C>hwXF za~%6x>}OSY+uKTLY}tpCOU;>r!SB)0eo%$tN@V4_1UTEZy`n!!06>D5OAJmk%68yB z(j830{m_2`sd^Ifl1mLI0#^LaI|cM1`kw1fA4YznRt%lQDb8l)F=orr|ou8yF39C%Rz03!Pho5vauEytlpzj>o4oA>_( X!;0d(@+JO%00000NkvXXu0mjf98dsq literal 0 HcmV?d00001 diff --git a/resources/img/logo48.png b/resources/img/logo48.png new file mode 100644 index 0000000000000000000000000000000000000000..d25219e4db5fefa7f431204a0d120b24328c707b GIT binary patch literal 1702 zcmV;X23h%uP)M!W z_;Ti+2#Nn?H2bW**7u*Y&pvzh8BtZf&N3GpAXj~3;9~0=0~cFgdjq~)6UZZns~zjC zSCu6wi!u6zSpCHH+4uFCy3Tw+de+b8IUvp9A~Q02KPvYCH6D@w2fM?L`d-rKs>ia& z^r(=j0bhN`&1!T9usnlq$Bf8*U zdy4#N!N-+_3G2FcuUEjdY1G#gyh~MHA@x%?Bltu)jiFxy&*L@4j+}ws11EK`vkTQ; z6?p^s^6$F)`E#=x@HZW~$*TEhA>q?8q5VgpYcHrfwdyg&Zq>bQ`==R@-*wJ6#cmL# zB4u^uHMcczcee0xISrv#5q_SO`g8|$w}S{QUx$=^8%EDU-@#G+{CE*CqQuY{@K0pzl^eujF_ z>rihk_KQuxzoWCzaK(CHX$A)JDm`;NC45wZE~%XZU{r2}*pGUHUY-4#D-Sw<4vYg= zZSsJR$u~FpY5WTyzAGV8p7oL|50dg#P`)a?*i*qM>cWb1FtM$okqdqWBBSV;ZWtSZ zx$}^PmEbS-?sH-vI@kqsFM+D>_Cef$%E^KQCrAgnp?eRwlarW=gDm?FT)vhW7YHZz zp?wFzSA?wmA^1y6AZEZC`PkSCGlnK+8x^E{6cx48#sh7@%wAdsKx6fJ<|t6Fc+bP^1s6i4|K2_20D>N zD<dt0%s?e62A{GH2$%pM0W@Bs);jC48E)i)I~pd z4SdB&-A|&xiJBcAV29fh_!T7FE!tM~xe>V&l9vYsfd>!=SyBt*!|35R(Sc*23T_0# z?|Q-aTihq(UuIiQzYO>b20s}A$M>P1eLP_*+U$bA7zx}m75=Z3h;;i8Z!_fJkG?oXTL%qn!L+H6vfI${q2A5w8b4n7!`Yn1#BK)id0OaAW1;$1i zLGR7jh#Nr<{23zSuwte&pOHp^*DY?dw$yz#jWgxe;#M542(EK5t5v8#wZyXnz^Ox5 zYWTlfnYZ+?)ctg4s&Eaza}CCcNaghhVpT2ZDKT`pc5Iint{I+{uMjV~<@*obCMtgu z_>q;blNAcV<(nAO>`A zTOYz(z;a`Uo}MWt8D2N*+uQ$_O|60qApqH2e}zQ&2=r1x|7eGYAJq?cjEFQFbK_8} z3J>NA4+S&;ARFs9h}FLW<-icI2dD<>@&OM8HUJmNO`SeF>u`?Z$Klz4=sSM^n3fw#QK+<;((r;@j|rah zfarjiTk!y*HCA`Q)46ZPLl2O~V~Z@Ky8+1^r6hz6CZOwP9hX&Y3#~ zpuA;l{e?a=b8j{ccrw6h2)-e3Z#E5O4|y5PhaeA;+4$d?G2JV*X<@IY=xz;=#+E6T zvESnwUOx!>cV|q`-Cj&^Eyi-}`@EFTfDU8q*~W6_0H=M37l$IBvU*B??xl`vK`Oe~ zJEdXhFt$^t>uXx{nZOZ)sl#UzfNx0Su|;kRyEZ`7nwuS;I8GVcsne$eZLtfwZr1Ur z2_2)1odnC6@47DQI;!ZDtk^`*VQi;9QG5(h6YBA`C&=AyOS&>ZzTb8OP?RN`VNZT2 za?lg1-R?iQ>j4#^Y*$RD(mna1NazWEm|!t`m#bW5L<3|6w%ucY3-D?}+HRi?KE4j8 zw5cxareH<`q_JhTH8uE8go5uvW-+1x)f(aj;j-d+#)GvAqLhP7`Lo?%mLrww+W4M8&@X6nNzAi}*M>FD5tx zaB?r&*#^m)E{n)U(;s?D|Ms)X!`c{XfUIeqV~MpNxX~kDU&Y7yxG`a%8$G%m`Y&Y) z)vjtS)7{VhJ1Ksm0rKF1LaTi2LD1P=i5jD~>-w1oyw-CAX>6Ho89Vjn$UrxGbQ|qEs?&x0ACgRxamT!!2<4GAo>x%JKnM;Ips)~izATpSA#?*Y=htHA25Zbzxkg#>3^ zZN~A$ZU`E@%rvRQPq{N~aXo!ddH-DjP+^tsdTs+G^Z>i3>fRiQ_a7l|;sIpRe4%8# z0TAWE*!8#pDtsw7Y<KXfra&mcMm?Jw6ANA@8;WJ+7ggt0~1%SNpp!A zbrBwj_gCobEQ4A7=P$k==Z$c*qY#S6}FJ; z51}r^$Drq1;lv)|!i!2H10#xdwMVwZ$S59x?}XRY{wnEO+D*|l!Q~3SMM%9FF;+C{+g)q6Wp;J z0qy(HGlwGay)J1zK;bpDoX7Q#!i+#ir=K3Qyk6slKCm!aH+NEPVKcpfJdJ+KMF zA*6gV%=|o_)?mhoyaL6;4yYO6oItyxZyKjyt3FqAaHMdfJ1DsVo9TzjJXJcrZ=#$J zwgPD34Xe20>%Vqg_dok9de)`F^_V`SATQm-rURj2b>JGQ^MPk`Fj1oDgFxV?@>t@1LKkuVEU+4th2N0vn+|-GR--$9G zK#)!B9{ao>eDZSONkm?W{!u53*L)#k*%ac@$A}1^`I?>P2Go_oVsyE6Vfcow6U~LVP6t zHSp_kseiZ>Eq*|h`+!=&K{%*JUeMj^cjUC~Yr%kg;(vwh@p%t~vgrT-002ovPDHLk FV1oPAMcV)X literal 0 HcmV?d00001 diff --git a/resources/img/logo96.png b/resources/img/logo96.png new file mode 100644 index 0000000000000000000000000000000000000000..24315b9d2ff672598d7fffb8767071d2323b5132 GIT binary patch literal 3382 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 M07*qoM6N<$f(93R0ssI2 literal 0 HcmV?d00001 diff --git a/resources/svg/.gitkeep b/resources/svg/.gitkeep new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/resources/svg/.gitkeep @@ -0,0 +1 @@ + diff --git a/resources/logo.svg b/resources/svg/logo.svg similarity index 100% rename from resources/logo.svg rename to resources/svg/logo.svg diff --git a/resources/svg2img.ps1 b/resources/svg2img.ps1 new file mode 100644 index 0000000..5048abb --- /dev/null +++ b/resources/svg2img.ps1 @@ -0,0 +1,149 @@ +$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path +$svgDir = Join-Path $scriptDir "svg" +$outDir = Join-Path $scriptDir "img" +$logoSvg = Join-Path $scriptDir "logo.svg" +$sizes = @(16, 32, 64) +$logoSizes = @(16, 32, 48, 64, 96, 128) +$themes = @{ + "light" = "#000000" + "dark" = "#ffffff" +} +$inkscapeCmd = @() +$tmpRoot = if (Test-Path -Path "/tmp") { "/tmp" } else { [System.IO.Path]::GetTempPath() } +$tempDir = Join-Path $tmpRoot ("psitransfer-filelink-svg2img-" + [guid]::NewGuid().ToString()) +$tempSvg = Join-Path $tempDir "themed-icon.svg" + +if (!(Test-Path -Path $outDir)) { + New-Item -ItemType Directory -Path $outDir | Out-Null +} + +if (!(Test-Path -Path $svgDir)) { + New-Item -ItemType Directory -Path $svgDir | Out-Null +} + +if (!(Test-Path -Path $tempDir)) { + New-Item -ItemType Directory -Path $tempDir | Out-Null +} + +function Remove-TempFiles { + if (Test-Path -Path $tempDir) { + Remove-Item -Path $tempDir -Recurse -Force + } +} + +function Resolve-InkscapeCommand { + $nativeInkscape = Get-Command "inkscape" -ErrorAction SilentlyContinue + if ($nativeInkscape) { + return @($nativeInkscape.Source) + } + + $flatpak = Get-Command "flatpak" -ErrorAction SilentlyContinue + if ($flatpak) { + & $flatpak.Source info org.inkscape.Inkscape *> $null + if ($LASTEXITCODE -eq 0) { + return @( + $flatpak.Source, + "run", + "--filesystem=$scriptDir", + "--filesystem=/tmp", + "--command=inkscape", + "org.inkscape.Inkscape" + ) + } + } + + throw "Inkscape CLI is not installed or not in PATH, and Flatpak Inkscape (org.inkscape.Inkscape) was not found." +} + +function Export-Png { + param ( + [string] $InputSvg, + [string] $OutFile, + [int] $Size + ) + + Write-Host "Exporting $OutFile..." + Invoke-Inkscape @( + $InputSvg, + "--export-type=png", + "--export-filename=$OutFile", + "--export-width=$Size", + "--export-height=$Size", + "--actions=export-do" + ) +} + +function Invoke-Inkscape { + param ( + [string[]] $Arguments + ) + + & $inkscapeCmd[0] @($inkscapeCmd | Select-Object -Skip 1) @Arguments +} + +function Inject-Color { + param ( + [string] $Original, + [string] $Color + ) + + $content = Get-Content $Original -Raw + + if ($content -match ']*>') { + $patched = $content -replace ']*?)>', "" + Set-Content -Path $tempSvg -Value $patched + } + else { + throw "Couldn't find tag to patch." + } +} + +try { + $inkscapeCmd = Resolve-InkscapeCommand + + if (Test-Path -Path $logoSvg) { + foreach ($size in $logoSizes) { + Export-Png -InputSvg $logoSvg -OutFile (Join-Path $outDir "logo$size.png") -Size $size + } + + Export-Png -InputSvg $logoSvg -OutFile (Join-Path $outDir "logo.png") -Size 512 + } + else { + Write-Warning "Logo source not found: $logoSvg" + } + + $svgFiles = Get-ChildItem -Path $svgDir -Filter *.svg -ErrorAction SilentlyContinue + + if (-not $svgFiles) { + Write-Host "No themed SVG icons found in $svgDir. Logo exports completed." + exit 0 + } + + foreach ($svgFile in $svgFiles) { + $svgPath = $svgFile.FullName + $baseName = $svgFile.BaseName + + foreach ($theme in $themes.Keys) { + $color = $themes[$theme] + Inject-Color -Original $svgPath -Color $color + + foreach ($size in $sizes) { + $outFile = Join-Path $outDir "$baseName-$theme-$size.png" + Write-Host "Exporting $outFile (color $color)..." + Invoke-Inkscape @( + $tempSvg, + "--export-type=png", + "--export-filename=$outFile", + "--export-width=$size", + "--export-height=$size", + "--actions=export-do" + ) + } + } + } + + Write-Host "Done generating logo PNGs and light/dark themed icon PNGs." +} +finally { + Remove-TempFiles +} diff --git a/resources/svg2img.sh b/resources/svg2img.sh new file mode 100755 index 0000000..02f9061 --- /dev/null +++ b/resources/svg2img.sh @@ -0,0 +1,144 @@ +#!/usr/bin/env bash +set -euo pipefail + +script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +svg_dir="$script_dir/svg" +out_dir="$script_dir/img" +logo_svg="$script_dir/logo.svg" +sizes=(16 32 64) +logo_sizes=(16 32 48 64 96 128) +themes=(light dark) +inkscape_cmd=() +temp_dir="" + +cleanup() { + if [[ -n "$temp_dir" && -d "$temp_dir" ]]; then + rm -rf "$temp_dir" + fi +} + +trap cleanup EXIT + +get_theme_color() { + case "$1" in + light) printf '%s\n' '#000000' ;; + dark) printf '%s\n' '#ffffff' ;; + *) + printf 'Unknown theme: %s\n' "$1" >&2 + exit 1 + ;; + esac +} + +ensure_temp_svg() { + local input_svg="$1" + local color="$2" + local temp_svg="$3" + + python3 - "$input_svg" "$color" "$temp_svg" <<'PY' +import pathlib +import re +import sys + +input_path = pathlib.Path(sys.argv[1]) +color = sys.argv[2] +output_path = pathlib.Path(sys.argv[3]) +content = input_path.read_text(encoding="utf-8") +patched, count = re.subn(r"]*?)>", f'', content, count=1) +if count != 1: + raise SystemExit("Couldn't find tag to patch.") +output_path.write_text(patched, encoding="utf-8") +PY +} + +export_png() { + local input_svg="$1" + local out_file="$2" + local size="$3" + + echo "Exporting $out_file..." + "${inkscape_cmd[@]}" "$input_svg" \ + --export-type=png \ + --export-filename="$out_file" \ + --export-width="$size" \ + --export-height="$size" \ + --actions=export-do +} + +resolve_inkscape_cmd() { + if command -v inkscape >/dev/null 2>&1; then + inkscape_cmd=(inkscape) + return 0 + fi + + if command -v flatpak >/dev/null 2>&1; then + if flatpak info org.inkscape.Inkscape >/dev/null 2>&1; then + inkscape_cmd=( + flatpak + run + --filesystem="$script_dir" + --filesystem=/tmp + --command=inkscape + org.inkscape.Inkscape + ) + return 0 + fi + fi + + echo "Inkscape CLI is not installed or not in PATH, and Flatpak Inkscape (org.inkscape.Inkscape) was not found." >&2 + exit 1 +} + +mkdir -p "$out_dir" "$svg_dir" + +if ! command -v python3 >/dev/null 2>&1; then + echo "python3 is required to patch the SVG color attribute." >&2 + exit 1 +fi + +resolve_inkscape_cmd +temp_dir="$(mktemp -d "/tmp/psitransfer-filelink-svg2img.XXXXXX")" + +if [[ -f "$logo_svg" ]]; then + for size in "${logo_sizes[@]}"; do + export_png "$logo_svg" "$out_dir/logo${size}.png" "$size" + done + + # Keep a generic logo export for docs/UI usage. + export_png "$logo_svg" "$out_dir/logo.png" 512 +else + echo "Logo source not found: $logo_svg" >&2 +fi + +shopt -s nullglob +svg_files=("$svg_dir"/*.svg) +shopt -u nullglob + +if [[ ${#svg_files[@]} -eq 0 ]]; then + echo "No themed SVG icons found in $svg_dir. Logo exports completed." + exit 0 +fi + +temp_svg="$temp_dir/themed-icon.svg" + +for svg_path in "${svg_files[@]}"; do + base_name="$(basename "${svg_path%.svg}")" + + for theme in "${themes[@]}"; do + color="$(get_theme_color "$theme")" + ensure_temp_svg "$svg_path" "$color" "$temp_svg" + + for size in "${sizes[@]}"; do + out_file="$out_dir/$base_name-$theme-$size.png" + echo "Exporting $out_file (color $color)..." + "${inkscape_cmd[@]}" "$temp_svg" \ + --export-type=png \ + --export-filename="$out_file" \ + --export-width="$size" \ + --export-height="$size" \ + --actions=export-do + done + done +done + +echo "Done generating logo PNGs and light/dark themed icon PNGs."