| 12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- package cache
- import (
- "sync"
- "fyne.io/fyne/v2"
- )
- var (
- fontSizeCache = map[fontSizeEntry]fontMetric{}
- fontSizeLock = sync.RWMutex{}
- )
- type fontMetric struct {
- size fyne.Size
- baseLine float32
- }
- type fontSizeEntry struct {
- text string
- size float32
- style fyne.TextStyle
- }
- // GetFontMetrics looks up a calculated size and baseline required for the specified text parameters.
- func GetFontMetrics(text string, fontSize float32, style fyne.TextStyle) (size fyne.Size, base float32) {
- ent := fontSizeEntry{text, fontSize, style}
- fontSizeLock.RLock()
- ret, ok := fontSizeCache[ent]
- fontSizeLock.RUnlock()
- if !ok {
- return fyne.Size{Width: 0, Height: 0}, 0
- }
- return ret.size, ret.baseLine
- }
- // SetFontMetrics stores a calculated font size and baseline for parameters that were missing from the cache.
- func SetFontMetrics(text string, fontSize float32, style fyne.TextStyle, size fyne.Size, base float32) {
- ent := fontSizeEntry{text, fontSize, style}
- fontSizeLock.Lock()
- fontSizeCache[ent] = fontMetric{size: size, baseLine: base}
- fontSizeLock.Unlock()
- }
|