refactor with native mouse events, optimize