1 Star 0 Fork 24

eddylapis/Fyne

forked from Gitee 极速下载/Fyne 
加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
svg_cache.go 1.61 KB
一键复制 编辑 原始数据 按行查看 历史
package gl
import (
"image"
"os"
"sync"
"time"
"fyne.io/fyne"
)
type rasterInfo struct {
pix *image.RGBA
w, h int
expires time.Time
}
var cacheDuration = time.Minute * 5
var rasters = make(map[fyne.Resource]*rasterInfo)
var aspects = make(map[interface{}]float32, 16)
var rasterMutex sync.RWMutex
var janitorOnce sync.Once
func init() {
if t, err := time.ParseDuration(os.Getenv("FYNE_CACHE")); err == nil {
cacheDuration = t
}
svgCacheJanitor()
}
func svgCacheJanitor() {
delay := cacheDuration / 2
if delay < time.Second {
delay = time.Second
}
go janitorOnce.Do(func() {
for {
time.Sleep(delay)
now := time.Now()
rasterMutex.Lock()
for k, v := range rasters {
if v.expires.Before(now) {
delete(rasters, k)
}
}
rasterMutex.Unlock()
}
})
}
func svgCacheGet(res fyne.Resource, w int, h int) *image.RGBA {
rasterMutex.RLock()
defer rasterMutex.RUnlock()
v, ok := rasters[res]
if !ok || v == nil || v.w != w || v.h != h {
return nil
}
v.expires = time.Now().Add(cacheDuration)
return v.pix
}
func svgCachePut(res fyne.Resource, pix *image.RGBA, w int, h int) {
rasterMutex.Lock()
defer rasterMutex.Unlock()
defer func() {
recover()
}()
rasters[res] = &rasterInfo{
pix: pix,
w: w,
h: h,
expires: time.Now().Add(cacheDuration),
}
}
func svgCacheReset() {
rasterMutex.Lock()
for k := range rasters {
delete(rasters, k)
}
rasterMutex.Unlock()
}
func svgCacheMonitorTheme() {
listener := make(chan fyne.Settings)
fyne.CurrentApp().Settings().AddChangeListener(listener)
go func() {
for {
<-listener
svgCacheReset()
}
}()
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/eddylapis/Fyne.git
git@gitee.com:eddylapis/Fyne.git
eddylapis
Fyne
Fyne
v1.0.0

搜索帮助