diff options
| author | Sam Anthony <sam@samanthony.xyz> | 2024-05-09 17:32:54 -0400 |
|---|---|---|
| committer | Sam Anthony <sam@samanthony.xyz> | 2024-05-09 17:32:54 -0400 |
| commit | d463bb90ad629dfc8f1cd4f4b6b9590b0008832d (patch) | |
| tree | bf8763649c6a2f1af1fe46821216e327c094dcfa /gui/widget/text.go | |
| parent | 76980fe3014b5c133c4e30590e92bd922aa9b9c1 (diff) | |
| download | volute-d463bb90ad629dfc8f1cd4f4b6b9590b0008832d.zip | |
tree widget
Diffstat (limited to 'gui/widget/text.go')
| -rw-r--r-- | gui/widget/text.go | 78 |
1 files changed, 0 insertions, 78 deletions
diff --git a/gui/widget/text.go b/gui/widget/text.go deleted file mode 100644 index 1b40096..0000000 --- a/gui/widget/text.go +++ /dev/null @@ -1,78 +0,0 @@ -package widget - -import ( - "log" - "sync" - - "image" - "image/color" - "image/draw" - - "golang.org/x/image/font" - "golang.org/x/image/font/gofont/goregular" - "golang.org/x/image/font/opentype" - "golang.org/x/image/math/fixed" -) - -var ( - FONT = goregular.TTF - FONT_SIZE = 15 - DPI = 72 - PAD = 3 -) - -var face *concurrentFace - -func init() { - fnt, err := opentype.Parse(FONT) - if err != nil { - log.Fatal(err) - } - fce, err := opentype.NewFace(fnt, &opentype.FaceOptions{ - Size: float64(FONT_SIZE), - DPI: float64(DPI), - }) - if err != nil { - log.Fatal(err) - } - face = &concurrentFace{sync.Mutex{}, fce} -} - -func TextSize(text string) image.Point { - bounds := textBounds([]byte(text), font.Drawer{Face: face}) - return image.Point{bounds.Max.X - bounds.Min.X + 2*PAD, bounds.Max.Y - bounds.Min.Y + 2*PAD} -} - -func drawText(text []byte, dst draw.Image, r image.Rectangle, fg, bg color.Color) { - drawer := font.Drawer{ - Src: &image.Uniform{fg}, - Face: face, - Dot: fixed.P(0, 0), - } - - // background - draw.Draw(dst, r, &image.Uniform{bg}, image.ZP, draw.Src) - - // text image - bounds := textBounds(text, drawer) - textImg := image.NewRGBA(bounds) - draw.Draw(textImg, bounds, &image.Uniform{bg}, image.ZP, draw.Src) - drawer.Dst = textImg - drawer.DrawBytes(text) - - // draw text image over background - leftCentre := image.Pt(bounds.Min.X, (bounds.Min.Y+bounds.Max.Y)/2) - target := image.Pt(r.Max.X-bounds.Max.X-PAD, (r.Min.Y+r.Max.Y)/2) - delta := target.Sub(leftCentre) - draw.Draw(dst, bounds.Add(delta).Intersect(r), drawer.Dst, bounds.Min, draw.Src) -} - -func textBounds(text []byte, drawer font.Drawer) image.Rectangle { - b, _ := drawer.BoundBytes(text) - return image.Rect( - b.Min.X.Floor(), - b.Min.Y.Floor(), - b.Max.X.Ceil(), - b.Max.Y.Ceil(), - ) -} |