sourceafQuickFlux::IconSrc.fan

using afConcurrent
using gfx::Image
using afIoc::RegistryShutdownHub

const class IconSrc {
    private const AtomicMap images  := AtomicMap()

    new make(RegistryShutdownHub shutdownHub) {
        icons := this
        shutdownHub.addRegistryShutdownListener("disposeIcons", [,]) |->| {
            images.vals.each { it->dispose }
            images.clear
        }
    }
    
    @Operator
    Image? get(Uri? icoUri) {
        if (icoUri == null)
            return null
        return images.getOrAdd(icoUri) {
            Image(icoUri)
        }
    }   
}