Package org.mt4j.input.inputSources

Source Code of org.mt4j.input.inputSources.MacTrackpadSource

package org.mt4j.input.inputSources;

import java.util.HashMap;
import java.util.Map;
import java.util.Observable;
import java.util.Observer;

import org.mt4j.MTApplication;
import org.mt4j.input.inputData.ActiveCursorPool;
import org.mt4j.input.inputData.InputCursor;
import org.mt4j.input.inputData.MTFingerInputEvt;
import org.mt4j.util.MT4jSettings;

import com.alderstone.multitouch.mac.touchpad.Finger;
import com.alderstone.multitouch.mac.touchpad.FingerState;
import com.alderstone.multitouch.mac.touchpad.TouchpadObservable;

/**
* Input source for Mac OS X Trackpads.
* Uses the library from http://kenai.com/projects/macmultitouch
*
* @author Florian Thalmann
*/
public class MacTrackpadSource extends AbstractInputSource implements Observer {

  private TouchpadObservable tpo;
  private int windowWidth, windowHeight;
  private Map<Integer, Long> fingerIdToCursorId;
 
  public MacTrackpadSource(MTApplication mtApp) {
    super(mtApp);
    this.tpo = TouchpadObservable.getInstance();
    this.tpo.addObserver(this);
   
    this.windowWidth = MT4jSettings.getInstance().getWindowWidth();
    this.windowHeight = MT4jSettings.getInstance().getWindowHeight();
   
    this.fingerIdToCursorId = new HashMap<Integer, Long>();
  }

  public void update(Observable obj, Object arg) {
    Finger finger = (Finger) arg;
    int fingerID = finger.getID();
   
    ActiveCursorPool cursorPool = ActiveCursorPool.getInstance();
    int inputID;
    Long cursorID = fingerIdToCursorId.get(fingerID);
    InputCursor cursor = (cursorID != null)? cursorPool.getActiveCursorByID(cursorID) : null;
   
    if (finger.getState() == FingerState.PRESSED) {
      if (cursor == null) { //new finger
        cursor = new InputCursor();
        fingerIdToCursorId.put(fingerID, cursor.getId());
        cursorPool.putActiveCursor(cursor.getId(), cursor);
        inputID = MTFingerInputEvt.INPUT_DETECTED;
      } else { //updated finger
        inputID = MTFingerInputEvt.INPUT_UPDATED;
      }
    } else { //removed finger
      if (cursorID != null){
        cursorPool.removeCursor(cursorID);
      }
      fingerIdToCursorId.remove(fingerID);
      inputID = MTFingerInputEvt.INPUT_ENDED;
    }
   
    int absoluteX = Math.round(finger.getX()*this.windowWidth);
    int absoluteY = Math.round((1-finger.getY())*this.windowHeight);
    this.enqueueInputEvent(new MTFingerInputEvt(this, absoluteX, absoluteY, inputID, cursor));
  }

  public void update() {}

}
TOP

Related Classes of org.mt4j.input.inputSources.MacTrackpadSource

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.