diff --git a/xchart/src/main/java/org/knowm/xchart/Styler_Pie.java b/xchart/src/main/java/org/knowm/xchart/Styler_Pie.java index 3608a056ad7fbb29c1c3c53c6b4556cb1677ea19..916590fc03ab5e611ceafc79744f0ff13b0df414 100644 --- a/xchart/src/main/java/org/knowm/xchart/Styler_Pie.java +++ b/xchart/src/main/java/org/knowm/xchart/Styler_Pie.java @@ -16,6 +16,8 @@ */ package org.knowm.xchart; +import java.awt.Font; + import org.knowm.xchart.Series_Pie.ChartPieSeriesRenderStyle; import org.knowm.xchart.internal.style.Styler; import org.knowm.xchart.internal.style.Theme_; @@ -30,6 +32,8 @@ public class Styler_Pie extends Styler { private double pieFillPercentage; private boolean isCircular; private double startAngleInDegrees; + private Font pieFont; + private double annotationDistance; /** * Constructor @@ -46,6 +50,8 @@ public class Styler_Pie extends Styler { chartPieSeriesRenderStyle = ChartPieSeriesRenderStyle.Pie; // set default to pie, donut may be a future one pieFillPercentage = theme.getPieFillPercentage(); isCircular = theme.isCircular(); + pieFont = theme.getPieFont(); + annotationDistance = theme.getAnnotationDistance(); } public ChartPieSeriesRenderStyle getChartPieSeriesRenderStyle() { @@ -108,6 +114,36 @@ public class Styler_Pie extends Styler { this.startAngleInDegrees = startAngleInDegrees; } + public Font getPieFont() { + + return pieFont; + } + + /** + * Sets the font used on the Pie Chart's annotations + * + * @param pieFont + */ + public void setPieFont(Font pieFont) { + + this.pieFont = pieFont; + } + + public double getAnnotationDistance() { + + return annotationDistance; + } + + /** + * Sets the distance of the pie chart's annotation where 0 is the center, 1 is at the edge and greater than 1 is outside of the pie chart. + * + * @param annotationDistance + */ + public void setAnnotationDistance(double annotationDistance) { + + this.annotationDistance = annotationDistance; + } + /** * Set the theme the styler should use * diff --git a/xchart/src/main/java/org/knowm/xchart/internal/chartpart/PlotContent_Pie.java b/xchart/src/main/java/org/knowm/xchart/internal/chartpart/PlotContent_Pie.java index d6accee1402ce0d08b526611f542df4a53257958..907f9b89025bba1e843f24bbd63461d92d221c0e 100644 --- a/xchart/src/main/java/org/knowm/xchart/internal/chartpart/PlotContent_Pie.java +++ b/xchart/src/main/java/org/knowm/xchart/internal/chartpart/PlotContent_Pie.java @@ -127,14 +127,14 @@ public class PlotContent_Pie<ST extends Styler, S extends Series> extends PlotCo // draw percentage on slice double percentage = y.doubleValue() / total * 100; - TextLayout textLayout = new TextLayout(df.format(percentage) + "%", chart.getStyler().getLegendFont(), new FontRenderContext(null, true, false)); + TextLayout textLayout = new TextLayout(df.format(percentage) + "%", stylerPie.getPieFont(), new FontRenderContext(null, true, false)); Rectangle2D percentageRectangle = textLayout.getBounds(); double xCenter = pieBounds.getX() + pieBounds.getWidth() / 2 - percentageRectangle.getWidth() / 2; double yCenter = pieBounds.getY() + pieBounds.getHeight() / 2 + percentageRectangle.getHeight() / 2; double angle = (arcAngle + startAngle) - arcAngle / 2; - double xOffset = xCenter + Math.cos(Math.toRadians(angle)) * (pieBounds.getWidth() / 3.33); - double yOffset = yCenter - Math.sin(Math.toRadians(angle)) * (pieBounds.getHeight() / 3.33); + double xOffset = xCenter + Math.cos(Math.toRadians(angle)) * (pieBounds.getWidth() / 2 * stylerPie.getAnnotationDistance()); + double yOffset = yCenter - Math.sin(Math.toRadians(angle)) * (pieBounds.getHeight() / 2 * stylerPie.getAnnotationDistance()); g.setColor(stylerPie.getChartFontColor()); g.setFont(stylerPie.getChartTitleFont()); diff --git a/xchart/src/main/java/org/knowm/xchart/internal/style/Theme_.java b/xchart/src/main/java/org/knowm/xchart/internal/style/Theme_.java index d52ca4ab15762e1497a3873847d8d8687cf1af21..f985dcfb35c81a58c85f66ebb78cc1ccd98af747 100644 --- a/xchart/src/main/java/org/knowm/xchart/internal/style/Theme_.java +++ b/xchart/src/main/java/org/knowm/xchart/internal/style/Theme_.java @@ -140,6 +140,10 @@ public interface Theme_ extends SeriesMarkers, SeriesLines, SeriesColors { public double getStartAngleInDegrees(); + public Font getPieFont(); + + public double getAnnotationDistance(); + // Line, Scatter, Area Charts /////////////////////////////// public int getMarkerSize(); diff --git a/xchart/src/main/java/org/knowm/xchart/internal/style/Theme_GGPlot2.java b/xchart/src/main/java/org/knowm/xchart/internal/style/Theme_GGPlot2.java index 33b047d517e71623989848728155f5fa2510fe22..f5cc3279eaa9ad5b92c41221ee82b7822280d97e 100644 --- a/xchart/src/main/java/org/knowm/xchart/internal/style/Theme_GGPlot2.java +++ b/xchart/src/main/java/org/knowm/xchart/internal/style/Theme_GGPlot2.java @@ -354,6 +354,18 @@ public class Theme_GGPlot2 implements Theme_ { return 0; } + @Override + public Font getPieFont() { + + return new Font(Font.SANS_SERIF, Font.PLAIN, 15); + } + + @Override + public double getAnnotationDistance() { + + return .67; + } + // Line, Scatter, Area Charts /////////////////////////////// @Override diff --git a/xchart/src/main/java/org/knowm/xchart/internal/style/Theme_Matlab.java b/xchart/src/main/java/org/knowm/xchart/internal/style/Theme_Matlab.java index 569d3486044eff41876a58f3f166ac84cf009831..04f12954e54b7aab595419e83064a8fd7ab785f8 100644 --- a/xchart/src/main/java/org/knowm/xchart/internal/style/Theme_Matlab.java +++ b/xchart/src/main/java/org/knowm/xchart/internal/style/Theme_Matlab.java @@ -358,6 +358,18 @@ public class Theme_Matlab implements Theme_ { return 0; } + @Override + public Font getPieFont() { + + return new Font(Font.SANS_SERIF, Font.PLAIN, 15); + } + + @Override + public double getAnnotationDistance() { + + return .67; + } + // Line, Scatter, Area Charts /////////////////////////////// @Override diff --git a/xchart/src/main/java/org/knowm/xchart/internal/style/Theme_XChart.java b/xchart/src/main/java/org/knowm/xchart/internal/style/Theme_XChart.java index 8ea4902a1e8df19bef259c3543bb7630aae9c455..ceaacec3839f3f92b40c47b0677b6572f01ec79f 100644 --- a/xchart/src/main/java/org/knowm/xchart/internal/style/Theme_XChart.java +++ b/xchart/src/main/java/org/knowm/xchart/internal/style/Theme_XChart.java @@ -354,6 +354,18 @@ public class Theme_XChart implements Theme_ { return 0; } + @Override + public Font getPieFont() { + + return new Font(Font.SANS_SERIF, Font.PLAIN, 15); + } + + @Override + public double getAnnotationDistance() { + + return .67; + } + // Line, Scatter, Area Charts /////////////////////////////// @Override