def METHOD_NAME(self, viewer, event, data_x, data_y, msg=True):
    camera = self.get_camera(viewer)
    if camera is None:
        # this viewer doesn't have a camera
        return False
    event.accept()
    x, y = self.get_win_xy(viewer)
    if event.state == 'move':
        camera.orbit(self._start_x, self._start_y, x, y)
        self._start_x, self._start_y = x, y
        camera.calc_gl_transform()
        ## pos = tuple(camera.position.get())
        ## mst = "Camera position: (%.4f, %.4f, %.4f)" % pos
        ## if msg:
        ##     self.onscreen_message(mst, delay=0.5)
        tup = camera.position.get()
    elif event.state == 'down':
        self._start_x, self._start_y = x, y
    ## else:
    ##     self.onscreen_message(None)
    viewer.update_widget()