From 9d8a2780afb432cf77100e6bd82fbb3eabdfb32c Mon Sep 17 00:00:00 2001
From: Tim Molter <tim.molter@gmail.com>
Date: Sun, 14 Sep 2014 10:29:22 +0200
Subject: [PATCH] issue #82 - barchart bar style outline or filled

---
 .../xchart/demo/charts/bar/BarChart02.java      |  1 +
 .../java/com/xeiam/xchart/StyleManager.java     | 17 +++++++++++++++++
 .../internal/chartpart/PlotContentBarChart.java | 10 ++++++++--
 .../xchart/internal/style/GGPlot2Theme.java     |  6 ++++++
 .../xchart/internal/style/MatlabTheme.java      |  6 ++++++
 .../com/xeiam/xchart/internal/style/Theme.java  |  2 ++
 .../xchart/internal/style/XChartTheme.java      |  6 ++++++
 7 files changed, 46 insertions(+), 2 deletions(-)

diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart02.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart02.java
index b9db53f7..7774cc2a 100644
--- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart02.java
+++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart02.java
@@ -78,6 +78,7 @@ public class BarChart02 implements ExampleChart {
     Series series = chart.addSeries("Model 77", xData, yData);
     series.setLineColor(SeriesColor.RED);
     chart.getStyleManager().setPlotGridLinesVisible(false);
+    chart.getStyleManager().setBarFilled(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 f0bfe4fc..fb4d87a2 100644
--- a/xchart/src/main/java/com/xeiam/xchart/StyleManager.java
+++ b/xchart/src/main/java/com/xeiam/xchart/StyleManager.java
@@ -136,6 +136,7 @@ public class StyleManager {
   // Bar Charts ///////////////////////////////
   private double barWidthPercentage;
   private boolean isBarsOverlapped;
+  private boolean isBarFilled;
 
   // Line, Scatter, Area Charts ///////////////////////////////
   private int markerSize;
@@ -222,6 +223,7 @@ public class StyleManager {
     // Bar Charts ///////////////////////////////
     barWidthPercentage = theme.getBarWidthPercentage();
     isBarsOverlapped = theme.isBarsOverlapped();
+    isBarFilled = theme.isBarFilled();
 
     // Line, Scatter, Area Charts ///////////////////////////////
 
@@ -1041,6 +1043,21 @@ public class StyleManager {
     return isBarsOverlapped;
   }
 
+  /**
+   * set whether or no bars are filled with a solid color or empty.
+   * 
+   * @param isBarFilled
+   */
+  public void setBarFilled(boolean isBarFilled) {
+
+    this.isBarFilled = isBarFilled;
+  }
+
+  public boolean isBarFilled() {
+
+    return isBarFilled;
+  }
+
   // Line, Scatter, Area Charts ///////////////////////////////
 
   /**
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 9916e471..9a7dab23 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
@@ -32,7 +32,7 @@ public class PlotContentBarChart extends PlotContent {
 
   /**
    * Constructor
-   * 
+   *
    * @param plot
    */
   protected PlotContentBarChart(Plot plot) {
@@ -190,7 +190,13 @@ public class PlotContentBarChart extends PlotContent {
         path.lineTo(xOffset + barWidth, zeroOffset);
         path.lineTo(xOffset, zeroOffset);
         path.closePath();
-        g.fill(path);
+        g.setStroke(series.getStroke());
+        if (getChartPainter().getStyleManager().isBarFilled()) {
+          g.fill(path);
+        }
+        else {
+          g.draw(path);
+        }
 
       }
       seriesCounter++;
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 3ccbfcbf..cb95e1a1 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
@@ -293,6 +293,12 @@ public class GGPlot2Theme implements Theme {
     return false;
   }
 
+  @Override
+  public boolean isBarFilled() {
+
+    return true;
+  }
+
   // Line, Scatter, Area Charts ///////////////////////////////
 
   @Override
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/style/MatlabTheme.java b/xchart/src/main/java/com/xeiam/xchart/internal/style/MatlabTheme.java
index d329e10e..5756a29d 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/style/MatlabTheme.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/style/MatlabTheme.java
@@ -294,6 +294,12 @@ public class MatlabTheme implements Theme {
     return false;
   }
 
+  @Override
+  public boolean isBarFilled() {
+
+    return true;
+  }
+
   // Line, Scatter, Area Charts ///////////////////////////////
 
   @Override
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/style/Theme.java b/xchart/src/main/java/com/xeiam/xchart/internal/style/Theme.java
index d67e6425..4ca1c5dd 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/style/Theme.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/style/Theme.java
@@ -122,6 +122,8 @@ public interface Theme {
 
   public boolean isBarsOverlapped();
 
+  public boolean isBarFilled();
+
   // Line, Scatter, Area Charts ///////////////////////////////
 
   public int getMarkerSize();
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 bd292dd1..1a4cf322 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
@@ -293,6 +293,12 @@ public class XChartTheme implements Theme {
     return false;
   }
 
+  @Override
+  public boolean isBarFilled() {
+
+    return true;
+  }
+
   // Line, Scatter, Area Charts ///////////////////////////////
 
   @Override
-- 
GitLab