code: def on_mouse_move(self, event):
      if event.button == 1 and event.last_event is not None:
          x0, y0 = event.last_event.pos
          x1, y1 = event.pos
          w, h = self.size
          self.quaternion = (
              self.quaternion
              * Quaternion(*_arcball(x0, y0, w, h))
              * Quaternion(*_arcball(x1, y1, w, h))
          )
          self.cube.transform.matrix = self.quaternion.get_matrix()
          self.cube.transform.scale((100, 100, 0.001))
          self.cube.transform.translate((200, 200))
          self.update()
  
file_path: vispy/examples/basics/visuals/arcball.py
imports: import sys
  import numpy
  from vispy import app
  from vispy.visuals import BoxVisual, transforms
  from vispy.util.quaternion import Quaternion
label_desc: Use image node_id 4 for calling the Canvas obj's underlying member method code with example usage: obj.on_mouse_move(event) without return types