major optimization updates
[debian/openrocket] / src / net / sf / openrocket / gui / scalefigure / AbstractScaleFigure.java
index 5a515ba765e15d1155dad79ed7632721e1ddbde4..63d2f469838b03b5fb6c06c13ff385fb7b4e075e 100644 (file)
@@ -13,41 +13,46 @@ import net.sf.openrocket.util.Prefs;
 
 
 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;
@@ -64,49 +69,61 @@ public abstract class AbstractScaleFigure extends JPanel implements ScaleFigure
                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);
                }
        }
-
+       
 }