Impl identicons serverside, broken though for some reason
Some checks are pending
/ test (push) Waiting to run
Some checks are pending
/ test (push) Waiting to run
This commit is contained in:
parent
da2a89010c
commit
f2616c041b
3 changed files with 430 additions and 0 deletions
112
shared/identicon/shape.go
Normal file
112
shared/identicon/shape.go
Normal file
|
@ -0,0 +1,112 @@
|
|||
package identicon
|
||||
|
||||
import (
|
||||
"math"
|
||||
|
||||
"git.mstar.dev/mstar/canvas"
|
||||
mathutils "git.mstar.dev/mstar/goutils/math"
|
||||
)
|
||||
|
||||
type shape struct {
|
||||
canvas *canvas.Canvas
|
||||
hash int
|
||||
primary string
|
||||
secondary string
|
||||
pos vec2
|
||||
scale float64
|
||||
cellSize int
|
||||
strokeColor string
|
||||
}
|
||||
|
||||
func (s *shape) GetColor() string {
|
||||
if mathutils.Abs(s.hash) == 0 {
|
||||
return s.primary
|
||||
} else {
|
||||
return s.secondary
|
||||
}
|
||||
}
|
||||
|
||||
func (s *shape) MakePath() {
|
||||
mod := mathutils.Abs(s.hash+1) % 4
|
||||
switch mod {
|
||||
case 0:
|
||||
// square
|
||||
s.canvas.BeginPath()
|
||||
s.canvas.MoveTo(float64(s.pos.X), float64(s.pos.Y))
|
||||
s.canvas.LineTo(float64(s.pos.X+float64(s.cellSize/2)), float64(s.pos.Y))
|
||||
s.canvas.LineTo(
|
||||
float64(s.pos.X+float64(s.cellSize/2)),
|
||||
float64(s.pos.Y-float64(s.cellSize/2)),
|
||||
)
|
||||
s.canvas.LineTo(float64(s.pos.X), float64(s.pos.Y-float64(s.cellSize/2)))
|
||||
s.canvas.ClosePath()
|
||||
case 1:
|
||||
// circle
|
||||
s.canvas.BeginPath()
|
||||
s.canvas.Arc(
|
||||
float64(s.pos.X)+float64(s.cellSize)/math.Pi-5,
|
||||
float64(s.pos.Y)-float64(s.cellSize)/math.Pi+5,
|
||||
float64(s.cellSize)/3,
|
||||
0,
|
||||
math.Pi*2,
|
||||
true,
|
||||
)
|
||||
case 2:
|
||||
// triangle
|
||||
s.canvas.BeginPath()
|
||||
s.canvas.MoveTo(float64(s.pos.X), float64(s.pos.Y))
|
||||
s.canvas.LineTo(float64(s.pos.X)+float64(s.cellSize)*0.65, float64(s.pos.Y))
|
||||
s.canvas.LineTo(float64(s.pos.X), float64(s.pos.Y)-float64(s.cellSize)*0.65)
|
||||
s.canvas.ClosePath()
|
||||
case 3:
|
||||
// oval
|
||||
s.canvas.BeginPath()
|
||||
s.canvas.MoveTo(
|
||||
float64(s.pos.X)-float64(s.cellSize)*0.2,
|
||||
float64(s.pos.Y)+float64(s.cellSize)*0.2,
|
||||
)
|
||||
s.canvas.QuadraticCurveTo(
|
||||
float64(s.pos.X)+float64(s.cellSize)*0.4,
|
||||
float64(s.pos.Y),
|
||||
float64(s.pos.X)+float64(s.cellSize)*0.5,
|
||||
float64(s.pos.Y)-float64(s.cellSize)*0.5,
|
||||
)
|
||||
s.canvas.MoveTo(
|
||||
float64(s.pos.X)+float64(s.cellSize)*0.5,
|
||||
float64(s.pos.Y)-float64(s.cellSize)*0.5,
|
||||
)
|
||||
s.canvas.QuadraticCurveTo(
|
||||
float64(s.pos.X),
|
||||
float64(s.pos.Y)-float64(s.cellSize)*0.4,
|
||||
float64(s.pos.X)-float64(s.cellSize)*0.2,
|
||||
float64(s.pos.Y)+float64(s.cellSize)*0.2,
|
||||
)
|
||||
default:
|
||||
// square
|
||||
s.canvas.BeginPath()
|
||||
s.canvas.MoveTo(float64(s.pos.X), float64(s.pos.Y))
|
||||
s.canvas.LineTo(float64(s.pos.X+float64(s.cellSize/2)), float64(s.pos.Y))
|
||||
s.canvas.LineTo(
|
||||
float64(s.pos.X+float64(s.cellSize/2)),
|
||||
float64(s.pos.Y-float64(s.cellSize/2)),
|
||||
)
|
||||
s.canvas.LineTo(float64(s.pos.X), float64(s.pos.Y-float64(s.cellSize/2)))
|
||||
s.canvas.ClosePath()
|
||||
}
|
||||
}
|
||||
|
||||
func (s *shape) Draw(hasStroke bool, strokeWeight int) {
|
||||
color := s.GetColor()
|
||||
// THIS SHIT ISN'T IMPLEMENTED! I hope it will work regardless
|
||||
// s.canvas.SetGlobalCompositeOperation("source-over")
|
||||
s.MakePath()
|
||||
s.canvas.SetFillStyle(color)
|
||||
s.canvas.SetStrokeStyle(s.strokeColor)
|
||||
s.canvas.SetLineWidth(s.scale * (4 / 5 * float64(strokeWeight)) / float64(canvasSize))
|
||||
s.canvas.SetLineJoin(canvas.Round)
|
||||
s.canvas.SetLineCap(canvas.Round)
|
||||
s.canvas.Fill()
|
||||
if hasStroke {
|
||||
s.canvas.Stroke()
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue