code: def zoom_delta(self, d, p=(0., 0.), c=1.):
          
          dx, dy = d
          x0, y0 = p
  
          pan_x, pan_y = self._pan
          zoom_x, zoom_y = self._zoom
          zoom_x_new, zoom_y_new = (zoom_x * math.exp(c * self._zoom_coeff * dx),
                                    zoom_y * math.exp(c * self._zoom_coeff * dy))
  
          zoom_x_new = max(min(zoom_x_new, self._zmax), self._zmin)
          zoom_y_new = max(min(zoom_y_new, self._zmax), self._zmin)
  
          self.zoom = zoom_x_new, zoom_y_new
  
          if self._zoom_to_pointer:
              zoom_x, zoom_y = self._zoom_aspect((zoom_x,
                                                  zoom_y))
              zoom_x_new, zoom_y_new = self._zoom_aspect((zoom_x_new,
                                                          zoom_y_new))
  
              self.pan = (pan_x - x0 * (1. / zoom_x - 1. / zoom_x_new),
                          pan_y - y0 * (1. / zoom_y - 1. / zoom_y_new))
  
          self.update()
docs: Zoom the view by a given amount.