diff --git a/chess/board.go b/chess/board.go index 10ae061..80acd25 100644 --- a/chess/board.go +++ b/chess/board.go @@ -12,6 +12,7 @@ import ( "golang.org/x/image/font" "golang.org/x/image/font/basicfont" + "golang.org/x/image/font/opentype" "golang.org/x/image/math/fixed" ) @@ -197,11 +198,17 @@ func drawCoordinate(img *image.RGBA, x, y int, flipped bool) { } else if !flipped { color = Light } - // TODO: use SN font and make it bold + + face, err := loadFontFace("lightningvolt.ttf") + if err != nil { + log.Printf("error loading font: %v\n", err) + face = basicfont.Face7x13 + } + d := &font.Drawer{ Dst: img, Src: image.NewUniform(color), - Face: basicfont.Face7x13, + Face: face, Dot: origin, } d.DrawString(s) @@ -214,11 +221,36 @@ func drawCoordinate(img *image.RGBA, x, y int, flipped bool) { } if row != "" { - origin = fixed.P((x+1)*128-12, y*128+15) + origin = fixed.P((x+1)*128-20, y*128+23) drawString(row, origin) } } +func loadFontFace(path string) (font.Face, error) { + fontBytes, err := os.ReadFile(path) + if err != nil { + return nil, err + } + + ttfFont, err := opentype.Parse(fontBytes) + if err != nil { + return nil, err + } + + faceOptions := &opentype.FaceOptions{ + Size: 32, + DPI: 72, + Hinting: font.HintingNone, + } + + fontFace, err := opentype.NewFace(ttfFont, faceOptions) + if err != nil { + return nil, err + } + + return fontFace, nil +} + func (b *Board) SetPiece(name PieceName, color Color, position string) error { var ( piece *Piece diff --git a/go.mod b/go.mod index 26c32c8..6391a77 100644 --- a/go.mod +++ b/go.mod @@ -12,6 +12,7 @@ require ( require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect + golang.org/x/text v0.18.0 // indirect gopkg.in/guregu/null.v4 v4.0.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 7870f31..3691bec 100644 --- a/go.sum +++ b/go.sum @@ -10,6 +10,8 @@ github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsT github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= golang.org/x/image v0.20.0 h1:7cVCUjQwfL18gyBJOmYvptfSHS8Fb3YUDtfLIZ7Nbpw= golang.org/x/image v0.20.0/go.mod h1:0a88To4CYVBAHp5FXJm8o7QbUl37Vd85ply1vyD8auM= +golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224= +golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/guregu/null.v4 v4.0.0 h1:1Wm3S1WEA2I26Kq+6vcW+w0gcDo44YKYD7YIEJNHDjg= diff --git a/lightningvolt.ttf b/lightningvolt.ttf new file mode 100644 index 0000000..242a25f Binary files /dev/null and b/lightningvolt.ttf differ