def add_hotspot(self, hotspot, xy):
        """
        Add the hotspot at ``(x, y)``. The hotspot must fit inside the bounds
        of the virtual device. If it does not then an ``AssertError`` is
        raised.
        """
        (x, y) = xy
        assert(0 <= x <= self.width - hotspot.width)
        assert(0 <= y <= self.height - hotspot.height)

        # TODO: should it check to see whether hotspots overlap each other?
        # Is sensible to _allow_ them to overlap?
        self._hotspots.append((hotspot, xy))