     )
     @map_canvas.clip()
 
-  _render_tile: (tile_key) ->
-    @map_canvas.save()
-    @_set_rect()
-    @_draw_tile(tile_key)
-    @map_canvas.restore()
-
   _render_tiles: (tile_keys) ->
     @map_canvas.save()
     @_set_rect()

            parents.push(parent_key)
          need_load.push(t)

    # first draw stand-in parents =====================================
    @_render_tiles(parents)

    # load missing tiles ==============================================
    if not abridged
      for t in need_load
        [x, y, z, bounds] = t
        @_create_tile(x, y, z, bounds)

    # draw cached tiles ===============================================
    @_render_tiles(cached)
    for t in cached
      @mget('tile_source').tiles[t].current = true

    # prune cached tiles ===============================================
    #if not abridged
    #  @tile_source.prune_tiles()

class TileRenderer extends HasParent
  default_view: TileRendererView

        else
          @_create_tile(cx, cy, cz, cbounds, true)

  _fetch_tiles:(tiles) ->
    for t in tiles
      [x, y, z, bounds] = t
      @_create_tile(x, y, z, bounds)

  _update: () =>
    @mget('tile_source').update()
    extent = @get_extent()
    zoom_level = @mget('tile_source').get_level_by_extent(extent, @map_frame.get('height'), @map_frame.get('width'))
