From 804a61d0fb3de5c0ba00fc4af27ca03fb454d3eb Mon Sep 17 00:00:00 2001
From: Tim Molter <tim.molter@gmail.com>
Date: Tue, 30 Sep 2014 10:16:15 +0200
Subject: [PATCH] bugfix Issue #83 - Bad signatures on axis (numbers should be
 rounded)

---
 .../chartpart/AxisTickBarChartCalculator.java | 32 ++++++-------------
 .../AxisTickNumericalCalculator.java          |  2 ++
 .../internal/chartpart/NumberFormatter.java   |  1 +
 3 files changed, 13 insertions(+), 22 deletions(-)

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 558cc321..e70a6e3c 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
@@ -131,36 +131,24 @@ public class AxisTickBarChartCalculator extends AxisTickCalculator {
         tickLocations.add(tickLabelPosition);
       }
     }
-    else { // Number or Date and more than 12 categories. divide up the axis tick space according to normal number axis layout
-
-      double gridStep = getNumericalGridStep(tickSpace);
-      double firstPosition = getFirstPosition(gridStep);
+    else { // Number or Date and more than 12 categories. divide up the axis tick space according to normal date oor number axis layout
 
       // generate all tickLabels and tickLocations from the first to last position
-      NumberFormatter numberFormatter = null;
-      DateFormatter dateFormatter = null;
 
       if (chartPainter.getAxisPair().getXAxis().getAxisType() == AxisType.Number) {
-        numberFormatter = new NumberFormatter(styleManager);
+
+        AxisTickNumericalCalculator axisTickNumericalCalculator = new AxisTickNumericalCalculator(axisDirection, workingSpace, minValue, maxValue, styleManager);
+        tickLabels = axisTickNumericalCalculator.getTickLabels();
+        tickLocations = axisTickNumericalCalculator.getTickLocations();
+
       }
       else if (chartPainter.getAxisPair().getXAxis().getAxisType() == AxisType.Date) {
-        dateFormatter = new DateFormatter(chartPainter.getStyleManager());
-      }
-
-      for (double tickPosition = firstPosition; tickPosition <= maxValue + 2 * gridStep; tickPosition = tickPosition + gridStep) {
 
-        if (chartPainter.getAxisPair().getXAxis().getAxisType() == AxisType.Number) {
-          tickLabels.add(numberFormatter.formatNumber(BigDecimal.valueOf(tickPosition), minValue, maxValue, axisDirection));
-        }
-        else if (chartPainter.getAxisPair().getXAxis().getAxisType() == AxisType.Date) {
-          long span = (long) Math.abs(maxValue - minValue); // in data space
-          long gridStepHint = (long) (span / (double) tickSpace * styleManager.getXAxisTickMarkSpacingHint());
-          long timeUnit = dateFormatter.getTimeUnit(gridStepHint);
-          tickLabels.add(dateFormatter.formatDate(tickPosition, timeUnit));
-        }
-        double tickLabelPosition = margin + ((tickPosition - minValue) / (maxValue - minValue) * tickSpace);
-        tickLocations.add(tickLabelPosition);
+        AxisTickDateCalculator axisTickDateCalculator = new AxisTickDateCalculator(axisDirection, workingSpace, minValue, maxValue, styleManager);
+        tickLabels = axisTickDateCalculator.getTickLabels();
+        tickLocations = axisTickDateCalculator.getTickLocations();
       }
+
     }
 
   }
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 48d6efb9..fdbad410 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
@@ -74,8 +74,10 @@ public class AxisTickNumericalCalculator extends AxisTickCalculator {
     // generate all tickLabels and tickLocations from the first to last position
     for (BigDecimal tickPosition = cleanedFirstPosition; tickPosition.compareTo(BigDecimal.valueOf(maxValue + 2 * cleanedGridStep.doubleValue())) < 0; tickPosition = tickPosition.add(cleanedGridStep)) {
 
+      // System.out.println(tickPosition);
       String tickLabel = numberFormatter.formatNumber(tickPosition, minValue, maxValue, axisDirection);
       // System.out.println(tickLabel);
+
       tickLabels.add(tickLabel);
       // here we convert tickPosition finally to plot space, i.e. pixels
       double tickLabelPosition = margin + ((tickPosition.doubleValue() - minValue) / (maxValue - minValue) * tickSpace);
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/NumberFormatter.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/NumberFormatter.java
index 750f538b..2264d2d0 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/NumberFormatter.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/NumberFormatter.java
@@ -133,6 +133,7 @@ public class NumberFormatter {
     else {
       decimalPattern = getFormatPattern(value, min, max);
     }
+    // System.out.println(decimalPattern);
 
     DecimalFormat normalFormat = (DecimalFormat) numberFormat;
     normalFormat.applyPattern(decimalPattern);
-- 
GitLab