From bc5dc3b9a09255f7e0b4b720e2d23cb156aed39a Mon Sep 17 00:00:00 2001
From: Tim Molter <tim.molter@gmail.com>
Date: Thu, 28 Mar 2013 15:57:46 +0100
Subject: [PATCH] bug fixes - taxis ticks could not be hidden, plot area width
 was falsely calculated.

---
 .../xchart/demo/charts/area/AreaChart01.java  |  1 +
 .../java/com/xeiam/xchart/StyleManager.java   |  3 +-
 .../xeiam/xchart/internal/chartpart/Axis.java | 11 ++--
 .../xchart/internal/chartpart/AxisPair.java   |  2 +-
 .../xchart/internal/chartpart/AxisTick.java   | 53 +++++++++++--------
 .../internal/chartpart/AxisTickLabels.java    |  7 ++-
 .../internal/chartpart/AxisTickMarks.java     |  8 ++-
 .../xchart/internal/chartpart/AxisTitle.java  |  2 +-
 .../xchart/internal/chartpart/Legend.java     |  2 +-
 .../xeiam/xchart/internal/chartpart/Plot.java |  8 ++-
 .../xchart/internal/style/GGPlot2Theme.java   |  2 +-
 .../xchart/internal/style/XChartTheme.java    |  2 +-
 12 files changed, 55 insertions(+), 46 deletions(-)

diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/area/AreaChart01.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/area/AreaChart01.java
index 5b6a061a..2f02aaa0 100644
--- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/area/AreaChart01.java
+++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/area/AreaChart01.java
@@ -51,6 +51,7 @@ public class AreaChart01 implements ExampleChart {
 
     // Customize Chart
     chart.getStyleManager().setLegendPosition(LegendPosition.InsideNW);
+    chart.getStyleManager().setAxisTitlesVisible(false);
 
     return chart;
   }
diff --git a/xchart/src/main/java/com/xeiam/xchart/StyleManager.java b/xchart/src/main/java/com/xeiam/xchart/StyleManager.java
index 8ecc754b..03f6c8d3 100644
--- a/xchart/src/main/java/com/xeiam/xchart/StyleManager.java
+++ b/xchart/src/main/java/com/xeiam/xchart/StyleManager.java
@@ -45,7 +45,7 @@ public class StyleManager {
 
   public enum LegendPosition {
 
-    OutsideW, InsideNW, InsideNE, InsideSE, InsideSW
+    OutsideE, InsideNW, InsideNE, InsideSE, InsideSW
   }
 
   public enum ChartTheme {
@@ -567,7 +567,6 @@ public class StyleManager {
 
     this.xAxisTicksVisible = isVisible;
     this.yAxisTicksVisible = isVisible;
-
   }
 
   /**
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/Axis.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/Axis.java
index cc033ca1..d6b8dcfa 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/Axis.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/Axis.java
@@ -80,8 +80,8 @@ public class Axis implements ChartPart {
 
     this.axisPair = axisPair;
     this.direction = direction;
-    axisTitle = new AxisTitle(this, direction == Direction.X ? getChartPainter().getStyleManager().isXAxisTitleVisible() : getChartPainter().getStyleManager().isYAxisTitleVisible());
-    axisTick = new AxisTick(this, direction == Direction.X ? getChartPainter().getStyleManager().isXAxisTicksVisible() : getChartPainter().getStyleManager().isYAxisTicksVisible());
+    axisTitle = new AxisTitle(this);
+    axisTick = new AxisTick(this);
   }
 
   /**
@@ -193,12 +193,13 @@ public class Axis implements ChartPart {
       int yOffset = (int) (axisPair.getyAxis().getBounds().getY() + axisPair.getyAxis().getBounds().getHeight());
 
       int chartLegendWidth = 0;
-      if (getChartPainter().getStyleManager().getLegendPosition() == LegendPosition.OutsideW) {
+      if (getChartPainter().getStyleManager().getLegendPosition() == LegendPosition.OutsideE) {
         chartLegendWidth = getChartPainter().getChartLegend().getSizeHint()[0];
       }
 
-      int width = (int) (getChartPainter().getWidth() - axisPair.getyAxis().getBounds().getWidth() - chartLegendWidth - (getChartPainter().getStyleManager().isLegendVisible() ? 3 : 2)
-          * getChartPainter().getStyleManager().getChartPadding() - getChartPainter().getStyleManager().getPlotPadding());
+      int width = (int) (getChartPainter().getWidth() - axisPair.getyAxis().getBounds().getWidth() - chartLegendWidth - 2 * getChartPainter().getStyleManager().getChartPadding()
+          - getChartPainter().getStyleManager().getPlotPadding() - (getChartPainter().getStyleManager().getLegendPosition() == LegendPosition.OutsideE ? getChartPainter().getStyleManager()
+          .getChartPadding() : 0));
       int height = this.getSizeHint();
       Rectangle xAxisRectangle = new Rectangle(xOffset, yOffset, width, height);
       this.paintZone = xAxisRectangle;
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisPair.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisPair.java
index b7fa1d22..100a1520 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisPair.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisPair.java
@@ -38,7 +38,7 @@ public class AxisPair implements ChartPart {
 
   private Map<Integer, Series> seriesMap = new LinkedHashMap<Integer, Series>();
 
-  private int seriesCount;
+  private int seriesCount = 0;
 
   private Axis xAxis;
   private Axis yAxis;
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTick.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTick.java
index 2fd2bf84..9cb22fdc 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTick.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTick.java
@@ -37,10 +37,7 @@ public class AxisTick implements ChartPart {
   private AxisTickMarks axisTickMarks;
 
   /** the bounds */
-  private Rectangle bounds;
-
-  /** the visibility state of axistick */
-  private boolean isVisible = true; // default to true
+  private Rectangle bounds = new Rectangle();;
 
   AxisTickCalculator gridStep = null;
 
@@ -48,12 +45,10 @@ public class AxisTick implements ChartPart {
    * Constructor
    * 
    * @param axis
-   * @param isVisible
    */
-  protected AxisTick(Axis axis, boolean isVisible) {
+  protected AxisTick(Axis axis) {
 
     this.axis = axis;
-    this.isVisible = isVisible;
     axisTickLabels = new AxisTickLabels(this);
     axisTickMarks = new AxisTickMarks(this);
   }
@@ -67,13 +62,11 @@ public class AxisTick implements ChartPart {
   @Override
   public void paint(Graphics2D g) {
 
-    bounds = new Rectangle();
-
     int workingSpace = 0;
     if (axis.getDirection() == Axis.Direction.Y) {
       workingSpace = (int) axis.getPaintZone().getHeight(); // number of pixels the axis has to work with for drawing AxisTicks
       // System.out.println("workingspace= " + workingSpace);
-    } else {
+    } else if (axis.getDirection() == Axis.Direction.X) {
       workingSpace = (int) axis.getPaintZone().getWidth(); // number of pixels the axis has to work with for drawing AxisTicks
       // System.out.println("workingspace= " + workingSpace);
     }
@@ -100,23 +93,37 @@ public class AxisTick implements ChartPart {
 
     }
 
-    if (isVisible) {
+    if (axis.getDirection() == Axis.Direction.Y && getChartPainter().getStyleManager().isYAxisTicksVisible()) {
+
+      axisTickLabels.paint(g);
+      axisTickMarks.paint(g);
+
+      bounds = new Rectangle(
+
+      (int) axisTickLabels.getBounds().getX(),
+
+      (int) (axisTickLabels.getBounds().getY()),
+
+      (int) (axisTickLabels.getBounds().getWidth() + getChartPainter().getStyleManager().getAxisTickPadding() + axisTickMarks.getBounds().getWidth()),
+
+      (int) (axisTickMarks.getBounds().getHeight())
+
+      );
+
+      // g.setColor(Color.red);
+      // g.draw(bounds);
+
+    } else if (axis.getDirection() == Axis.Direction.X && getChartPainter().getStyleManager().isXAxisTicksVisible()) {
 
       axisTickLabels.paint(g);
       axisTickMarks.paint(g);
 
-      if (axis.getDirection() == Axis.Direction.Y) {
-        bounds = new Rectangle((int) axisTickLabels.getBounds().getX(), (int) (axisTickLabels.getBounds().getY()), (int) (axisTickLabels.getBounds().getWidth()
-            + getChartPainter().getStyleManager().getAxisTickPadding() + axisTickMarks.getBounds().getWidth()), (int) (axisTickMarks.getBounds().getHeight()));
-        // g.setColor(Color.red);
-        // g.draw(bounds);
-      } else {
-        bounds = new Rectangle((int) axisTickMarks.getBounds().getX(), (int) (axisTickMarks.getBounds().getY()), (int) axisTickLabels.getBounds().getWidth(), (int) (axisTickMarks.getBounds()
-            .getHeight()
-            + getChartPainter().getStyleManager().getAxisTickPadding() + axisTickLabels.getBounds().getHeight()));
-        // g.setColor(Color.red);
-        // g.draw(bounds);
-      }
+      bounds = new Rectangle((int) axisTickMarks.getBounds().getX(), (int) (axisTickMarks.getBounds().getY()), (int) axisTickLabels.getBounds().getWidth(), (int) (axisTickMarks.getBounds()
+          .getHeight()
+          + getChartPainter().getStyleManager().getAxisTickPadding() + axisTickLabels.getBounds().getHeight()));
+      // g.setColor(Color.red);
+      // g.draw(bounds);
+
     }
 
   }
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickLabels.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickLabels.java
index 90f642c3..5edf008c 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickLabels.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickLabels.java
@@ -29,7 +29,7 @@ public class AxisTickLabels implements ChartPart {
   private final AxisTick axisTick;
 
   /** the bounds */
-  private Rectangle bounds;
+  private Rectangle bounds = new Rectangle();
 
   /**
    * Constructor
@@ -50,12 +50,11 @@ public class AxisTickLabels implements ChartPart {
   @Override
   public void paint(Graphics2D g) {
 
-    bounds = new Rectangle();
     g.setFont(getChartPainter().getStyleManager().getAxisTickLabelsFont());
 
     g.setColor(getChartPainter().getStyleManager().getAxisTickLabelsColor());
 
-    if (axisTick.getAxis().getDirection() == Axis.Direction.Y) { // Y-Axis
+    if (axisTick.getAxis().getDirection() == Axis.Direction.Y && getChartPainter().getStyleManager().isYAxisTicksVisible()) { // Y-Axis
 
       int xOffset = (int) (axisTick.getAxis().getAxisTitle().getBounds().getX() + axisTick.getAxis().getAxisTitle().getBounds().getWidth());
       int yOffset = (int) (axisTick.getAxis().getPaintZone().getY());
@@ -84,7 +83,7 @@ public class AxisTickLabels implements ChartPart {
       // g.setColor(Color.blue);
       // g.draw(bounds);
 
-    } else { // X-Axis
+    } else if (axisTick.getAxis().getDirection() == Axis.Direction.X && getChartPainter().getStyleManager().isXAxisTicksVisible()) { // X-Axis
 
       int xOffset = (int) (axisTick.getAxis().getPaintZone().getX());
       int yOffset = (int) (axisTick.getAxis().getAxisTitle().getBounds().getY());
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickMarks.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickMarks.java
index 5e1c668f..9741344e 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickMarks.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickMarks.java
@@ -27,7 +27,7 @@ public class AxisTickMarks implements ChartPart {
   private AxisTick axisTick;
 
   /** the bounds */
-  private Rectangle bounds;
+  private Rectangle bounds = new Rectangle();
 
   /**
    * Constructor
@@ -48,12 +48,10 @@ public class AxisTickMarks implements ChartPart {
   @Override
   public void paint(Graphics2D g) {
 
-    bounds = new Rectangle();
-
     g.setColor(getChartPainter().getStyleManager().getAxisTickMarksColor());
     g.setStroke(getChartPainter().getStyleManager().getAxisTickMarksStroke());
 
-    if (axisTick.getAxis().getDirection() == Axis.Direction.Y) { // Y-Axis
+    if (axisTick.getAxis().getDirection() == Axis.Direction.Y && getChartPainter().getStyleManager().isYAxisTicksVisible()) { // Y-Axis
 
       int xOffset = (int) (axisTick.getAxisTickLabels().getBounds().getX() + axisTick.getAxisTickLabels().getBounds().getWidth() + getChartPainter().getStyleManager().getAxisTickPadding());
       int yOffset = (int) (axisTick.getAxis().getPaintZone().getY());
@@ -82,7 +80,7 @@ public class AxisTickMarks implements ChartPart {
       // g.setColor(Color.yellow);
       // g.draw(bounds);
 
-    } else { // X-Axis
+    } else if (axisTick.getAxis().getDirection() == Axis.Direction.X && getChartPainter().getStyleManager().isXAxisTicksVisible()) { // X-Axis
 
       int xOffset = (int) (axisTick.getAxis().getPaintZone().getX());
       // int yOffset = (int) (axisTick.getAxisTickLabels().getBounds().getY() - getChart().getStyleManager().getAxisTickPadding());
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTitle.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTitle.java
index baa42fea..a9e393c4 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTitle.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTitle.java
@@ -40,7 +40,7 @@ public class AxisTitle implements ChartPart {
    * 
    * @param axis the axis
    */
-  protected AxisTitle(Axis axis, boolean isVisible) {
+  protected AxisTitle(Axis axis) {
 
     this.axis = axis;
   }
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/Legend.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/Legend.java
index 71a8517e..fffe7f62 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/Legend.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/Legend.java
@@ -121,7 +121,7 @@ public class Legend implements ChartPart {
       int xOffset = 0;
       int yOffset = 0;
       switch (chartPainter.getStyleManager().getLegendPosition()) {
-      case OutsideW:
+      case OutsideE:
         xOffset = chartPainter.getWidth() - legendBoxWidth - chartPainter.getStyleManager().getChartPadding();
         yOffset = (int) (chartPainter.getPlot().getBounds().getY() + (chartPainter.getPlot().getBounds().getHeight() - legendBoxHeight) / 2.0);
         break;
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 da909005..b2d81a31 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
@@ -59,8 +59,12 @@ public class Plot implements ChartPart {
     bounds = new Rectangle();
 
     // calculate bounds
-    int xOffset = (int) (chartPainter.getAxisPair().getyAxis().getBounds().getX() + chartPainter.getAxisPair().getyAxis().getBounds().getWidth() + (chartPainter.getStyleManager()
-        .isYAxisTicksVisible() ? (chartPainter.getStyleManager().getPlotPadding() + 1) : 0));
+    int xOffset = (int) (chartPainter.getAxisPair().getyAxis().getBounds().getX()
+
+    + chartPainter.getAxisPair().getyAxis().getBounds().getWidth()
+
+    + (chartPainter.getStyleManager().isYAxisTicksVisible() ? (chartPainter.getStyleManager().getPlotPadding() + 1) : 0));
+
     int yOffset = (int) (chartPainter.getAxisPair().getyAxis().getBounds().getY());
     int width = (int) chartPainter.getAxisPair().getxAxis().getBounds().getWidth();
     int height = (int) chartPainter.getAxisPair().getyAxis().getBounds().getHeight();
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/style/GGPlot2Theme.java b/xchart/src/main/java/com/xeiam/xchart/internal/style/GGPlot2Theme.java
index 207d55be..a817902a 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/style/GGPlot2Theme.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/style/GGPlot2Theme.java
@@ -127,7 +127,7 @@ public class GGPlot2Theme implements Theme {
   @Override
   public LegendPosition getLegendPosition() {
 
-    return LegendPosition.OutsideW;
+    return LegendPosition.OutsideE;
   }
 
   // Chart Axes ///////////////////////////////
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/style/XChartTheme.java b/xchart/src/main/java/com/xeiam/xchart/internal/style/XChartTheme.java
index 5d9b542b..c727d38f 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/style/XChartTheme.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/style/XChartTheme.java
@@ -128,7 +128,7 @@ public class XChartTheme implements Theme {
   @Override
   public LegendPosition getLegendPosition() {
 
-    return LegendPosition.OutsideW;
+    return LegendPosition.OutsideE;
   }
 
   // Chart Axes ///////////////////////////////
-- 
GitLab