[fix] zooming in and out now zooms center-to-center
This commit is contained in:
parent
ae83846e4e
commit
08c5ecafdf
@ -2,7 +2,6 @@ package net.sf.openrocket.gui.scalefigure;
|
|||||||
|
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Component;
|
|
||||||
import java.awt.Dimension;
|
import java.awt.Dimension;
|
||||||
import java.awt.Font;
|
import java.awt.Font;
|
||||||
import java.awt.Graphics;
|
import java.awt.Graphics;
|
||||||
@ -10,12 +9,12 @@ import java.awt.Graphics2D;
|
|||||||
import java.awt.Point;
|
import java.awt.Point;
|
||||||
import java.awt.Rectangle;
|
import java.awt.Rectangle;
|
||||||
import java.awt.RenderingHints;
|
import java.awt.RenderingHints;
|
||||||
import java.awt.event.ComponentAdapter;
|
|
||||||
import java.awt.event.ComponentEvent;
|
import java.awt.event.ComponentEvent;
|
||||||
import java.awt.event.ComponentListener;
|
import java.awt.event.ComponentListener;
|
||||||
import java.awt.event.MouseEvent;
|
import java.awt.event.MouseEvent;
|
||||||
import java.awt.event.MouseListener;
|
import java.awt.event.MouseListener;
|
||||||
import java.awt.event.MouseMotionListener;
|
import java.awt.event.MouseMotionListener;
|
||||||
|
import java.awt.geom.Point2D;
|
||||||
|
|
||||||
import javax.swing.BorderFactory;
|
import javax.swing.BorderFactory;
|
||||||
import javax.swing.JComponent;
|
import javax.swing.JComponent;
|
||||||
@ -67,6 +66,8 @@ public class ScaleScrollPane extends JScrollPane
|
|||||||
// n.b. it is slightly large than the ruler.width + scrollbar.width
|
// n.b. it is slightly large than the ruler.width + scrollbar.width
|
||||||
final Dimension viewportMarginPx = new Dimension( 40, 40);
|
final Dimension viewportMarginPx = new Dimension( 40, 40);
|
||||||
|
|
||||||
|
private Point2D.Double viewCenter_frac = new Point2D.Double(0.5f, 0.5f);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a scale scroll pane.
|
* Create a scale scroll pane.
|
||||||
*
|
*
|
||||||
@ -153,12 +154,16 @@ public class ScaleScrollPane extends JScrollPane
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setScaling(final double newScale) {
|
public void setScaling(final double newScale) {
|
||||||
// match if closer than 1%:
|
// match if closer than 1%:
|
||||||
if( MathUtil.equals(newScale, figure.getUserScale(), 0.01)){
|
if( MathUtil.equals(newScale, figure.getUserScale(), 0.01)){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// if explicitly setting a zoom level, turn off fitting
|
final Rectangle viewRect = viewport.getViewRect();
|
||||||
|
viewCenter_frac = new Point2D.Double( (viewRect.getX() + viewRect.getWidth()/2) / figure.getWidth(),
|
||||||
|
(viewRect.getY() + viewRect.getHeight()/2) / figure.getHeight() );
|
||||||
|
|
||||||
|
// if explicitly setting a zoom level, turn off fitting
|
||||||
this.fit = false;
|
this.fit = false;
|
||||||
Dimension view = viewport.getExtentSize();
|
Dimension view = viewport.getExtentSize();
|
||||||
figure.scaleTo(newScale, view);
|
figure.scaleTo(newScale, view);
|
||||||
@ -253,11 +258,16 @@ public class ScaleScrollPane extends JScrollPane
|
|||||||
final Point zoomPoint = figure.getAutoZoomPoint();
|
final Point zoomPoint = figure.getAutoZoomPoint();
|
||||||
final Rectangle zoomRectangle = new Rectangle(zoomPoint.x, zoomPoint.y, viewport.getWidth(), viewport.getHeight() );
|
final Rectangle zoomRectangle = new Rectangle(zoomPoint.x, zoomPoint.y, viewport.getWidth(), viewport.getHeight() );
|
||||||
figure.scrollRectToVisible(zoomRectangle);
|
figure.scrollRectToVisible(zoomRectangle);
|
||||||
|
}else{
|
||||||
|
final Rectangle scrollRectangle = viewport.getViewRect();
|
||||||
|
scrollRectangle.x = (int)(viewCenter_frac.x * figure.getWidth()) - (scrollRectangle.width/2);
|
||||||
|
scrollRectangle.y = (int)(viewCenter_frac.y * figure.getHeight()) - (scrollRectangle.height/2);
|
||||||
|
|
||||||
revalidate();
|
figure.scrollRectToVisible(scrollRectangle);
|
||||||
}
|
}
|
||||||
// figure.updateFigure();
|
|
||||||
|
|
||||||
|
|
||||||
|
revalidate();
|
||||||
horizontalRuler.updateSize();
|
horizontalRuler.updateSize();
|
||||||
verticalRuler.updateSize();
|
verticalRuler.updateSize();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user