package org.jzy3d.chart.controllers.mouse.camera;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;
import org.jzy3d.chart.Chart;
import org.jzy3d.chart.controllers.camera.AbstractCameraController;
import org.jzy3d.chart.controllers.mouse.AWTMouseUtilities;
import org.jzy3d.chart.controllers.thread.camera.CameraThreadController;
import org.jzy3d.maths.Coord2d;
public class AWTCameraMouseController extends AbstractCameraController implements
MouseListener, MouseWheelListener, MouseMotionListener {
public AWTCameraMouseController() {
}
public AWTCameraMouseController(Chart chart) {
register(chart);
addSlaveThreadController(new CameraThreadController(chart));
}
@Override
public void register(Chart chart) {
super.register(chart);
chart.getCanvas().addMouseController(this);
}
@Override
public void dispose() {
for (Chart chart : targets) {
chart.getCanvas().removeMouseController(this);
}
super.dispose();
}
/**
* Handles toggle between mouse rotation/auto rotation: double-click starts
* the animated rotation, while simple click stops it.
*/
@Override
public void mousePressed(MouseEvent e) {
//
if (handleSlaveThread(e))
return;
prevMouse.x = x(e);
prevMouse.y = y(e);
}
/** Compute shift or rotate */
@Override
public void mouseDragged(MouseEvent e) {
Coord2d mouse = xy(e);
// Rotate
if (AWTMouseUtilities.isLeftDown(e)) {
Coord2d move = mouse.sub(prevMouse).div(100);
rotate(move);
}
// Shift
else if (AWTMouseUtilities.isRightDown(e)) {
Coord2d move = mouse.sub(prevMouse);
if (move.y != 0)
shift(move.y / 500);
}
prevMouse = mouse;
}
/** Compute zoom */
@Override
public void mouseWheelMoved(MouseWheelEvent e) {
stopThreadController();
float factor = 1 + (e.getWheelRotation() / 10.0f);
zoomZ(factor);
}
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseMoved(MouseEvent e) {
}
public boolean handleSlaveThread(MouseEvent e) {
if (AWTMouseUtilities.isDoubleClick(e)) {
if (threadController != null) {
threadController.start();
return true;
}
}
if (threadController != null)
threadController.stop();
return false;
}
/* */
public Coord2d xy(MouseEvent e) {
return new Coord2d(x(e), y(e));
}
public int y(MouseEvent e) {
return e.getY();
}
public int x(MouseEvent e) {
return e.getX();
}
}
Ads help maintain this website.