1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
private void handleMousePressed(MouseEvent e) {
startX = e.getX();
startY = e.getY();
}
private void handleMouseDragged(MouseEvent e) {
double draggedDistanceX = startX - e.getX();
double draggedDistanceY = startY - e.getY();
startX = e.getX();
startY = e.getY();
double viewWidth = mapArea.getWidth() * 1 / zoom;
double viewHeight = mapArea.getHeight() * 1 / zoom;
final Rectangle2D viewport = visioneusePrincipal.getViewport();
double curMinX = viewport.getMinX();
double curMinY = viewport.getMinY();
double newMinX = curMinX + draggedDistanceX;
double newMinY = curMinY + draggedDistanceY;
newMinX = clamp(newMinX, 0, Math.max(0, visioneusePrincipal.getImage().getWidth() - viewWidth));
newMinY = clamp(newMinY, 0, Math.max(0, visioneusePrincipal.getImage().getHeight() - viewHeight));
visioneusePrincipal.setViewport(new Rectangle2D(newMinX, newMinY, viewWidth, viewHeight));
System.out.printf("%f x %f \t %f x %f%n", newMinX, newMinY, visioneusePrincipal.getImage().getWidth(), visioneusePrincipal.getImage().getHeight());
}
double clamp(double min, double value, double max) {
double result = Math.max(min, value);
result = Math.min(result, max);
return result;
}
private void mapAreaSizeChanged(Observable o) {
double viewWidth = mapArea.getWidth() * 1 / zoom;
double viewHeight = mapArea.getHeight() * 1 / zoom;
final Rectangle2D viewport = visioneusePrincipal.getViewport();
if (viewport.getWidth() != viewWidth || viewport.getHeight() != viewHeight) {
double newMinX = viewport.getMinX();
double newMinY = viewport.getMinY();
newMinX = clamp(newMinX, 0, Math.max(0, visioneusePrincipal.getImage().getWidth() - viewWidth));
newMinY = clamp(newMinY, 0, Math.max(0, visioneusePrincipal.getImage().getHeight() - viewHeight));
visioneusePrincipal.setViewport(new Rectangle2D(newMinX, newMinY, viewWidth, viewHeight));
}
}
private double zoom = 1.0;
private Scale scale = new Scale(zoom, zoom);
private static final double MIN_ZOOM = 0.5;
private static final double MAX_ZOOM = 2.0;
private void handleZoom(ScrollEvent event) {
double delta = event.getDeltaY();
double newZoom = zoom;
if (delta < 0) {
newZoom /= 2;
}
if (delta > 0) {
newZoom *= 2;
}
newZoom = clamp(MIN_ZOOM, newZoom, MAX_ZOOM);
if (newZoom == zoom) {
return;
}
zoom = newZoom;
System.out.printf("Zoom: %f%n", zoom);
scale.setX(zoom);
scale.setY(zoom);
double viewWidth = mapArea.getWidth() * 1 / zoom;
double viewHeight = mapArea.getHeight() * 1 / zoom;
final Rectangle2D viewport = visioneusePrincipal.getViewport();
if (viewport.getWidth() != viewWidth || viewport.getHeight() != viewHeight) {
double newMinX = viewport.getMinX();
double newMinY = viewport.getMinY();
newMinX = clamp(newMinX, 0, Math.max(0, visioneusePrincipal.getImage().getWidth() - viewWidth));
newMinY = clamp(newMinY, 0, Math.max(0, visioneusePrincipal.getImage().getHeight() - viewHeight));
visioneusePrincipal.setViewport(new Rectangle2D(newMinX, newMinY, viewWidth, viewHeight));
}
} |
Partager