Fantom

 

//
// Copyright (c) 2022, Brian Frank and Andy Frank
// Licensed under the Academic Free License version 3.0
//
// History:
//   20 Mar 2022  Brian Frank  Creation
//

using concurrent
using graphics

**
** Browser implementation of GraphicsEnv
**
@NoDoc @Js
const class DomGraphicsEnv : GraphicsEnv
{
  override Image image(Uri uri, Buf? data := null)
  {
    // get from cache
    image := images.get(uri) as DomImage
    if (image != null) return image

    // create DomImage
    image = loadImage(uri)

    // safely add to the cache
    return images.getOrAdd(uri, image)
  }

  private DomImage loadImage(Uri uri)
  {
    mime := Image.mimeForExt(uri.ext ?: "")
    elem := Elem("img")
    elem->src = uri.encode
    return DomImage(uri, mime, elem)
  }

  private const ConcurrentMap images := ConcurrentMap()
}