Package org.bigbluebutton.deskshare.client

Source Code of org.bigbluebutton.deskshare.client.MouseLocationTaker

/**
* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
*
* Copyright (c) 2012 BigBlueButton Inc. and by respective authors (see below).
*
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
* Foundation; either version 3.0 of the License, or (at your option) any later
* version.
*
* BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along
* with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
*
*/
package org.bigbluebutton.deskshare.client;

import java.awt.HeadlessException;
import java.awt.Image;
import java.awt.MouseInfo;
import java.awt.Point;
import java.awt.PointerInfo;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import org.bigbluebutton.deskshare.client.MouseLocationListener;

public class MouseLocationTaker {
 
  private MouseLocationListener listeners;
  private volatile boolean trackMouseLocation = false;
  private final Executor mouseLocTakerExec = Executors.newSingleThreadExecutor();
  private Runnable mouseLocRunner;
 
  private int captureWidth;
  private int captureHeight;
  private int scaleWidth;
  private int scaleHeight;
 
  private int captureX;
  private int captureY;
 
  private Point oldMouseLocation = new Point(Integer.MIN_VALUE, Integer.MIN_VALUE);
 
  public MouseLocationTaker(int captureWidth, int captureHeight, int scaleWidth, int scaleHeight, int captureX, int captureY) {
    this.captureWidth = captureWidth;
    this.captureHeight = captureHeight;
    this.scaleWidth = scaleWidth;
    this.scaleHeight = scaleHeight;
   
    this.captureX = captureX;
    this.captureY = captureY;
  }
 
  private Point getMouseLocation() {
    PointerInfo pInfo;
    Point pointerLocation = new Point(0,0);
   
    try {
      pInfo = MouseInfo.getPointerInfo();
    } catch (HeadlessException e) {
      pInfo = null;
    } catch (SecurityException e) {
      pInfo = null;
    }
   
    if (pInfo == null) return pointerLocation;
   
    return pInfo.getLocation();   
  }

  private Point calculatePointerLocation(Point p) {
//    System.out.println("Mouse Tracker:: Image=[" + captureWidth + "," + captureHeight + "] scale=[" + scaleWidth + "," + scaleHeight + "]");
   
    int mouseXInCapturedRegion = p.x - captureX;
    int mouseYInCapturedRegion = p.y - captureY;
   
    double scaledMouseX = mouseXInCapturedRegion * (double)((double)scaleWidth  / (double)captureWidth);
    double scaledMouseY = mouseYInCapturedRegion * (double)((double)scaleHeight  / (double)captureHeight);
   
    return new Point((int)scaledMouseX, (int)scaledMouseY);
   
  }
 
  public boolean adjustPointerLocationDueToScaling() {
    return (captureWidth != scaleWidth && captureHeight != scaleHeight);
  }

  private void takeMouseLocation() {   
    Point mouseLocation = getMouseLocation();
    if ( !mouseLocation.equals(oldMouseLocation) && isMouseInsideCapturedRegion(mouseLocation)) {
//      System.out.println("Mouse is inside captured region [" + mouseLocation.x + "," + mouseLocation.y + "]");
      notifyListeners(calculatePointerLocation(mouseLocation));
      oldMouseLocation = mouseLocation;
    }
  }
 
  private boolean isMouseInsideCapturedRegion(Point p) {
    return true;
//    return ( ( (p.x > captureX) && (p.x < (captureX + captureWidth) ) )
//        && (p.y > captureY && p.y < captureY + captureHeight));
  }
 
  private void notifyListeners(Point location) {
    listeners.onMouseLocationUpdate(location);
  }
   
  public void addListener(MouseLocationListener listener) {
    listeners = listener;
  }

  private void pause(int dur) {
    try{
      Thread.sleep(dur);
    } catch (Exception e){
      System.out.println("Exception sleeping.");
    }
  }
 
  public void start() {
    trackMouseLocation = true;
    mouseLocRunner =  new Runnable() {
      public void run() {
        while (trackMouseLocation){
          takeMouseLocation();
          pause(250);
        }
      }
    };
    mouseLocTakerExec.execute(mouseLocRunner)
  }
 
  public void stop() {
    trackMouseLocation = false;
  }
 
  public void setCaptureCoordinates(int x, int y){
    captureX = x;
    captureY = y;
  }
}
TOP

Related Classes of org.bigbluebutton.deskshare.client.MouseLocationTaker

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.