- Pods
- AF-Genesis 0.0.4.1
- API
- IconSrc
- Src
sourceafQuickFlux::IconSrc.fan
using gfx::Image
using afIoc::ConcurrentState
using afIoc::RegistryShutdownHub
const class IconSrc {
private const ConcurrentState conState := ConcurrentState(IconsSrcState#)
new make(RegistryShutdownHub shutdownHub) {
icons := this
shutdownHub.addRegistryShutdownListener("disposeIcons", [,]) |->| {
withState {
images.vals.each { it.dispose }
images.clear
}
}
}
@Operator
Image? get(Uri? icoUri) {
if (icoUri == null)
return null
return getState {
images.getOrAdd(icoUri) {
Image(icoUri)
}
}
}
internal Void withState(|IconsSrcState| state) {
conState.withState(state)
}
internal Obj getState(|IconsSrcState -> Obj| state) {
conState.getState(state)
}
}
@Serializable
internal class IconsSrcState {
Uri:Image images := Uri:Image[:]
}