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 44decee01fff3d398303b754bfc59be40da9d982..885732f652ab1dad002fbb7d260cadb1e498aa5a 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 @@ -137,7 +137,9 @@ public class Axis implements ChartPart { bounds = new Rectangle2D.Double(); // determine Axis bounds - if (direction == Direction.Y) { // Y-Axis + if (direction == Direction.Y) { // Y-Axis - gets called first + + // first determine the height of // calculate paint zone // ---- @@ -153,7 +155,6 @@ public class Axis implements ChartPart { double height = getChartPainter().getHeight() - yOffset - axisPair.getXAxis().getSizeHint() - getChartPainter().getStyleManager().getPlotPadding() - getChartPainter().getStyleManager().getChartPadding(); Rectangle2D yAxisRectangle = new Rectangle2D.Double(xOffset, yOffset, width, height); - this.paintZone = yAxisRectangle; g.setColor(Color.green); g.draw(yAxisRectangle); @@ -179,7 +180,7 @@ public class Axis implements ChartPart { double xOffset = axisPair.getYAxis().getBounds().getWidth() + (getChartPainter().getStyleManager().isYAxisTicksVisible() ? getChartPainter().getStyleManager().getPlotPadding() : 0) - + getChartPainter().getStyleManager().getChartPadding(); + + getChartPainter().getStyleManager().getChartPadding(); double yOffset = axisPair.getYAxis().getBounds().getY() + axisPair.getYAxis().getBounds().getHeight() + getChartPainter().getStyleManager().getPlotPadding(); double chartLegendWidth = 0; @@ -191,19 +192,19 @@ public class Axis implements ChartPart { getChartPainter().getWidth() - - axisPair.getYAxis().getBounds().getWidth() + - axisPair.getYAxis().getBounds().getWidth() // y-axis was already painted - - chartLegendWidth + - chartLegendWidth - - 2 + - 2 * getChartPainter().getStyleManager().getChartPadding() - - (getChartPainter().getStyleManager().isYAxisTicksVisible() ? (getChartPainter().getStyleManager().getPlotPadding()) : 0) + - (getChartPainter().getStyleManager().isYAxisTicksVisible() ? (getChartPainter().getStyleManager().getPlotPadding()) : 0) - - (getChartPainter().getStyleManager().getLegendPosition() == LegendPosition.OutsideE && getChartPainter().getStyleManager().isLegendVisible() ? getChartPainter().getStyleManager() - .getChartPadding() : 0) + - (getChartPainter().getStyleManager().getLegendPosition() == LegendPosition.OutsideE && getChartPainter().getStyleManager().isLegendVisible() ? getChartPainter().getStyleManager() + .getChartPadding() : 0) - ; + ; double height = this.getSizeHint(); Rectangle2D xAxisRectangle = new Rectangle2D.Double(xOffset, yOffset, width, height); @@ -232,8 +233,6 @@ public class Axis implements ChartPart { */ private double getSizeHint() { - System.out.println(axisTick.getTickLabels()); - if (direction == Direction.X) { // X-Axis // Axis title @@ -249,12 +248,12 @@ public class Axis implements ChartPart { if (getChartPainter().getStyleManager().isXAxisTicksVisible()) { String tickLabel = getChartPainter().getAxisPair().getXAxis().getAxisType().equals(AxisType.Date) ? new SimpleDateFormat(getChartPainter().getStyleManager().getDatePattern()).format(new Date()) : "0"; - TextLayout textLayout = new TextLayout(tickLabel, getChartPainter().getStyleManager().getAxisTickLabelsFont(), new FontRenderContext(null, true, false)); - AffineTransform rot = - getChartPainter().getStyleManager().getXAxisLabelRotation() == 0 ? null : AffineTransform.getRotateInstance(-Math.toRadians(getChartPainter().getStyleManager().getXAxisLabelRotation())); - Shape shape = textLayout.getOutline(rot); - Rectangle2D rectangle = shape.getBounds(); - axisTickLabelsHeight = rectangle.getHeight() + getChartPainter().getStyleManager().getAxisTickPadding() + getChartPainter().getStyleManager().getAxisTickMarkLength(); + TextLayout textLayout = new TextLayout(tickLabel, getChartPainter().getStyleManager().getAxisTickLabelsFont(), new FontRenderContext(null, true, false)); + AffineTransform rot = + getChartPainter().getStyleManager().getXAxisLabelRotation() == 0 ? null : AffineTransform.getRotateInstance(-Math.toRadians(getChartPainter().getStyleManager().getXAxisLabelRotation())); + Shape shape = textLayout.getOutline(rot); + Rectangle2D rectangle = shape.getBounds(); + axisTickLabelsHeight = rectangle.getHeight() + getChartPainter().getStyleManager().getAxisTickPadding() + getChartPainter().getStyleManager().getAxisTickMarkLength(); } return titleHeight + axisTickLabelsHeight; } 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 0488e045f6f6e7ba96b2bff34296879169b236b8..a0f739bb5d5b0abf5e52c6d900467f18bf27ee37 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 @@ -15,7 +15,6 @@ */ package com.xeiam.xchart.internal.chartpart; -import java.awt.Color; import java.awt.Graphics2D; import java.awt.geom.Rectangle2D; import java.util.List; @@ -64,10 +63,12 @@ public class AxisTick implements ChartPart { public void paint(Graphics2D g) { double workingSpace = 0.0; + // Y-Axis if (axis.getDirection() == Axis.Direction.Y) { workingSpace = axis.getPaintZone().getHeight(); // number of pixels the axis has to work with for drawing AxisTicks // System.out.println("workingspace= " + workingSpace); } + // X-Axis else if (axis.getDirection() == Axis.Direction.X) { workingSpace = axis.getPaintZone().getWidth(); // number of pixels the axis has to work with for drawing AxisTicks // System.out.println("workingspace= " + workingSpace); @@ -116,8 +117,8 @@ public class AxisTick implements ChartPart { ); - g.setColor(Color.red); - g.draw(bounds); + // g.setColor(Color.red); + // g.draw(bounds); } else if (axis.getDirection() == Axis.Direction.X && getChartPainter().getStyleManager().isXAxisTicksVisible()) { diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickCalculator.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickCalculator.java index fa0364ab824d8a32f9e80311c27c0fb5951df762..2f7447739b636fa01d1ecf42f3286ee5aad12d5b 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickCalculator.java +++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickCalculator.java @@ -102,13 +102,8 @@ public abstract class AxisTickCalculator { // System.out.println("******"); - // double firstPosition = minValue - (minValue % gridStep) + gridStep; double absoluteMinValue = minValue <= maxValue ? minValue : maxValue; double firstPosition = absoluteMinValue - (absoluteMinValue % gridStep) - gridStep; - // - // if ((firstPosition - minValue) > gridStep) { - // firstPosition = minValue - (minValue % gridStep); - // } return firstPosition; } diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickDateCalculator.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickDateCalculator.java index ee4d0554887fa174240b6ec0d213f9cadab5267a..40b6d956e911a403f02e188758ccddbb559504bd 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickDateCalculator.java +++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickDateCalculator.java @@ -70,11 +70,11 @@ public class AxisTickDateCalculator extends AxisTickCalculator { double firstPosition = getFirstPosition(gridStep); // generate all tickLabels and tickLocations from the first to last position - for (double tickPosition = firstPosition; tickPosition <= maxValue + 2 * gridStep; tickPosition = tickPosition + gridStep) { + for (double value = firstPosition; value <= maxValue + 2 * gridStep; value = value + gridStep) { - tickLabels.add(dateFormatter.formatDate(tickPosition, timeUnit)); + tickLabels.add(dateFormatter.formatDate(value, timeUnit)); // here we convert tickPosition finally to plot space, i.e. pixels - double tickLabelPosition = margin + ((tickPosition - minValue) / (maxValue - minValue) * tickSpace); + double tickLabelPosition = margin + ((value - minValue) / (maxValue - minValue) * tickSpace); tickLocations.add(tickLabelPosition); } } diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickNumericalCalculator.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickNumericalCalculator.java index 18ab2640884003326eb11d3950fd8cbe683e9df5..e0ac375ea4cac5d3072fc7e915540b4ca488fb98 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickNumericalCalculator.java +++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickNumericalCalculator.java @@ -73,15 +73,15 @@ public class AxisTickNumericalCalculator extends AxisTickCalculator { // generate all tickLabels and tickLocations from the first to last position double absoluteMaxValue = minValue <= maxValue ? maxValue : minValue; - for (BigDecimal tickPosition = cleanedFirstPosition; tickPosition.compareTo(BigDecimal.valueOf(absoluteMaxValue + 2 * cleanedGridStep.doubleValue())) < 0; tickPosition = tickPosition.add(cleanedGridStep)) { + for (BigDecimal value = cleanedFirstPosition; value.compareTo(BigDecimal.valueOf(absoluteMaxValue + 2 * cleanedGridStep.doubleValue())) < 0; value = value.add(cleanedGridStep)) { // System.out.println(tickPosition); - String tickLabel = numberFormatter.formatNumber(tickPosition, minValue, maxValue, axisDirection); + String tickLabel = numberFormatter.formatNumber(value, minValue, maxValue, axisDirection); // System.out.println(tickLabel); - tickLabels.add(tickLabel); + // here we convert tickPosition finally to plot space, i.e. pixels - double tickLabelPosition = margin + ((tickPosition.doubleValue() - minValue) / (maxValue - minValue) * tickSpace); + double tickLabelPosition = margin + ((value.doubleValue() - minValue) / (maxValue - minValue) * tickSpace); tickLocations.add(tickLabelPosition); } } diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/ChartPainter.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/ChartPainter.java index a19fb2f7aba49d8a1b1717ba1773c3351417e776..8242dbbf1b758dd37a139863df9348ed81cde884 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/ChartPainter.java +++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/ChartPainter.java @@ -109,6 +109,7 @@ public class ChartPainter { axisPair.paint(g); plot.paint(g); + // TODO why not just paint them first and skip the size hinting? chartTitle.paint(g); chartLegend.paint(g);