       else
         false
 
-  sourceToBitmapCache = BitmapElement.SourceToBitmapCache.singleton
+  @bitmapCache: sourceToBitmapCache = BitmapElement.SourceToBitmapCache.singleton
 
   constructor: (options) ->
     super

ShadowableElement = require '../ShadowableElement'

{ceil, round} = Math
{defineModule, inspect, min, max, bound, log, createWithPostCreate, isString, isNumber, BaseObject, isPlainArray} = Foundation
{point, rect, Matrix, point0, point1} = Atomic

defineModule module, class BitmapElement extends ShadowableElement


    # OUT: promise.then (bitmap) ->
    get: (url, initializerPromise) ->
      @_referenceCounts[url] = (@_referenceCounts[url] || 0) + 1
      out = @_cache[url] ||= initializerPromise || Canvas.Bitmap.get url
      out.then (bitmap) => @_loaded[url] = bitmap
      out

    loaded: (url) -> @_loaded[url]

    temporaryPut: (duration, url, bitmap) ->
      @get url, Promise.resolve bitmap
      log temporaryPut: {bitmap, duration, url}
      timeout duration, =>
        log temporaryPut: release: {bitmap, url}
        @release url

    # returns true if the bitmap was released
    # returns false if there are still other references
