From 67931cb46c9d8e5392775e522743b90b7016c3db Mon Sep 17 00:00:00 2001 From: Tim Molter <tim.molter@gmail.com> Date: Wed, 26 Mar 2014 21:30:40 +0100 Subject: [PATCH] move marker size to style manager --- README.md | 6 +++ .../com/xeiam/xchart/standalone/Example0.java | 5 --- .../java/com/xeiam/xchart/StyleManager.java | 38 +++++++++++++++---- .../xchart/internal/chartpart/Legend.java | 13 ++++--- .../chartpart/PlotContentBarChart.java | 2 +- .../chartpart/PlotContentLineChart.java | 2 +- .../xeiam/xchart/internal/markers/Circle.java | 5 ++- .../xchart/internal/markers/Diamond.java | 4 +- .../xeiam/xchart/internal/markers/Marker.java | 5 +-- .../xeiam/xchart/internal/markers/Square.java | 5 ++- .../xchart/internal/markers/TriangleDown.java | 9 +++-- .../xchart/internal/markers/TriangleUp.java | 9 +++-- .../xchart/internal/style/GGPlot2Theme.java | 10 ++++- .../xchart/internal/style/MatlabTheme.java | 10 ++++- .../xeiam/xchart/internal/style/Theme.java | 6 ++- .../xchart/internal/style/XChartTheme.java | 10 ++++- 16 files changed, 97 insertions(+), 42 deletions(-) diff --git a/README.md b/README.md index 839ab65f..fba36b1e 100644 --- a/README.md +++ b/README.md @@ -49,10 +49,13 @@ Now go ahead and [study some more examples](http://xeiam.com/xchart_examplecode. * Real-time charts ## Getting Started + ### Non-Maven + Download Jar: http://xeiam.com/xchart_changelog.jsp ### Maven + The XChart release artifacts are hosted on Maven Central. Add the XChart library as a dependency to your pom.xml file: @@ -104,3 +107,6 @@ Please report any bugs or submit feature requests to [XChart's Github issue trac ## Donations 1PrZHiJorAw7RQrjP9CJgtPuqr6fU65PKt +## Release Information + +We will announce new releases on our [Twitter page](https://twitter.com/Xeiam). \ No newline at end of file diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/standalone/Example0.java b/xchart-demo/src/main/java/com/xeiam/xchart/standalone/Example0.java index 4e0a6fbe..c50d3d06 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/standalone/Example0.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/standalone/Example0.java @@ -15,7 +15,6 @@ */ package com.xeiam.xchart.standalone; -import com.xeiam.xchart.BitmapEncoder; import com.xeiam.xchart.Chart; import com.xeiam.xchart.QuickChart; import com.xeiam.xchart.SwingWrapper; @@ -36,9 +35,5 @@ public class Example0 { // Show it new SwingWrapper(chart).displayChart(); - // Save it - BitmapEncoder.savePNG(chart, "./Sample_Chart.png"); - BitmapEncoder.savePNGWithDPI(chart, "./Sample_Chart_300_DPI.png", 300); - } } diff --git a/xchart/src/main/java/com/xeiam/xchart/StyleManager.java b/xchart/src/main/java/com/xeiam/xchart/StyleManager.java index 5b50fa79..8d20a5c6 100644 --- a/xchart/src/main/java/com/xeiam/xchart/StyleManager.java +++ b/xchart/src/main/java/com/xeiam/xchart/StyleManager.java @@ -129,7 +129,10 @@ public class StyleManager { // Bar Charts /////////////////////////////// private double barWidthPercentage; - private boolean barsOverlapped; + private boolean isBarsOverlapped; + + // Line, Scatter, Area Charts /////////////////////////////// + private int markerSize; // Error Bars /////////////////////////////// private Color errorBarsColor; @@ -211,7 +214,11 @@ public class StyleManager { // Bar Charts /////////////////////////////// barWidthPercentage = theme.getBarWidthPercentage(); - barsOverlapped = theme.barsOverlapped(); + isBarsOverlapped = theme.isBarsOverlapped(); + + // Line, Scatter, Area Charts /////////////////////////////// + + markerSize = theme.getMarkerSize(); // Error Bars /////////////////////////////// errorBarsColor = theme.getErrorBarsColor(); @@ -994,16 +1001,33 @@ public class StyleManager { /** * set whether or no bars are overlapped. Otherwise they are places side-by-side * - * @param barsOverlapped + * @param isBarsOverlapped + */ + public void setBarsOverlapped(boolean isBarsOverlapped) { + + this.isBarsOverlapped = isBarsOverlapped; + } + + public boolean isBarsOverlapped() { + + return isBarsOverlapped; + } + + // Line, Scatter, Area Charts /////////////////////////////// + + /** + * Sets the size of the markers in pixels + * + * @param markerSize */ - public void setBarsOverlapped(boolean barsOverlapped) { + public void setMarkerSize(int markerSize) { - this.barsOverlapped = barsOverlapped; + this.markerSize = markerSize; } - public boolean barsOverlapped() { + public int getMarkerSize() { - return barsOverlapped; + return markerSize; } // Error Bars /////////////////////////////// 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 1d0f74a8..70bc6169 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 @@ -29,7 +29,6 @@ import java.util.Map; import com.xeiam.xchart.Series; import com.xeiam.xchart.StyleManager; import com.xeiam.xchart.StyleManager.ChartType; -import com.xeiam.xchart.internal.markers.Marker; /** * @author timmolter @@ -90,7 +89,7 @@ public class Legend implements ChartPart { legendTextContentMaxWidth = Math.max(legendTextContentMaxWidth, entry.getValue().getWidth()); } - blockHeight = Math.max(blockHeight, isBar ? BOX_SIZE : Marker.SIZE); + blockHeight = Math.max(blockHeight, isBar ? BOX_SIZE : getChartPainter().getStyleManager().getMarkerSize()); legendTextContentMaxHeight = Math.max(legendTextContentMaxHeight, blockHeight); legendContentHeight += blockHeight; @@ -133,8 +132,9 @@ public class Legend implements ChartPart { StyleManager styleManager = getChartPainter().getStyleManager(); - if (!styleManager.isLegendVisible()) + if (!styleManager.isLegendVisible()) { return; + } final double[] sizeHint = getSizeHint(g); @@ -190,8 +190,9 @@ public class Legend implements ChartPart { for (Series series : chartPainter.getAxisPair().getSeriesMap().values()) { List<Map.Entry<String, Rectangle2D>> seriesBounds = getSeriesBounds(series, g); float blockHeight = 0; - for (Map.Entry<String, Rectangle2D> entry : seriesBounds) + for (Map.Entry<String, Rectangle2D> entry : seriesBounds) { blockHeight += entry.getValue().getHeight(); + } if (styleManager.getChartType() != ChartType.Bar) { // paint line @@ -205,7 +206,7 @@ public class Legend implements ChartPart { // paint marker if (series.getMarker() != null) { g.setColor(series.getMarkerColor()); - series.getMarker().paint(g, startx + styleManager.getLegendSeriesLineLength() / 2.0, starty + blockHeight / 2.0); + series.getMarker().paint(g, startx + styleManager.getLegendSeriesLineLength() / 2.0, starty + blockHeight / 2.0, getChartPainter().getStyleManager().getMarkerSize()); } } else { @@ -227,7 +228,7 @@ public class Legend implements ChartPart { g.drawString(entry.getKey(), x, (float) (starty + entry.getValue().getHeight()) + itemOffsetY); itemOffsetY += entry.getValue().getHeight(); } - itemOffsetY = (float) Math.max(itemOffsetY, Marker.SIZE); + itemOffsetY = Math.max(itemOffsetY, getChartPainter().getStyleManager().getMarkerSize()); starty += blockHeight + fontMetrics.getDescent(); } else { 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 318e793c..e6577354 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 @@ -170,7 +170,7 @@ public class PlotContentBarChart extends PlotContent { boolean isOverlap = true; double xOffset; double barWidth; - if (getChartPainter().getStyleManager().barsOverlapped()) { + if (getChartPainter().getStyleManager().isBarsOverlapped()) { double barWidthPercentage = getChartPainter().getStyleManager().getBarWidthPercentage(); barWidth = gridStep * barWidthPercentage; double barMargin = gridStep * (1 - barWidthPercentage) / 2; 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 d08eebb7..f7783afe 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 @@ -205,7 +205,7 @@ public class PlotContentLineChart extends PlotContent { // paint marker if (series.getMarker() != null) { g.setColor(series.getMarkerColor()); - series.getMarker().paint(g, xOffset, yOffset); + series.getMarker().paint(g, xOffset, yOffset, getChartPainter().getStyleManager().getMarkerSize()); } // paint errorbars diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/markers/Circle.java b/xchart/src/main/java/com/xeiam/xchart/internal/markers/Circle.java index b3cd237d..489f7abf 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/markers/Circle.java +++ b/xchart/src/main/java/com/xeiam/xchart/internal/markers/Circle.java @@ -25,10 +25,11 @@ import java.awt.geom.Ellipse2D; public class Circle extends Marker { @Override - public void paint(Graphics2D g, double xOffset, double yOffset) { + public void paint(Graphics2D g, double xOffset, double yOffset, int markerSize) { g.setStroke(stroke); - Shape circle = new Ellipse2D.Double(xOffset - Marker.HALF_SIZE, yOffset - Marker.HALF_SIZE, Marker.SIZE, Marker.SIZE); + double halfSize = (double) markerSize / 2; + Shape circle = new Ellipse2D.Double(xOffset - halfSize, yOffset - halfSize, markerSize, markerSize); g.fill(circle); } diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/markers/Diamond.java b/xchart/src/main/java/com/xeiam/xchart/internal/markers/Diamond.java index 4a5d0abc..78f9883e 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/markers/Diamond.java +++ b/xchart/src/main/java/com/xeiam/xchart/internal/markers/Diamond.java @@ -24,12 +24,12 @@ import java.awt.geom.Path2D; public class Diamond extends Marker { @Override - public void paint(Graphics2D g, double xOffset, double yOffset) { + public void paint(Graphics2D g, double xOffset, double yOffset, int markerSize) { g.setStroke(stroke); // Make a diamond - double diamondHalfSize = Marker.HALF_SIZE * 1.3; + double diamondHalfSize = (double) markerSize / 2 * 1.3; Path2D.Double path = new Path2D.Double(); path.moveTo(xOffset - diamondHalfSize, yOffset); diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/markers/Marker.java b/xchart/src/main/java/com/xeiam/xchart/internal/markers/Marker.java index dd24d7f3..42ba4e3c 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/markers/Marker.java +++ b/xchart/src/main/java/com/xeiam/xchart/internal/markers/Marker.java @@ -25,9 +25,6 @@ public abstract class Marker { protected BasicStroke stroke = new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL); - public static final double SIZE = 8; + public abstract void paint(Graphics2D g, double xOffset, double yOffset, int markerSize); - public static final double HALF_SIZE = SIZE / 2.0; - - public abstract void paint(Graphics2D g, double xOffset, double yOffset); } diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/markers/Square.java b/xchart/src/main/java/com/xeiam/xchart/internal/markers/Square.java index 2848423b..f297ebdb 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/markers/Square.java +++ b/xchart/src/main/java/com/xeiam/xchart/internal/markers/Square.java @@ -25,10 +25,11 @@ import java.awt.geom.Rectangle2D; public class Square extends Marker { @Override - public void paint(Graphics2D g, double xOffset, double yOffset) { + public void paint(Graphics2D g, double xOffset, double yOffset, int markerSize) { g.setStroke(stroke); - Shape square = new Rectangle2D.Double(xOffset - Marker.HALF_SIZE, yOffset - Marker.HALF_SIZE, Marker.SIZE, Marker.SIZE); + double halfSize = (double) markerSize / 2; + Shape square = new Rectangle2D.Double(xOffset - halfSize, yOffset - halfSize, markerSize, markerSize); g.fill(square); } diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/markers/TriangleDown.java b/xchart/src/main/java/com/xeiam/xchart/internal/markers/TriangleDown.java index 19dc130c..6a28809d 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/markers/TriangleDown.java +++ b/xchart/src/main/java/com/xeiam/xchart/internal/markers/TriangleDown.java @@ -24,15 +24,16 @@ import java.awt.geom.Path2D; public class TriangleDown extends Marker { @Override - public void paint(Graphics2D g, double xOffset, double yOffset) { + public void paint(Graphics2D g, double xOffset, double yOffset, int markerSize) { g.setStroke(stroke); + double halfSize = (double) markerSize / 2; // Make a triangle Path2D.Double path = new Path2D.Double(); - path.moveTo(xOffset - Marker.HALF_SIZE, 1 + yOffset - Marker.HALF_SIZE); - path.lineTo(xOffset, 1 + yOffset - Marker.HALF_SIZE + Marker.SIZE + 1); - path.lineTo(xOffset - Marker.HALF_SIZE + Marker.SIZE + 1, 1 + yOffset - Marker.HALF_SIZE); + path.moveTo(xOffset - halfSize, 1 + yOffset - halfSize); + path.lineTo(xOffset, 1 + yOffset - halfSize + markerSize + 1); + path.lineTo(xOffset - halfSize + markerSize + 1, 1 + yOffset - halfSize); path.closePath(); g.fill(path); diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/markers/TriangleUp.java b/xchart/src/main/java/com/xeiam/xchart/internal/markers/TriangleUp.java index 7f9bf708..ebd4abe8 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/markers/TriangleUp.java +++ b/xchart/src/main/java/com/xeiam/xchart/internal/markers/TriangleUp.java @@ -24,15 +24,16 @@ import java.awt.geom.Path2D; public class TriangleUp extends Marker { @Override - public void paint(Graphics2D g, double xOffset, double yOffset) { + public void paint(Graphics2D g, double xOffset, double yOffset, int markerSize) { g.setStroke(stroke); + double halfSize = (double) markerSize / 2; // Make a triangle Path2D.Double path = new Path2D.Double(); - path.moveTo(xOffset - Marker.HALF_SIZE, yOffset - Marker.HALF_SIZE + Marker.SIZE + 1); - path.lineTo(xOffset - Marker.HALF_SIZE + Marker.SIZE + 1, yOffset - Marker.HALF_SIZE + Marker.SIZE + 1); - path.lineTo(xOffset, yOffset - Marker.HALF_SIZE); + path.moveTo(xOffset - halfSize, yOffset - halfSize + markerSize + 1); + path.lineTo(xOffset - halfSize + markerSize + 1, yOffset - halfSize + markerSize + 1); + path.lineTo(xOffset, yOffset - halfSize); path.closePath(); g.fill(path); 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 1c99fe3c..3ccbfcbf 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 @@ -288,11 +288,19 @@ public class GGPlot2Theme implements Theme { } @Override - public boolean barsOverlapped() { + public boolean isBarsOverlapped() { return false; } + // Line, Scatter, Area Charts /////////////////////////////// + + @Override + public int getMarkerSize() { + + return 8; + } + // Error Bars /////////////////////////////// @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 56bdc5f4..d329e10e 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 @@ -289,11 +289,19 @@ public class MatlabTheme implements Theme { } @Override - public boolean barsOverlapped() { + public boolean isBarsOverlapped() { return false; } + // Line, Scatter, Area Charts /////////////////////////////// + + @Override + public int getMarkerSize() { + + return 8; + } + // Error Bars /////////////////////////////// @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 e4e37fe3..d67e6425 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 @@ -120,7 +120,11 @@ public interface Theme { public double getBarWidthPercentage(); - public boolean barsOverlapped(); + public boolean isBarsOverlapped(); + + // Line, Scatter, Area Charts /////////////////////////////// + + public int getMarkerSize(); // Error Bars /////////////////////////////// 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 1afe96c0..bd292dd1 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 @@ -288,11 +288,19 @@ public class XChartTheme implements Theme { } @Override - public boolean barsOverlapped() { + public boolean isBarsOverlapped() { return false; } + // Line, Scatter, Area Charts /////////////////////////////// + + @Override + public int getMarkerSize() { + + return 8; + } + // Error Bars /////////////////////////////// @Override -- GitLab