@@ -2,6 +2,8 @@ package rendercard
22
33import (
44 "image"
5+ "image/color"
6+ "math/rand"
57 "sync"
68
79 "github.com/FloatTech/floatbox/math"
@@ -135,15 +137,63 @@ func renderinfocards(torussd, glowsd []byte, plugininfos []*PluginInfo) (img ima
135137 beginw , beginh := 24.0 , 0.0
136138 for i := 0 ; i < cardnum ; i ++ {
137139 canvas .SetRGBA255 (204 , 51 , 51 , 255 )
138- if plugininfos [i ].Status {
140+ fade := gg .NewLinearGradient (beginw + 10 , 0 , beginw + cardw - 10 , 0 )
141+ fade .AddColorStop (1 , color.NRGBA {204 , 51 , 51 , 255 })
142+ fade .AddColorStop (0.8 , color.NRGBA {204 , 51 , 51 , 191 })
143+ fade .AddColorStop (0.7 , color.NRGBA {204 , 51 , 51 , 63 })
144+ fade .AddColorStop (0.6 , color.NRGBA {204 , 51 , 51 , 0 })
145+ fade .AddColorStop (0 , color.NRGBA {204 , 51 , 51 , 0 })
146+ statusimage := drawEnableOrDisableImage (false )
147+
148+ if plugininfos [i ].Status && rand .Intn (2 ) == 0 {
139149 canvas .SetRGBA255 (136 , 178 , 0 , 255 )
150+ fade = gg .NewLinearGradient (beginw + 10 , 0 , beginw + cardw - 10 , 0 )
151+ fade .AddColorStop (1 , color.NRGBA {136 , 178 , 0 , 255 })
152+ fade .AddColorStop (0.8 , color.NRGBA {136 , 178 , 0 , 191 })
153+ fade .AddColorStop (0.7 , color.NRGBA {136 , 178 , 0 , 63 })
154+ fade .AddColorStop (0.6 , color.NRGBA {136 , 178 , 0 , 0 })
155+ fade .AddColorStop (0 , color.NRGBA {136 , 178 , 0 , 0 })
156+ statusimage = drawEnableOrDisableImage (true )
140157 }
158+
159+ canvas .DrawRoundedRectangle (beginw + 10 , beginh , cardw - 10 , cardh , 16 )
160+ canvas .Clip ()
161+ canvas .InvertMask ()
162+
141163 canvas .DrawRoundedRectangle (beginw , beginh , cardw / 2 , cardh , 16 )
142164 canvas .Fill ()
143165
144- canvas .SetRGBA255 (34 , 26 , 33 , 255 )
166+ canvas .ResetClip ()
167+
168+ canvas .SetRGBA255 (255 , 255 , 255 , 217 )
145169 canvas .DrawRoundedRectangle (beginw + 10 , beginh , cardw - 10 , cardh , 16 )
170+ canvas .FillPreserve ()
171+ canvas .SetFillStyle (fade )
146172 canvas .Fill ()
173+ canvas .SetFillStyle (nil )
174+
175+ alphacanvas := gg .NewContext (w , h )
176+ alphacanvas .SetRGBA255 (255 , 255 , 255 , 93 )
177+ alphacanvas .Clear ()
178+
179+ err = canvas .SetMask (alphacanvas .AsMask ())
180+ if err != nil {
181+ return
182+ }
183+ canvas .DrawImageAnchored (statusimage , int (beginw + cardw )- 10 - 5 , int (beginh + cardh / 2 ), 1 , 0.5 )
184+ canvas .ResetClip ()
185+
186+ err = canvas .SetMask (alphacanvas .AsMask ())
187+ if err != nil {
188+ return
189+ }
190+ canvas .DrawRoundedRectangle (beginw + 10 , beginh , cardw - 10 , cardh , 16 )
191+ canvas .Clip ()
192+ canvas .DrawCircle (beginw + cardw - 10 - 5 - 50 / 2 , beginh + cardh / 2 , float64 (cardh - 10 )/ 2 )
193+ canvas .SetLineWidth (50 * 0.185 )
194+ canvas .Stroke ()
195+ canvas .ResetClip ()
196+
147197 beginw += cardw + spacingw
148198 if (i + 1 )% 3 == 0 {
149199 beginw = spacingw
@@ -181,3 +231,27 @@ func renderinfocards(torussd, glowsd []byte, plugininfos []*PluginInfo) (img ima
181231 img = canvas .Image ()
182232 return
183233}
234+
235+ func drawEnableOrDisableImage (status bool ) image.Image {
236+ dc := gg .NewContext (50 , 50 )
237+ dcwf , dchf := float64 (dc .W ()), float64 (dc .H ())
238+ fac := 0.185
239+ if status {
240+ dc .RotateAbout (gg .Radians (- 45 ), dcwf / 2 , dchf / 2 )
241+ dc .DrawRectangle (dcwf * fac + dcwf * fac / 2 , (dchf - dchf / 2 )/ 2 - 1 , dcwf , dcwf / 2 - dcwf * fac )
242+ dc .Clip ()
243+ dc .InvertMask ()
244+ dc .DrawRectangle (dcwf * fac / 2 , (dchf - dchf / 2 )/ 2 , dcwf - dcwf * fac , dchf / 2 )
245+ dc .SetRGBA255 (255 , 255 , 255 , 255 )
246+ dc .Fill ()
247+ dc .ResetClip ()
248+ return dc .Image ()
249+ }
250+ dc .RotateAbout (gg .Radians (- 45 ), dcwf / 2 , dchf / 2 )
251+ dc .DrawRectangle ((dcwf - dcwf * fac )/ 2 , 0 , dcwf * fac , dchf )
252+ dc .SetRGBA255 (255 , 255 , 255 , 255 )
253+ dc .Fill ()
254+ dc .DrawRectangle (0 , (dcwf - dcwf * fac )/ 2 , dchf , dcwf * fac )
255+ dc .Fill ()
256+ return dc .Image ()
257+ }
0 commit comments