def is_overlapping_viewport(self, hotspot, xy):
        """
        Checks to see if the hotspot at position ``(x, y)``
        is (at least partially) visible according to the
        position of the viewport.
        """
        l1, t1, r1, b1 = calc_bounds(xy, hotspot)
        l2, t2, r2, b2 = calc_bounds(self._position, self._device)
        return range_overlap(l1, r1, l2, r2) and range_overlap(t1, b1, t2, b2)