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