Skip to content

Commit f446e69

Browse files
authored
new serverpic art styles (#9)
1 parent da4add2 commit f446e69

File tree

7 files changed

+105
-10
lines changed

7 files changed

+105
-10
lines changed

.github/workflows/pull.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ jobs:
88
- name: Set up Go
99
uses: actions/setup-go@master
1010
with:
11-
go-version: 1.19
11+
go-version: 1.24
1212

1313
- name: Check out code into the Go module directory
1414
uses: actions/checkout@master

.github/workflows/push.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ jobs:
88
- name: Set up Go
99
uses: actions/setup-go@master
1010
with:
11-
go-version: 1.19
11+
go-version: 1.24
1212

1313
- name: Check out code into the Go module directory
1414
uses: actions/checkout@master

.golangci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ run:
6262
tests: false
6363
skip-dirs:
6464
- order
65-
go: '1.20'
65+
go: '1.24'
6666

6767
# output configuration options
6868
output:

config.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,14 @@ func (t *Title) Sum64() uint64 {
6060
type Alignment uint8
6161

6262
const (
63-
NilAlign Alignment = iota // NilAlign ..
64-
AlignLeft // AlignLeft 左对齐
65-
AlignCenter // AlignCenter 居中对齐
66-
AlignRight // AlignRight 右对齐
63+
// NilAlign 默认
64+
NilAlign Alignment = iota
65+
// AlignLeft 左对齐
66+
AlignLeft
67+
// AlignCenter 居中对齐
68+
AlignCenter
69+
// AlignRight 右对齐
70+
AlignRight
6771
)
6872

6973
// Card 卡片配置

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
module github.com/FloatTech/rendercard
22

3-
go 1.20
3+
go 1.24.2
44

55
require (
66
github.com/FloatTech/floatbox v0.0.0-20240505082030-226ec6713e14

logo.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,23 @@ func RenderServerListLogo(fontdata []byte) (img image.Image, err error) {
6262
canvas.DrawImage(strokedimg, -3, 3)
6363
canvas.DrawImage(coloredimg, 0, 0)
6464

65+
shadowcanvas := gg.NewContext(w, h)
66+
67+
err =shadowcanvas.SetMask(canvas.AsMask())
68+
if err != nil {
69+
return
70+
}
71+
shadowcanvas.DrawRectangle(0, 0, float64(shadowcanvas.W()), float64(shadowcanvas.H()))
72+
shadowcanvas.SetRGBA255(0, 0, 0, 255)
73+
shadowcanvas.Fill()
74+
75+
err =canvas.SetMask(canvas.AsMask())
76+
if err != nil {
77+
return
78+
}
79+
canvas.InvertMask()
80+
canvas.DrawImage(shadowcanvas.Image(), 3, 4)
81+
6582
img = canvas.Image()
6683
return
6784
}

serverpic.go

Lines changed: 76 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ package rendercard
22

33
import (
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

Comments
 (0)