From b51e94a52ddf47c2f6ba1ca985c2056159591f4a Mon Sep 17 00:00:00 2001
From: Michael Stummvoll <michael@stummi.org>
Date: Wed, 19 Feb 2014 15:29:37 +0100
Subject: [PATCH] allow configuration of axis working space to tick space ratio

---
 .../src/main/java/com/xeiam/xchart/StyleManager.java  | 10 ++++++++++
 .../main/java/com/xeiam/xchart/internal/Utils.java    | 11 -----------
 .../chartpart/AxisTickBarChartCalculator.java         |  4 ++--
 .../internal/chartpart/AxisTickDateCalculator.java    |  4 ++--
 .../chartpart/AxisTickLogarithmicCalculator.java      |  4 ++--
 .../chartpart/AxisTickNumericalCalculator.java        |  4 ++--
 .../xeiam/xchart/internal/chartpart/ChartPainter.java |  2 +-
 .../com/xeiam/xchart/internal/chartpart/Plot.java     | 10 +++++++---
 .../internal/chartpart/PlotContentBarChart.java       | 10 +++++++---
 .../internal/chartpart/PlotContentLineChart.java      | 11 +++++++----
 10 files changed, 40 insertions(+), 30 deletions(-)

diff --git a/xchart/src/main/java/com/xeiam/xchart/StyleManager.java b/xchart/src/main/java/com/xeiam/xchart/StyleManager.java
index 7940b399..452f3096 100644
--- a/xchart/src/main/java/com/xeiam/xchart/StyleManager.java
+++ b/xchart/src/main/java/com/xeiam/xchart/StyleManager.java
@@ -116,6 +116,7 @@ public class StyleManager {
   private Double xAxisMax;
   private Double yAxisMin;
   private Double yAxisMax;
+  private double axisTickSpaceRatio; 
 
   // Chart Plot Area ///////////////////////////////
   private boolean isPlotGridLinesVisible;
@@ -193,6 +194,7 @@ public class StyleManager {
     xAxisMax = null;
     yAxisMin = null;
     yAxisMax = null;
+    axisTickSpaceRatio = .95;
 
     // Chart Plot Area ///////////////////////////////
     isPlotGridLinesVisible = theme.isPlotGridLinesVisible();
@@ -847,6 +849,14 @@ public class StyleManager {
     return yAxisMax;
   }
 
+  public void setAxisTickSpaceRatio(double axisTickSpaceRatio) {
+    this.axisTickSpaceRatio = axisTickSpaceRatio;
+  }
+
+  public double getAxisTickSpaceRatio() {
+	return axisTickSpaceRatio;
+  }
+
   // Chart Plot Area ///////////////////////////////
 
   /**
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/Utils.java b/xchart/src/main/java/com/xeiam/xchart/internal/Utils.java
index a26f144e..8bceebf4 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/Utils.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/Utils.java
@@ -28,17 +28,6 @@ public class Utils {
 
   }
 
-  /**
-   * Gets the percentage of working space allowed for tick marks
-   * 
-   * @param workingSpace
-   * @return
-   */
-  public static int getTickSpace(int workingSpace) {
-
-    return (int) (workingSpace * 0.95);
-  }
-
   /**
    * Gets the offset for the beginning of the tick marks
    * 
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickBarChartCalculator.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickBarChartCalculator.java
index b290cef9..48bffe3e 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickBarChartCalculator.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickBarChartCalculator.java
@@ -49,8 +49,8 @@ public class AxisTickBarChartCalculator extends AxisTickCalculator {
 
   private void calculate(ChartPainter chartPainter) {
 
-    // tick space - a percentage of the working space available for ticks, i.e. 95%
-    int tickSpace = Utils.getTickSpace(workingSpace); // in plot space
+    // tick space - a percentage of the working space available for ticks
+    int tickSpace = (int)(styleManager.getAxisTickSpaceRatio() * workingSpace); // in plot space
 
     // where the tick should begin in the working space in pixels
     int margin = Utils.getTickStartOffset(workingSpace, tickSpace); // in plot space double gridStep = getGridStepForDecimal(tickSpace);
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickDateCalculator.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickDateCalculator.java
index 1984e444..512b15e2 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickDateCalculator.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickDateCalculator.java
@@ -46,8 +46,8 @@ public class AxisTickDateCalculator extends AxisTickCalculator {
 
   private void calculate() {
 
-    // tick space - a percentage of the working space available for ticks, i.e. 95%
-    int tickSpace = Utils.getTickSpace(workingSpace); // in plot space
+    // tick space - a percentage of the working space available for ticks
+    int tickSpace = (int)(styleManager.getAxisTickSpaceRatio() * workingSpace); // in plot space
 
     // where the tick should begin in the working space in pixels
     int margin = Utils.getTickStartOffset(workingSpace, tickSpace); // in plot space double gridStep = getGridStepForDecimal(tickSpace);
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickLogarithmicCalculator.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickLogarithmicCalculator.java
index 88ab25b5..b335cc95 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickLogarithmicCalculator.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickLogarithmicCalculator.java
@@ -53,8 +53,8 @@ public class AxisTickLogarithmicCalculator extends AxisTickCalculator {
       return;
     }
 
-    // tick space - a percentage of the working space available for ticks, i.e. 95%
-    int tickSpace = Utils.getTickSpace(workingSpace); // in plot space
+    // tick space - a percentage of the working space available for ticks
+    int tickSpace = (int)(styleManager.getAxisTickSpaceRatio() * workingSpace); // in plot space
 
     // where the tick should begin in the working space in pixels
     int margin = Utils.getTickStartOffset(workingSpace, tickSpace); // in plot space double gridStep = getGridStepForDecimal(tickSpace);
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickNumericalCalculator.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickNumericalCalculator.java
index e6d273f2..85e296b6 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickNumericalCalculator.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickNumericalCalculator.java
@@ -53,8 +53,8 @@ public class AxisTickNumericalCalculator extends AxisTickCalculator {
       return;
     }
 
-    // tick space - a percentage of the working space available for ticks, i.e. 95%
-    int tickSpace = Utils.getTickSpace(workingSpace); // in plot space
+    // tick space - a percentage of the working space available for ticks
+    int tickSpace = (int)(styleManager.getAxisTickSpaceRatio() * workingSpace); // in plot space
 
     // where the tick should begin in the working space in pixels
     int margin = Utils.getTickStartOffset(workingSpace, tickSpace); // in plot space double gridStep = getGridStepForDecimal(tickSpace);
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/ChartPainter.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/ChartPainter.java
index ccc1e09d..35968240 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/ChartPainter.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/ChartPainter.java
@@ -54,7 +54,7 @@ public class ChartPainter {
 
     chartLegend = new Legend(this);
     axisPair = new AxisPair(this);
-    plot = new Plot(this);
+    plot = new Plot(this, styleManager);
     chartTitle = new ChartTitle(this);
   }
 
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/Plot.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/Plot.java
index 59be2c9f..8677fd0b 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/Plot.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/Plot.java
@@ -18,6 +18,7 @@ package com.xeiam.xchart.internal.chartpart;
 import java.awt.Graphics2D;
 import java.awt.geom.Rectangle2D;
 
+import com.xeiam.xchart.StyleManager;
 import com.xeiam.xchart.StyleManager.ChartType;
 
 /**
@@ -35,15 +36,18 @@ public class Plot implements ChartPart {
 
   private PlotContent plotContent;
 
+  private StyleManager styleManager;
+
   /**
    * Constructor
    * 
    * @param chartPainter
    */
-  public Plot(ChartPainter chartPainter) {
+  public Plot(ChartPainter chartPainter, StyleManager styleManager) {
 
     this.chartPainter = chartPainter;
     this.plotSurface = new PlotSurface(this);
+    this.styleManager = styleManager;
 
   }
 
@@ -76,10 +80,10 @@ public class Plot implements ChartPart {
 
     plotSurface.paint(g);
     if (getChartPainter().getStyleManager().getChartType() == ChartType.Bar) {
-      this.plotContent = new PlotContentBarChart(this);
+      this.plotContent = new PlotContentBarChart(this, styleManager);
     }
     else {
-      this.plotContent = new PlotContentLineChart(this);
+      this.plotContent = new PlotContentLineChart(this, styleManager);
     }
     plotContent.paint(g);
 
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotContentBarChart.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotContentBarChart.java
index 41a31636..a9706c85 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotContentBarChart.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotContentBarChart.java
@@ -24,6 +24,7 @@ import java.util.Set;
 import java.util.TreeSet;
 
 import com.xeiam.xchart.Series;
+import com.xeiam.xchart.StyleManager;
 import com.xeiam.xchart.internal.Utils;
 
 /**
@@ -31,14 +32,17 @@ import com.xeiam.xchart.internal.Utils;
  */
 public class PlotContentBarChart extends PlotContent {
 
+  private StyleManager styleManager;
+
   /**
    * Constructor
    * 
    * @param plot
    */
-  protected PlotContentBarChart(Plot plot) {
+  protected PlotContentBarChart(Plot plot, StyleManager styleManager) {
 
     super(plot);
+    this.styleManager = styleManager;
   }
 
   @Override
@@ -47,11 +51,11 @@ public class PlotContentBarChart extends PlotContent {
     Rectangle2D bounds = plot.getBounds();
 
     // X-Axis
-    int xTickSpace = Utils.getTickSpace((int) bounds.getWidth());
+    int xTickSpace = (int)(styleManager.getAxisTickSpaceRatio() * bounds.getWidth());
     int xLeftMargin = Utils.getTickStartOffset((int) bounds.getWidth(), xTickSpace);
 
     // Y-Axis
-    int yTickSpace = Utils.getTickSpace((int) bounds.getHeight());
+    int yTickSpace = (int)(styleManager.getAxisTickSpaceRatio() * bounds.getHeight());
     int yTopMargin = Utils.getTickStartOffset((int) bounds.getHeight(), yTickSpace);
 
     // get all categories
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotContentLineChart.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotContentLineChart.java
index f70c8bd6..6f4bae54 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotContentLineChart.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotContentLineChart.java
@@ -25,6 +25,7 @@ import java.util.Date;
 import java.util.Iterator;
 
 import com.xeiam.xchart.Series;
+import com.xeiam.xchart.StyleManager;
 import com.xeiam.xchart.StyleManager.ChartType;
 import com.xeiam.xchart.internal.Utils;
 import com.xeiam.xchart.internal.chartpart.Axis.AxisType;
@@ -34,14 +35,16 @@ import com.xeiam.xchart.internal.chartpart.Axis.AxisType;
  */
 public class PlotContentLineChart extends PlotContent {
 
+  private StyleManager styleManager;
+
   /**
    * Constructor
    * 
    * @param plot
    */
-  protected PlotContentLineChart(Plot plot) {
-
+  protected PlotContentLineChart(Plot plot, StyleManager styleManager) {
     super(plot);
+    this.styleManager = styleManager;
   }
 
   @Override
@@ -50,11 +53,11 @@ public class PlotContentLineChart extends PlotContent {
     Rectangle2D bounds = plot.getBounds();
 
     // X-Axis
-    int xTickSpace = Utils.getTickSpace((int) bounds.getWidth());
+    int xTickSpace = (int)(styleManager.getAxisTickSpaceRatio() * bounds.getWidth());
     int xLeftMargin = Utils.getTickStartOffset((int) bounds.getWidth(), xTickSpace);
 
     // Y-Axis
-    int yTickSpace = Utils.getTickSpace((int) bounds.getHeight());
+    int yTickSpace = (int)(styleManager.getAxisTickSpaceRatio() * bounds.getHeight());
     int yTopMargin = Utils.getTickStartOffset((int) bounds.getHeight(), yTickSpace);
 
     for (Series series : getChartPainter().getAxisPair().getSeriesMap().values()) {
-- 
GitLab