From 5c42ea51e40909f161701c17bafe8fa506db5cf0 Mon Sep 17 00:00:00 2001 From: Tim Molter <tim.molter@gmail.com> Date: Tue, 5 Feb 2013 16:53:34 +0100 Subject: [PATCH] more style abstraction work --- .../xeiam/xchart/internal/chartpart/Axis.java | 9 +- .../xchart/internal/chartpart/AxisTick.java | 11 +-- .../internal/chartpart/AxisTickMarks.java | 30 ++++--- .../xchart/internal/chartpart/AxisTitle.java | 9 +- .../xeiam/xchart/internal/chartpart/Plot.java | 5 +- .../com/xeiam/xchart/style/StyleManager.java | 84 +++++++++++++++++++ .../com/xeiam/xchart/style/theme/Theme.java | 10 +++ .../xeiam/xchart/style/theme/XChartTheme.java | 29 +++++++ 8 files changed, 156 insertions(+), 31 deletions(-) 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 3a14963f..e3bcc2c2 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 @@ -144,7 +144,7 @@ public class Axis implements IChartPart { if (axisPair.chart.getStyleManager().isxAxisTitleVisible()) { TextLayout textLayout = new TextLayout(axisTitle.getText(), axisTick.axis.axisPair.chart.getStyleManager().getAxisTitleFont(), new FontRenderContext(null, true, false)); Rectangle rectangle = textLayout.getPixelBounds(null, 0, 0); - titleHeight = rectangle.getHeight() + AxisTitle.AXIS_TITLE_PADDING; + titleHeight = rectangle.getHeight() + axisTick.axis.axisPair.chart.getStyleManager().getAxisTitlePadding(); } // Axis tick labels @@ -152,7 +152,8 @@ public class Axis implements IChartPart { if (axisPair.chart.getStyleManager().isxAxisTicksVisible()) { TextLayout textLayout = new TextLayout("0", axisTick.axis.axisPair.chart.getStyleManager().getAxisTicksFont(), new FontRenderContext(null, true, false)); Rectangle rectangle = textLayout.getPixelBounds(null, 0, 0); - axisTickLabelsHeight = rectangle.getHeight() + AxisTick.AXIS_TICK_PADDING + AxisTickMarks.TICK_LENGTH + Plot.PLOT_PADDING; + axisTickLabelsHeight = rectangle.getHeight() + axisPair.chart.getStyleManager().getAxisTickPadding() + axisPair.chart.getStyleManager().getAxisTickMarkLength() + + axisPair.chart.getStyleManager().getPlotPadding(); } return (int) (titleHeight + axisTickLabelsHeight); } else { // Y-Axis @@ -202,8 +203,8 @@ public class Axis implements IChartPart { // calculate paint zone // |____________________| - int xOffset = (int) (axisPair.yAxis.getBounds().getWidth() + (axisPair.chart.getStyleManager().isyAxisTicksVisible() ? Plot.PLOT_PADDING : 0) + axisPair.chart.getStyleManager() - .getChartPadding()); + int xOffset = (int) (axisPair.yAxis.getBounds().getWidth() + (axisPair.chart.getStyleManager().isyAxisTicksVisible() ? axisPair.chart.getStyleManager().getPlotPadding() : 0) + axisPair.chart + .getStyleManager().getChartPadding()); int yOffset = (int) (axisPair.yAxis.getBounds().getY() + axisPair.yAxis.getBounds().getHeight()); int width = (int) (axisPair.chart.width - axisPair.yAxis.getBounds().getWidth() - axisPair.getChartLegendBounds().getWidth() - (axisPair.chart.getStyleManager().isLegendVisible() ? 3 : 2) * axisPair.chart.getStyleManager().getChartPadding()); 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 2d35abb7..030fe332 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 @@ -30,7 +30,7 @@ import com.xeiam.xchart.internal.interfaces.IHideable; import com.xeiam.xchart.internal.misc.AxisValueFormatterUtil; /** - * An axis tick. + * An axis tick */ public class AxisTick implements IChartPart, IHideable { @@ -40,9 +40,6 @@ public class AxisTick implements IChartPart, IHideable { /** the default tick mark step hint for y axis */ private static final int DEFAULT_TICK_MARK_STEP_HINT_Y = 44; - /** the padding between the tick labels and the tick marks */ - protected final static int AXIS_TICK_PADDING = 4; - /** parent */ protected Axis axis; @@ -123,14 +120,14 @@ public class AxisTick implements IChartPart, IHideable { axisTickMarks.paint(g); if (axis.direction == Axis.Direction.Y) { - bounds = new Rectangle((int) axisTickLabels.getBounds().getX(), (int) (axisTickLabels.getBounds().getY()), (int) (axisTickLabels.getBounds().getWidth() + AXIS_TICK_PADDING + axisTickMarks - .getBounds().getWidth()), (int) (axisTickMarks.getBounds().getHeight())); + bounds = new Rectangle((int) axisTickLabels.getBounds().getX(), (int) (axisTickLabels.getBounds().getY()), (int) (axisTickLabels.getBounds().getWidth() + + axis.axisPair.chart.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() - + AXIS_TICK_PADDING + axisTickLabels.getBounds().getHeight())); + + axis.axisPair.chart.getStyleManager().getAxisTickPadding() + axisTickLabels.getBounds().getHeight())); // g.setColor(Color.red); // g.draw(bounds); } 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 db9eebd9..1acf0741 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,9 +27,6 @@ import com.xeiam.xchart.internal.interfaces.IChartPart; */ public class AxisTickMarks implements IChartPart { - /** the tick length */ - public static final int TICK_LENGTH = 3; - /** parent */ private AxisTick axisTick; @@ -64,7 +61,7 @@ public class AxisTickMarks implements IChartPart { if (axisTick.axis.direction == Axis.Direction.Y) { // Y-Axis - int xOffset = (int) (axisTick.axisTickLabels.getBounds().getX() + axisTick.axisTickLabels.getBounds().getWidth() + AxisTick.AXIS_TICK_PADDING); + int xOffset = (int) (axisTick.axisTickLabels.getBounds().getX() + axisTick.axisTickLabels.getBounds().getWidth() + axisTick.axis.axisPair.chart.getStyleManager().getAxisTickPadding()); int yOffset = (int) (axisTick.axis.getPaintZone().getY()); // tick marks @@ -75,21 +72,24 @@ public class AxisTickMarks implements IChartPart { g.setColor(axisTick.axis.axisPair.chart.getStyleManager().getChartBordersColor()); g.setStroke(stroke); - g.drawLine(xOffset, yOffset + (int) (axisTick.axis.getPaintZone().getHeight() - tickLocation), xOffset + TICK_LENGTH, yOffset + (int) (axisTick.axis.getPaintZone().getHeight() - tickLocation)); + g.drawLine(xOffset, yOffset + (int) (axisTick.axis.getPaintZone().getHeight() - tickLocation), xOffset + axisTick.axis.axisPair.chart.getStyleManager().getAxisTickMarkLength(), yOffset + + (int) (axisTick.axis.getPaintZone().getHeight() - tickLocation)); } // Line - g.drawLine(xOffset + TICK_LENGTH, yOffset, xOffset + TICK_LENGTH, yOffset + (int) axisTick.axis.getPaintZone().getHeight()); - + if (axisTick.axis.axisPair.chart.getStyleManager().isAxisTicksLineVisible()) { + g.drawLine(xOffset + axisTick.axis.axisPair.chart.getStyleManager().getAxisTickMarkLength(), yOffset, xOffset + axisTick.axis.axisPair.chart.getStyleManager().getAxisTickMarkLength(), yOffset + + (int) axisTick.axis.getPaintZone().getHeight()); + } // bounds - bounds = new Rectangle(xOffset, yOffset, TICK_LENGTH, (int) axisTick.axis.getPaintZone().getHeight()); + bounds = new Rectangle(xOffset, yOffset, axisTick.axis.axisPair.chart.getStyleManager().getAxisTickMarkLength(), (int) axisTick.axis.getPaintZone().getHeight()); // g.setColor(Color.yellow); // g.draw(bounds); } else { // X-Axis int xOffset = (int) (axisTick.axis.getPaintZone().getX()); - int yOffset = (int) (axisTick.axisTickLabels.getBounds().getY() - AxisTick.AXIS_TICK_PADDING); + int yOffset = (int) (axisTick.axisTickLabels.getBounds().getY() - axisTick.axis.axisPair.chart.getStyleManager().getAxisTickPadding()); // tick marks for (int i = 0; i < axisTick.tickLabels.size(); i++) { @@ -99,13 +99,19 @@ public class AxisTickMarks implements IChartPart { g.setColor(axisTick.axis.axisPair.chart.getStyleManager().getChartBordersColor()); g.setStroke(stroke); - g.drawLine(xOffset + tickLocation, yOffset, xOffset + tickLocation, yOffset - TICK_LENGTH); + g.drawLine(xOffset + tickLocation, yOffset, xOffset + tickLocation, yOffset - axisTick.axis.axisPair.chart.getStyleManager().getAxisTickMarkLength()); } + // Line - g.drawLine(xOffset, yOffset - TICK_LENGTH, xOffset + (int) axisTick.axis.getPaintZone().getWidth(), yOffset - TICK_LENGTH); + if (axisTick.axis.axisPair.chart.getStyleManager().isAxisTicksLineVisible()) { + + g.drawLine(xOffset, yOffset - axisTick.axis.axisPair.chart.getStyleManager().getAxisTickMarkLength(), xOffset + (int) axisTick.axis.getPaintZone().getWidth(), yOffset + - axisTick.axis.axisPair.chart.getStyleManager().getAxisTickMarkLength()); + } // bounds - bounds = new Rectangle(xOffset, yOffset - TICK_LENGTH, (int) axisTick.axis.getPaintZone().getWidth(), TICK_LENGTH); + bounds = new Rectangle(xOffset, yOffset - axisTick.axis.axisPair.chart.getStyleManager().getAxisTickMarkLength(), (int) axisTick.axis.getPaintZone().getWidth(), axisTick.axis.axisPair.chart + .getStyleManager().getAxisTickMarkLength()); // g.setColor(Color.yellow); // g.draw(bounds); } 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 256fb64d..2317d430 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 @@ -29,8 +29,6 @@ import com.xeiam.xchart.internal.interfaces.IHideable; */ public class AxisTitle implements IChartPart, IHideable { - protected final static int AXIS_TITLE_PADDING = 10; - /** parent */ private final Axis axis; @@ -111,8 +109,8 @@ public class AxisTitle implements IChartPart, IHideable { g.setTransform(orig); // bounds - bounds = new Rectangle((int) (xOffset - nonRotatedRectangle.getHeight()), (int) (yOffset - nonRotatedRectangle.getWidth()), (int) nonRotatedRectangle.getHeight() + AXIS_TITLE_PADDING, - (int) nonRotatedRectangle.getWidth()); + bounds = new Rectangle((int) (xOffset - nonRotatedRectangle.getHeight()), (int) (yOffset - nonRotatedRectangle.getWidth()), (int) nonRotatedRectangle.getHeight() + + axis.axisPair.chart.getStyleManager().getAxisTitlePadding(), (int) nonRotatedRectangle.getWidth()); // g.setColor(Color.blue); // g.draw(bounds); } else { @@ -133,7 +131,8 @@ public class AxisTitle implements IChartPart, IHideable { textLayout.draw(g, xOffset, (float) (yOffset - rectangle.getY())); - bounds = new Rectangle(xOffset, yOffset - AXIS_TITLE_PADDING, (int) rectangle.getWidth(), (int) rectangle.getHeight() + AXIS_TITLE_PADDING); + bounds = new Rectangle(xOffset, yOffset - axis.axisPair.chart.getStyleManager().getAxisTitlePadding(), (int) rectangle.getWidth(), (int) rectangle.getHeight() + + axis.axisPair.chart.getStyleManager().getAxisTitlePadding()); // g.setColor(Color.blue); // g.draw(bounds); 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 879adc31..e9f42604 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 @@ -33,8 +33,6 @@ public class Plot implements IChartPart { protected PlotContent plotContent; - public static final int PLOT_PADDING = 3; - /** the bounds */ private Rectangle bounds; @@ -57,7 +55,8 @@ public class Plot implements IChartPart { bounds = new Rectangle(); // calculate bounds - int xOffset = (int) (chart.axisPair.yAxis.getBounds().getX() + chart.axisPair.yAxis.getBounds().getWidth() + (chart.getStyleManager().isyAxisTicksVisible() ? (Plot.PLOT_PADDING + 1) : 0)); + int xOffset = (int) (chart.axisPair.yAxis.getBounds().getX() + chart.axisPair.yAxis.getBounds().getWidth() + (chart.getStyleManager().isyAxisTicksVisible() ? (chart.getStyleManager() + .getPlotPadding() + 1) : 0)); int yOffset = (int) (chart.axisPair.yAxis.getBounds().getY()); int width = (int) chart.axisPair.xAxis.getBounds().getWidth(); int height = (int) chart.axisPair.yAxis.getBounds().getHeight(); diff --git a/xchart/src/main/java/com/xeiam/xchart/style/StyleManager.java b/xchart/src/main/java/com/xeiam/xchart/style/StyleManager.java index be84e638..2fea5b2e 100644 --- a/xchart/src/main/java/com/xeiam/xchart/style/StyleManager.java +++ b/xchart/src/main/java/com/xeiam/xchart/style/StyleManager.java @@ -54,6 +54,11 @@ public class StyleManager { private boolean xAxisTicksVisible; private boolean yAxisTicksVisible; private Font axisTicksFont; + private int axisTickMarkLength; + private int axisTickPadding; + private boolean isAxisTicksLineVisible; + private int plotPadding; + private int axisTitlePadding; /** * Constructor @@ -85,6 +90,11 @@ public class StyleManager { xAxisTicksVisible = theme.isXAxisTicksVisible(); yAxisTicksVisible = theme.isYAxisTicksVisible(); axisTicksFont = theme.getAxisTicksFont(); + axisTickMarkLength = theme.getAxisTickMarkLength(); + axisTickPadding = theme.getAxisTickPadding(); + isAxisTicksLineVisible = theme.isAxisTicksLineVisible(); + plotPadding = theme.getPlotPadding(); + axisTitlePadding = theme.getAxisTitlePadding(); } /** @@ -372,4 +382,78 @@ public class StyleManager { return axisTicksFont; } + /** + * set the axis tick mark length + * + * @param axisTickMarkLength + */ + public void setAxisTickMarkLength(int axisTickMarkLength) { + + this.axisTickMarkLength = axisTickMarkLength; + } + + public int getAxisTickMarkLength() { + + return axisTickMarkLength; + } + + /** + * the padding between the tick labels and the tick marks + * + * @param axisTickPadding + */ + public void setAxisTickPadding(int axisTickPadding) { + + this.axisTickPadding = axisTickPadding; + } + + public int getAxisTickPadding() { + + return axisTickPadding; + } + + /** + * sets the visibility of the line parallel to the plot edges that go along with the tick marks + * + * @param isAxisTicksLineVisible + */ + public void setAxisTicksLineVisible(boolean isAxisTicksLineVisible) { + + this.isAxisTicksLineVisible = isAxisTicksLineVisible; + } + + public boolean isAxisTicksLineVisible() { + + return isAxisTicksLineVisible; + } + + /** + * sets the pading between the tick marks and the plot area + * + * @param plotPadding + */ + public void setPlotPadding(int plotPadding) { + + this.plotPadding = plotPadding; + } + + public int getPlotPadding() { + + return plotPadding; + } + + /** + * sets the padding between the axis title and the tick labels + * + * @param axisTitlePadding + */ + public void setAxisTitlePadding(int axisTitlePadding) { + + this.axisTitlePadding = axisTitlePadding; + } + + public int getAxisTitlePadding() { + + return axisTitlePadding; + } } diff --git a/xchart/src/main/java/com/xeiam/xchart/style/theme/Theme.java b/xchart/src/main/java/com/xeiam/xchart/style/theme/Theme.java index 4066f2d1..87abdcec 100644 --- a/xchart/src/main/java/com/xeiam/xchart/style/theme/Theme.java +++ b/xchart/src/main/java/com/xeiam/xchart/style/theme/Theme.java @@ -69,4 +69,14 @@ public interface Theme { public Font getAxisTicksFont(); + public int getAxisTickMarkLength(); + + public int getAxisTickPadding(); + + public boolean isAxisTicksLineVisible(); + + public int getAxisTitlePadding(); + + public int getPlotPadding(); + } diff --git a/xchart/src/main/java/com/xeiam/xchart/style/theme/XChartTheme.java b/xchart/src/main/java/com/xeiam/xchart/style/theme/XChartTheme.java index 67624290..93ed3b98 100644 --- a/xchart/src/main/java/com/xeiam/xchart/style/theme/XChartTheme.java +++ b/xchart/src/main/java/com/xeiam/xchart/style/theme/XChartTheme.java @@ -133,4 +133,33 @@ public class XChartTheme implements Theme { return new Font(Font.SANS_SERIF, Font.BOLD, 12); } + @Override + public int getAxisTickMarkLength() { + + return 3; + } + + @Override + public int getAxisTickPadding() { + + return 4; + } + + @Override + public boolean isAxisTicksLineVisible() { + + return true; + } + + @Override + public int getPlotPadding() { + + return 3; + } + + @Override + public int getAxisTitlePadding() { + + return 10; + } } -- GitLab