From ef13c8f189a0d7f64eed1d6943ffe80d4933b600 Mon Sep 17 00:00:00 2001
From: Tim Molter <tim.molter@gmail.com>
Date: Sat, 23 Feb 2013 11:18:55 +0100
Subject: [PATCH] bar charts - legend, vertical plot area lines

---
 .../xchart/internal/chartpart/AxisTick.java   |  5 --
 .../xchart/internal/chartpart/Legend.java     | 62 ++++++++++++++-----
 .../internal/chartpart/PlotContent.java       |  2 +-
 .../internal/chartpart/PlotSurface.java       | 16 +++--
 .../xeiam/xchart/style/SeriesLineStyle.java   |  8 +--
 5 files changed, 60 insertions(+), 33 deletions(-)

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 c0a96ea1..dde167ff 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
@@ -100,11 +100,6 @@ public class AxisTick implements ChartPart {
 
     }
 
-    // if (getChart().getStyleManager()) {
-    //
-    // gridStep = new LogarithmicAxisTickCalculator(axis.getDirection(), workingSpace, axis.getMin(), axis.getMax(), getChart().getStyleManager());
-    // }
-
     if (isVisible) {
 
       axisTickLabels.paint(g);
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 2a1dc924..bdc73f0a 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
@@ -24,6 +24,7 @@ import java.util.Map;
 import com.xeiam.xchart.Chart;
 import com.xeiam.xchart.Series;
 import com.xeiam.xchart.internal.markers.Marker;
+import com.xeiam.xchart.style.StyleManager.ChartType;
 
 /**
  * @author timmolter
@@ -31,6 +32,7 @@ import com.xeiam.xchart.internal.markers.Marker;
 public class Legend implements ChartPart {
 
   private static final int LEGEND_MARGIN = 6;
+  private static final int BOX_SIZE = 20;
 
   /** parent */
   private final Chart chart;
@@ -77,13 +79,21 @@ public class Legend implements ChartPart {
       }
 
       // determine legend content height
-      int legendContentHeight = 0;
-      int maxContentHeight = Math.max(legendTextContentMaxHeight, Marker.SIZE);
-      legendContentHeight = maxContentHeight * seriesMap.size() + chart.getStyleManager().getLegendPadding() * (seriesMap.size() - 1);
+      int maxContentHeight = 0;
+      if (getChart().getStyleManager().getChartType() != ChartType.Bar) {
+        maxContentHeight = Math.max(legendTextContentMaxHeight, Marker.SIZE);
+      } else {
+        maxContentHeight = Math.max(legendTextContentMaxHeight, BOX_SIZE);
+      }
+      int legendContentHeight = maxContentHeight * seriesMap.size() + chart.getStyleManager().getLegendPadding() * (seriesMap.size() - 1);
 
       // determine legend content width
-      int legendContentWidth = (int) (3.0 * Marker.SIZE + chart.getStyleManager().getLegendPadding() + legendTextContentMaxWidth);
-
+      int legendContentWidth = 0;
+      if (getChart().getStyleManager().getChartType() != ChartType.Bar) {
+        legendContentWidth = (int) (3.0 * Marker.SIZE + chart.getStyleManager().getLegendPadding() + legendTextContentMaxWidth);
+      } else {
+        legendContentWidth = BOX_SIZE + chart.getStyleManager().getLegendPadding() + legendTextContentMaxWidth;
+      }
       // Draw Legend Box
       int legendBoxWidth = legendContentWidth + 2 * chart.getStyleManager().getLegendPadding();
       int legendBoxHeight = legendContentHeight + 2 * chart.getStyleManager().getLegendPadding();
@@ -146,23 +156,41 @@ public class Legend implements ChartPart {
       int starty = yOffset + chart.getStyleManager().getLegendPadding();
       for (Integer seriesId : seriesMap.keySet()) {
         Series series = seriesMap.get(seriesId);
-        // paint line
-        if (series.getStroke() != null) {
-          g.setColor(series.getStrokeColor());
-          g.setStroke(series.getStroke());
-          g.drawLine(startx, starty - Marker.Y_OFFSET, (int) (startx + Marker.SIZE * 3.0), starty - Marker.Y_OFFSET);
-        }
-        // paint marker
-        if (series.getMarker() != null) {
-          g.setColor(series.getMarkerColor());
-          series.getMarker().paint(g, (int) (startx + (Marker.SIZE * 1.5)), starty - Marker.Y_OFFSET);
+
+        if (getChart().getStyleManager().getChartType() != ChartType.Bar) {
+          // paint line
+          if (series.getStroke() != null) {
+            g.setColor(series.getStrokeColor());
+            g.setStroke(series.getStroke());
+            g.drawLine(startx, starty - Marker.Y_OFFSET, (int) (startx + Marker.SIZE * 3.0), starty - Marker.Y_OFFSET);
+          }
+          // paint marker
+          if (series.getMarker() != null) {
+            g.setColor(series.getMarkerColor());
+            series.getMarker().paint(g, (int) (startx + (Marker.SIZE * 1.5)), starty - Marker.Y_OFFSET);
+          }
+        } else {
+          // paint box
+          if (series.getStroke() != null) {
+            g.setColor(series.getStrokeColor());
+            g.fillPolygon(new int[] { startx, startx + BOX_SIZE, startx + BOX_SIZE, startx }, new int[] { starty, starty, starty + BOX_SIZE, starty + BOX_SIZE }, 4);
+            g.setStroke(series.getStroke());
+            g.drawPolygon(new int[] { startx, startx + BOX_SIZE, startx + BOX_SIZE, startx }, new int[] { starty, starty, starty + BOX_SIZE, starty + BOX_SIZE }, 4);
+
+          }
         }
 
         // paint series name
         g.setColor(chart.getStyleManager().getChartFontColor());
         TextLayout layout = new TextLayout(series.getName(), chart.getStyleManager().getLegendFont(), new FontRenderContext(null, true, false));
-        layout.draw(g, (float) (startx + Marker.SIZE + (Marker.SIZE * 1.5) + chart.getStyleManager().getLegendPadding()), (starty + Marker.SIZE));
-        starty = starty + legendTextContentMaxHeight + chart.getStyleManager().getLegendPadding();
+        if (getChart().getStyleManager().getChartType() != ChartType.Bar) {
+          layout.draw(g, (float) (startx + Marker.SIZE + (Marker.SIZE * 1.5) + chart.getStyleManager().getLegendPadding()),
+              (int) (starty + (Marker.SIZE + chart.getStyleManager().getLegendPadding()) / 2.0));
+          starty = starty + legendTextContentMaxHeight + chart.getStyleManager().getLegendPadding();
+        } else {
+          layout.draw(g, startx + BOX_SIZE + chart.getStyleManager().getLegendPadding(), (int) (starty + (BOX_SIZE + chart.getStyleManager().getLegendPadding()) / 2.0));
+          starty = starty + legendTextContentMaxHeight + chart.getStyleManager().getLegendPadding();
+        }
       }
 
       // bounds
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotContent.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotContent.java
index 425a84d4..9d4799bd 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotContent.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotContent.java
@@ -38,7 +38,7 @@ public class PlotContent implements ChartPart {
   /** parent */
   private Plot plot;
 
-  private final Stroke errorBarStroke = new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL);
+  private final Stroke errorBarStroke = new BasicStroke(1.5f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL);
 
   /**
    * Constructor
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotSurface.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotSurface.java
index 5080ecc9..163c947a 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotSurface.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotSurface.java
@@ -21,6 +21,7 @@ import java.awt.Stroke;
 import java.util.List;
 
 import com.xeiam.xchart.Chart;
+import com.xeiam.xchart.style.StyleManager.ChartType;
 
 /**
  * @author timmolter
@@ -82,15 +83,18 @@ public class PlotSurface implements ChartPart {
       }
 
       // vertical
-      List<Integer> xAxisTickLocations = getChart().getAxisPair().getxAxis().getAxisTick().getTickLocations();
-      for (int i = 0; i < xAxisTickLocations.size(); i++) {
+      if (getChart().getStyleManager().getChartType() != ChartType.Bar) {
 
-        int tickLocation = xAxisTickLocations.get(i);
+        List<Integer> xAxisTickLocations = getChart().getAxisPair().getxAxis().getAxisTick().getTickLocations();
+        for (int i = 0; i < xAxisTickLocations.size(); i++) {
 
-        g.setColor(getChart().getStyleManager().getPlotGridLinesColor());
-        g.setStroke(stroke);
+          int tickLocation = xAxisTickLocations.get(i);
+
+          g.setColor(getChart().getStyleManager().getPlotGridLinesColor());
+          g.setStroke(stroke);
 
-        g.drawLine((int) (bounds.getX() + tickLocation - 1), (int) (bounds.getY()), (int) (bounds.getX() + tickLocation - 1), (int) (bounds.getY() + bounds.getHeight() - 1));
+          g.drawLine((int) (bounds.getX() + tickLocation - 1), (int) (bounds.getY()), (int) (bounds.getX() + tickLocation - 1), (int) (bounds.getY() + bounds.getHeight() - 1));
+        }
       }
     }
   }
diff --git a/xchart/src/main/java/com/xeiam/xchart/style/SeriesLineStyle.java b/xchart/src/main/java/com/xeiam/xchart/style/SeriesLineStyle.java
index f8a01980..fef49a8e 100644
--- a/xchart/src/main/java/com/xeiam/xchart/style/SeriesLineStyle.java
+++ b/xchart/src/main/java/com/xeiam/xchart/style/SeriesLineStyle.java
@@ -28,16 +28,16 @@ public enum SeriesLineStyle {
   NONE(-1, null),
 
   /** SOLID */
-  SOLID(0, new BasicStroke(1.5f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL)),
+  SOLID(0, new BasicStroke(1.8f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL)),
 
   /** DASH_DOT */
-  DASH_DOT(1, new BasicStroke(1.5f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 10.0f, new float[] { 3.0f, 1.0f }, 0.0f)),
+  DASH_DOT(1, new BasicStroke(1.8f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 10.0f, new float[] { 3.0f, 1.0f }, 0.0f)),
 
   /** DASH_DASH */
-  DASH_DASH(2, new BasicStroke(1.5f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 10.0f, new float[] { 3.0f, 3.0f }, 0.0f)),
+  DASH_DASH(2, new BasicStroke(1.8f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 10.0f, new float[] { 3.0f, 3.0f }, 0.0f)),
 
   /** DOT_DOT */
-  DOT_DOT(3, new BasicStroke(1.5f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 10.0f, new float[] { 1.0f, 1.0f }, 0.0f));
+  DOT_DOT(3, new BasicStroke(1.8f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 10.0f, new float[] { 1.0f, 1.0f }, 0.0f));
 
   /** The index */
   private int index;
-- 
GitLab