code: def _queue_edge_tiles(self, dx, dy):
          
          v = self._tile_view
          tw, th = self.data.tile_size
          self._tile_queue = iter([])
  
          def append(rect):
              self._tile_queue = chain(self._tile_queue, self.data.get_tile_images_by_rect(rect))
              # TODO: optimize so fill is only used when map is smaller than buffer
              self._clear_surface(self._buffer, ((rect[0] - v.left) * tw, (rect[1] - v.top) * th,
                                                 rect[2] * tw, rect[3] * th))
  
          if dx > 0:    # right side
              append((v.right - 1, v.top, dx, v.height))
  
          elif dx < 0:  # left side
              append((v.left, v.top, -dx, v.height))
  
          if dy > 0:    # bottom side
              append((v.left, v.bottom - 1, v.width, dy))
  
          elif dy < 0:  # top side
              append((v.left, v.top, v.width, -dy))
docs: Queue edge tiles and clear edge areas on buffer if needed
  
          :param dx: Edge along X axis to enqueue
          :param dy: Edge along Y axis to enqueue
          :return: None