Separate 2d and 3d tool events into two methods, make them all virtual