From dfd32699280c0730c330aeaaf93e2b573badef1e Mon Sep 17 00:00:00 2001 From: Ly-sec Date: Mon, 10 Nov 2025 20:25:41 +0100 Subject: [PATCH] ControlCenter: add proper shader for distro logo --- Modules/Bar/Widgets/ControlCenter.qml | 2 +- Shaders/frag/appicon_colorize.frag | 17 ++++++++++++++--- Shaders/qsb/appicon_colorize.frag.qsb | Bin 1957 -> 2364 bytes 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/Modules/Bar/Widgets/ControlCenter.qml b/Modules/Bar/Widgets/ControlCenter.qml index 11daae134..02dbff042 100644 --- a/Modules/Bar/Widgets/ControlCenter.qml +++ b/Modules/Bar/Widgets/ControlCenter.qml @@ -80,7 +80,7 @@ NIconButton { layer.enabled: useDistroLogo && colorizeDistroLogo layer.effect: ShaderEffect { property color targetColor: Settings.data.colorSchemes.darkMode ? Color.mOnSurface : Color.mSurfaceVariant - property real colorizeMode: 1.0 + property real colorizeMode: 2.0 fragmentShader: Qt.resolvedUrl(Quickshell.shellDir + "/Shaders/qsb/appicon_colorize.frag.qsb") } diff --git a/Shaders/frag/appicon_colorize.frag b/Shaders/frag/appicon_colorize.frag index ae108701c..7cd28240f 100644 --- a/Shaders/frag/appicon_colorize.frag +++ b/Shaders/frag/appicon_colorize.frag @@ -6,7 +6,7 @@ layout(std140, binding = 0) uniform buf { mat4 qt_Matrix; float qt_Opacity; vec4 targetColor; - float colorizeMode; // 0.0 = dock mode (grayscale), 1.0 = tray mode (intensity) + float colorizeMode; // 0.0 = dock mode (grayscale), 1.0 = tray mode (intensity), 2.0 = distro mode (luminance with better contrast) } ubuf; void main() { @@ -17,13 +17,24 @@ void main() { if (ubuf.colorizeMode < 0.5) { // Dock mode: Convert to grayscale using proper luminance weights intensity = dot(tex.rgb, vec3(0.299, 0.587, 0.114)); - } else { + } else if (ubuf.colorizeMode < 1.5) { // Tray mode: Use the maximum RGB channel value as intensity intensity = max(max(tex.r, tex.g), tex.b); // Normalize intensity to make all icons more uniform intensity = smoothstep(0.1, 0.9, intensity); - } + } else { + // Distro mode: Brightness boost with proper alpha handling + float maxChannel = max(max(tex.r, tex.g), tex.b); + + intensity = maxChannel * 1.5; + intensity = min(intensity, 1.0); + intensity = intensity * 0.7 + 0.3; + + intensity = intensity * tex.a; + + fragColor = vec4(ubuf.targetColor.rgb * intensity, tex.a) * ubuf.qt_Opacity; +} fragColor = vec4(ubuf.targetColor.rgb * intensity, tex.a) * ubuf.qt_Opacity; } diff --git a/Shaders/qsb/appicon_colorize.frag.qsb b/Shaders/qsb/appicon_colorize.frag.qsb index 15618b86dc21605375f53137209ccf520f623aa7..78f260bfa91ad90880d3962bf5947cc4379a2980 100644 GIT binary patch literal 2364 zcmV-C3B&dP04Sk&ob6g$bKAxhUfpY2x!X$IvyONhF-RWj;S z@GParbBUW9%P?!w>w{rstw7-s<} zwZTM{D<-LI0|zM{^%|wSQrN`TLxYoJX#XtKewWaf;EAKhv!H_a_iwG-$^>C8W9D%= zu;^u`|?*o`S zPxuHQk3{1!CZ30iP10Rr1BA^f*dSrc3N}R8eTwH*ikB&4HQse4-dDilAeSHFcCbGI zJuJEg?NyK;qlYlev0C+iGo`dE%P88QNxAu!@ zyaFwk%SGdlpndhF$P4Y?Q|k9K>W@+ValEe71?&B(^4u%bA5-QZQ2Yg0`-7}YO=#n9 zfQ*oBT%%_cU-(QWW8(!H&%hYh;`2tGFVi~v7_6e)D8R_N)>+&Kc0=$+khZvCesl-BfHB z2$wP?k|`=OWx~gy0yv(cJd>nfR`jou{-$M2CI z=7jrWj%1|ndsNpf(b-hpSHwc$9@At|51HxtOH1CR4d`SmRcw4rHe?-sN_DuW$b3S$^s`2KpC~rh$OiJweJ1w7r>wj8EW+j9+aL@ZW8J+c zeO4*1FTf_s*GQ+T#A^46)gk;g#ad_GmmZ025;mYkZ2B zf#SPK_!q==Ewa(1I;|6?uJbJG<&%p_9lbtv+#+1o@gZSb`_$2o)iEF)U#Vl*r;csH zWqlrzu3E>(gsFAx5T@2~oAe*kd|RpGPMW13_ePmZnEwuc)9nO0V&sSxu2)H};qF1x06T9H3-Etkz zZ=xry4L=Gb;t8zgR>StQ3tHf{{VJ#>9$Egj+p43dEV^H{JM*6B*L0lo+?s~P0!?0TtN8ZqEZta*1RwY zPBWeDoiqlLOX`_yxm3o>ESGaxyrdcfJb7j4d&8H~zUH)q~0y`elKH(cO{9f^R8cnN{#Ku!eV;M8sDRJK+ z*ZtIjrssv5L1=G5+6D!0m}T8CAhU9=WEKngg2+zPq+Bc*`I2E~^-{TH=CCG_LB-K- z)QfW6n}B$Z5cd40)oR&||2z-H#$_zo0g|xpqH!8z^#jayCBdwoDToS`N_w%Z7Y*Gs z%UN6&DeWDY%~AD?GOU?wshrR2MO+#CnZL|ed**TPe7#Y*;al|uE40@1b%+5shgccP zj>Y8)At{M)Qz^i>XnehfGxKN;M0%37zab;??&tQBLe z-zcp0+b(P6PcCb@t$u{%wL{_6fr^pOBazrCg`HB^|09J(`{bKquVZ!4OI-Lho9z1jE;Y*)h3~O2lTM2EHD6juY5nvf9f4 zQk24p$(pJx*;UevN$2-k?%9dG(uI_u$W{5qbyawoB|cQM4Ke5yL6|F{71~-w2vvwh zRp9`If#R*ut%_LUjH=G{(kdMcE6X?U+^x*}UJz7nwzk?K)w+*0@Vt8c-u%+iodsPa z)W^nBJB%4o+=7LbyOmX5Rx-ia9R(^q6i=Fhr0pJO4fXI|uXszTq5x0Ej)4j8oSk z3|)DaBj6ZZz#*`gFU0%Z9xl>=zUp?x#lB>Q9!8o`B{IF#Cu1jK5kMc;!h**KLP$k2 zJ?VG(6Xkpx=)4s(u&bVN_^*KD-7{|FFOzPo+GyjBZQ7yLs03lH;cm<(x_IC=Ygh0m zvpEZ|&;fqix2&ceKml!yYxVn!)aXP!(yP6s*Q37NlRL~x$4vL*_q8>yo77Y5>wPrc z)&Zx>+FCn+Gp*rOTU~WD-LzYZYtc(egRtm8Q?7#b^)y7^f?IUF6sYisgzLdeMzS4^+K05c?%%cP=@Dj6NN8STk#Z=Ka+Oz0;SqsWVyZ}ZFL z@I&n6e!DnU5Kc`Y@ppUw>)$cQkkiq>X~@M1|FZGo)Z0CIj`REG8*)P@gC`CIJP}4X iMbKwY?9)g5hd{jg{P(oj5ptj`qj6k^U;hTtD4d`a4AX}I literal 1957 zcmV;W2U_?502|48ob6fNbKAxdU-3hfVK+`3N4A?bIa^5zIw}M3o1#fMk?h#16*-Y6 z?F>i5KqNq;B>@IFIFvJb?pvQao#|`;iv9(8O8b^SBCmOA+L=x}d$%BukSwc7C!+`7 z3<>Pse*AWCZ*d?2;2Z#C0AK+CuEJ-)p$ofU!vr?K2Ok3Hg8=|30D%9{fMW(4xC9Oa zV8K8r4~4ok|4h|I*oO!l09b-(df!*1(99)5xCIt)2*8C20Gua@+lusy@y%sY*@iJ# z&;u7Z9FWu7F}mbf1`ZYkFaR6)kzgLG_SJC}dQ(vso`4No;6op5^7rY}{Hd9^03rAg zK>$6Ws8iZ-?gx)Wx+;myy^&6>zfi7VIlv2$ zo+7>oIT03qMwaVIeSo&eQ(EwIXah3v69BkQdNF;2d?Jl{uTAMRyh62i4>IB&M^@0; zDV?MBPABz5%Va*A>{6u%hH8+4ym^nL*VzhC}yJEnC2_{*K;^_b2Bz}J&+TC1=q^ly@mPIHL& zmxLF`+e8-}~a2#hH<7g4)9OVn?wh{;CXI)vR+jO5( z{M}8+ZxNmev|NT z!;)CPw}|(qvNtgPKSGx3Ny^+LtSiL(C!~Z=w7*K&F&FQU{eptsAbu=UBpFkYDG~ny z3=};_mtZFkYe0Yd~XvUG3V$R@PPQ3w>I(q4GU10-8Vzewgq~A zQcF&KxANEyLf7}0X&Bl#uzRkc9=U@@W9AHfi#Lz3U5__4E#yJe<7_{2v@bNq7#mr< z%s%7YEsF>4q$zm90y4M9R?p=JlKa^1l^M5!fz3Dkp&zKSJ!H5~>@B}H#P0C6&$$U06i7a{jNRP@cp1~;GFOF8RkRJ z6LN{ip0E~v^C+;3o4T~MI;Wjik-8qYy>J?o>o6VR71RjWEoKxdc_AQu3DH=SwOHTh zI=3f<$-$FV1X9wCLa|YA;3zj5rJ~WOm+JLu&8*idt7xrWGYrEpi={@bR;`+5saQ9Q zV#+kjIAs_{rBOA?)pEI3tCSi>wOGj$^h5D&4@3I|Oe1Te<453H#herl^78tG>?Bpf zk?-?IA-Bi6Q7{RGS#B7nSvAc@sa~#CD^&?o2G^)n%}U)Y7ma$OUM^v9Q-gD02gB~& zz#42?-0B#6tRJJTF1vQ<+>qOWzHh{Z68N8YN7irsKvr#eQWieC)ADC)Y;5&@=Q~blbGBf1 z+fEe@QCJJP#oeC7lH7vo-26VIPO|gx{>PtmHv&HlyZ60u#3|RuSYvB!_s(xNwzogt zG-N=>*w~JE!ieIQt+Aa?y1OE+WJ0t96zIE+#1+j7w_X5 znycNGDp8oLCHAAwY1<1LJFyz!d&>XohCY$&7;6e7&uhBA^xZm|Hy{q#TD1< z4I?bjk$rEnY41GMsUhBo zr#&~2JB-S}NT1dTIvt^_8~MGxV>Dgwgg(^iM4=t%L%-+E)Y0_F_7vChPLB;T*JGVd zTm^f3tE}gHA-6n{oVP^%u}()mgaj^8oT6j*WyhX2>`o^>sYtoFH_Pdr(Rhdv5?9E? zML9!~{Afz2`bs$k*1e+s*FI#u3R+Zv9#3`@RPy rrDgcCQ(&veirS%*Q{wa_|2V^O%-=YP-g2UB{KH#PM~wdh_)P1Oa0Tkw