public abstract class AbstractScaleFigure extends JPanel implements ScaleFigure {
-
- // Number of pixels to leave at edges when fitting figure
- public static final int BORDER_PIXELS_WIDTH=30;
- public static final int BORDER_PIXELS_HEIGHT=20;
+ // Number of pixels to leave at edges when fitting figure
+ private static final int DEFAULT_BORDER_PIXELS_WIDTH = 30;
+ private static final int DEFAULT_BORDER_PIXELS_HEIGHT = 20;
- protected final double dpi;
+ protected final double dpi;
+
protected double scale = 1.0;
protected double scaling = 1.0;
+ protected int borderPixelsWidth = DEFAULT_BORDER_PIXELS_WIDTH;
+ protected int borderPixelsHeight = DEFAULT_BORDER_PIXELS_HEIGHT;
+
protected final List<ChangeListener> listeners = new LinkedList<ChangeListener>();
-
+
public AbstractScaleFigure() {
this.dpi = Prefs.getDPI();
this.scaling = 1.0;
- this.scale = dpi/0.0254*scaling;
+ this.scale = dpi / 0.0254 * scaling;
setBackground(Color.WHITE);
setOpaque(true);
}
-
+
public abstract void updateFigure();
+
public abstract double getFigureWidth();
+
public abstract double getFigureHeight();
-
+
@Override
public double getScaling() {
return scaling;
}
-
+
@Override
public double getAbsoluteScale() {
return scale;
if (Math.abs(this.scaling - scaling) < 0.01)
return;
this.scaling = scaling;
- this.scale = dpi/0.0254*scaling;
+ this.scale = dpi / 0.0254 * scaling;
updateFigure();
}
@Override
public void setScaling(Dimension bounds) {
double zh = 1, zv = 1;
- int w = bounds.width - 2*BORDER_PIXELS_WIDTH -20;
- int h = bounds.height - 2*BORDER_PIXELS_HEIGHT -20;
+ int w = bounds.width - 2 * borderPixelsWidth - 20;
+ int h = bounds.height - 2 * borderPixelsHeight - 20;
if (w < 10)
w = 10;
if (h < 10)
h = 10;
- zh = ((double)w) / getFigureWidth();
- zv = ((double)h) / getFigureHeight();
-
- double s = Math.min(zh, zv)/dpi*0.0254 - 0.001;
+ zh = (w) / getFigureWidth();
+ zv = (h) / getFigureHeight();
+
+ double s = Math.min(zh, zv) / dpi * 0.0254 - 0.001;
setScaling(s);
}
-
-
+
+ @Override
+ public Dimension getBorderPixels() {
+ return new Dimension(borderPixelsWidth, borderPixelsHeight);
+ }
+
+ @Override
+ public void setBorderPixels(int width, int height) {
+ this.borderPixelsWidth = width;
+ this.borderPixelsHeight = height;
+ }
+
+
@Override
public void addChangeListener(ChangeListener listener) {
- listeners.add(0,listener);
+ listeners.add(0, listener);
}
-
+
@Override
public void removeChangeListener(ChangeListener listener) {
listeners.remove(listener);
}
private ChangeEvent changeEvent = null;
+
protected void fireChangeEvent() {
ChangeListener[] list = listeners.toArray(new ChangeListener[0]);
- for (ChangeListener l: list) {
+ for (ChangeListener l : list) {
if (changeEvent == null)
changeEvent = new ChangeEvent(this);
l.stateChanged(changeEvent);
}
}
-
+
}