/* * Copyright (c) 2010-2016, Sikuli.org, sikulix.com * Released under the MIT License. * */ /** * */ package org.sikuli.guide; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import javax.swing.Timer; import org.sikuli.script.Env; import org.sikuli.script.Location; public class GlobalMouseMotionTracker implements ActionListener { final static int IDLE_COUNT_THRESHOLD = 200; // this keeps track of how many times the cursor stays stationary int idle_count; Location lastLocation = null; static GlobalMouseMotionTracker _instance = null; static public GlobalMouseMotionTracker getInstance(){ if (_instance == null){ _instance = new GlobalMouseMotionTracker(); } return _instance; } ArrayList<GlobalMouseMotionListener> listeners = new ArrayList<GlobalMouseMotionListener>(); public void addListener(GlobalMouseMotionListener listener){ listeners.add(listener); } Timer timer; private GlobalMouseMotionTracker(){ timer = new Timer(10, this); } public void start(){ timer.start(); //Debug.info("[GlobalMouseMotionTracker] started"); } public void stop(){ timer.stop(); //Debug.info("[GlobalMouseMotionTracker] stopped"); } @Override public void actionPerformed(ActionEvent arg) { Location newLocation = Env.getMouseLocation(); //Debug.info("Mouse loction: " + newLocation); if (lastLocation != null){ if (lastLocation.x != newLocation.x || lastLocation.y != newLocation.y){ for (GlobalMouseMotionListener listener : listeners){ listener.globalMouseMoved(newLocation.x,newLocation.y); } idle_count = 0; }else{ idle_count++; } //Debug.info("idle: " + idle_count); if (idle_count > IDLE_COUNT_THRESHOLD){ for (GlobalMouseMotionListener listener : listeners){ listener.globalMouseIdled(newLocation.x,newLocation.y); } idle_count = 0; } } lastLocation = newLocation; } }