package org.lemsml.jlems.viz.plot;
final class PanZoomHandler extends BaseMouseHandler {
private int xc;
private int yc;
private boolean zoomX;
private boolean zoomY;
boolean dragZoom = false;
boolean movedMouse = false;
public void init(Mouse m) {
xc = m.getX();
yc = m.getY();
setClaimIn();
dragZoom = false;
movedMouse = false;
readZoomConditions(m);
}
public void readZoomConditions(Mouse m) {
zoomX = true;
zoomY = true;
if (m.getX() < 30) {
zoomX = false;
}
if (m.getY() > m.getCanvasHeight() - 30) {
zoomY = false;
}
}
public void activate() {
super.activate();
}
public void applyOnDown(Mouse m) {
m.initializeZoom(xc, yc);
}
public void advance(Mouse m) {
setClaimIn();
}
public void applyOnDrag(Mouse m) {
int x = m.getX();
int y = m.getY();
int dx = x - xc;
int dy = y - yc;
if (dx * dx + dy * dy > 50) {
movedMouse = true;
}
if (m.leftButton()) {
m.trialPan(xc, yc, x, y);
setFullRepaint();
if (!movedMouse) {
}
} else if (m.rightButton()) {
double rz = 100.;
double zx = Math.exp(-(x - xc) / rz);
double zy = Math.exp((y - yc) / rz);
if (Math.abs(x - xc) * Math.abs(y - yc) > 5) {
dragZoom = true;
}
if (!zoomX) {
zx = 1.;
}
if (!zoomY) {
zy = 1.;
}
m.dragZoom(zx, zy, xc, yc);
setFullRepaint();
}
}
public void applyOnScrollWheel(Mouse m) {
int units = m.getScrollUnits();
double rz = 7.;
double zx = Math.exp(units / rz);
double zy = Math.exp(units / rz);
readZoomConditions(m);
if (!zoomX) {
zx = 1.;
}
if (!zoomY) {
zy = 1.;
}
m.zoom(zx, zy, m.getX(), m.getY());
setFullRepaint();
}
public void applyOnRelease(Mouse m) {
int x = m.getX();
int y = m.getY();
double zf = 0.7;
if (m.leftButton()) {
m.permanentPan(xc, yc, x, y);
if (!movedMouse) {
m.zoom((zoomX ? zf : 1.), (zoomY ? zf : 1.), xc, yc);
}
} else if (m.rightButton()) {
if (!movedMouse) {
m.zoom((zoomX ? 1./zf : 1.), (zoomY ? 1./zf : 1.), xc, yc);
}
}
m.restoreAA();
}
}