diff --git a/chartfx-chart/src/main/java/io/fair_acc/chartfx/axes/Axis.java b/chartfx-chart/src/main/java/io/fair_acc/chartfx/axes/Axis.java index 434ac5a93..75d8e0bc8 100644 --- a/chartfx-chart/src/main/java/io/fair_acc/chartfx/axes/Axis.java +++ b/chartfx-chart/src/main/java/io/fair_acc/chartfx/axes/Axis.java @@ -2,6 +2,8 @@ import java.util.List; +import io.fair_acc.chartfx.ui.css.LineStyle; +import io.fair_acc.chartfx.ui.css.TextStyle; import io.fair_acc.dataset.events.BitState; import javafx.beans.property.BooleanProperty; import javafx.beans.property.DoubleProperty; @@ -112,17 +114,27 @@ public interface Axis extends AxisDescription { */ Side getSide(); + StringConverter getTickLabelFormatter(); + /** - * @return the fill for all tick labels + * @return the style for the axis label */ - Paint getTickLabelFill(); + TextStyle getAxisLabel(); /** - * @return the font for all tick labels + * @return the style for all tick labels */ - Font getTickLabelFont(); + TextStyle getTickLabelStyle(); - StringConverter getTickLabelFormatter(); + /** + * @return the style for all major tick marks + */ + LineStyle getMajorTickStyle(); + + /** + * @return the style for all minor tick marks + */ + LineStyle getMinorTickStyle(); /** * @return the gap between the tick mark lines and the chart canvas diff --git a/chartfx-chart/src/main/java/io/fair_acc/chartfx/axes/spi/AbstractAxis.java b/chartfx-chart/src/main/java/io/fair_acc/chartfx/axes/spi/AbstractAxis.java index 5bb18ecc8..05eecac9a 100644 --- a/chartfx-chart/src/main/java/io/fair_acc/chartfx/axes/spi/AbstractAxis.java +++ b/chartfx-chart/src/main/java/io/fair_acc/chartfx/axes/spi/AbstractAxis.java @@ -17,9 +17,7 @@ import javafx.scene.CacheHint; import javafx.scene.canvas.Canvas; import javafx.scene.canvas.GraphicsContext; -import javafx.scene.layout.HBox; import javafx.scene.layout.Priority; -import javafx.scene.layout.VBox; import javafx.scene.paint.Color; import javafx.scene.text.Text; import javafx.scene.text.TextAlignment; @@ -83,11 +81,6 @@ protected void invalidated() { }; protected AbstractAxis() { - super(); - // Can we remove these? Axes without a chart don't work anymore. - VBox.setVgrow(this, Priority.ALWAYS); - HBox.setHgrow(this, Priority.ALWAYS); - // Canvas settings setMouseTransparent(false); setPickOnBounds(true); @@ -100,15 +93,11 @@ protected AbstractAxis() { getChildren().add(canvas); // set default axis title/label alignment - updateTickLabelAlignment(); - updateAxisLabelAlignment(); - sideProperty().addListener((ch, o, n) -> { - updateAxisLabelAlignment(); - updateTickLabelAlignment(); - }); - tickLabelRotationProperty().addListener((ch, o, n) -> { - updateTickLabelAlignment(); - }); + PropUtil.initAndRunOnChange(this::updateAxisLabelAlignment, + sideProperty()); + PropUtil.initAndRunOnChange(this::updateTickLabelAlignment, + sideProperty(), + getTickLabelStyle().rotateProperty()); } protected AbstractAxis(final double lowerBound, final double upperBound) { @@ -920,7 +909,7 @@ public void drawAxis() { } - protected double measureTickMarkLength(final Double major) { + protected double measureTickMarkLength(final double major) { // N.B. this is a known performance hot-spot -> start optimisation here tmpTickMark.setValue(major, getTickMarkLabel(major)); return getSide().isHorizontal() ? tmpTickMark.getWidth() : tmpTickMark.getHeight(); diff --git a/chartfx-chart/src/main/java/io/fair_acc/chartfx/axes/spi/AbstractAxisParameter.java b/chartfx-chart/src/main/java/io/fair_acc/chartfx/axes/spi/AbstractAxisParameter.java index 3d338bb47..37a09b5bf 100644 --- a/chartfx-chart/src/main/java/io/fair_acc/chartfx/axes/spi/AbstractAxisParameter.java +++ b/chartfx-chart/src/main/java/io/fair_acc/chartfx/axes/spi/AbstractAxisParameter.java @@ -24,6 +24,7 @@ import io.fair_acc.chartfx.Chart; import io.fair_acc.chartfx.axes.Axis; import io.fair_acc.chartfx.axes.AxisLabelOverlapPolicy; +import io.fair_acc.chartfx.ui.css.CssPropertyFactory; import io.fair_acc.chartfx.ui.geometry.Side; /** @@ -39,8 +40,6 @@ public abstract class AbstractAxisParameter extends Pane implements Axis { * Create a auto-ranging AbstractAxisParameter */ public AbstractAxisParameter() { - super(); - // Properties that may be relevant to the layout and must always at least redraw the canvas PropUtil.runOnChange(invalidateLayout = state.onAction(ChartBits.AxisLayout, ChartBits.AxisCanvas), // distance to main line @@ -49,17 +48,13 @@ public AbstractAxisParameter() { tickMarkGap, // tick marks - tickMarkVisible, tickLength, majorTickStyle.changeCounterProperty(), // tick labels - tickLabelsVisible, tickLabelGap, - tickLabelRotation, overlapPolicy, tickLabelStyle.changeCounterProperty(), - tickLabelFont, // already in style // axis label axisLabelGap, @@ -102,14 +97,12 @@ public AbstractAxisParameter() { // Properties that require a redraw of the canvas but won't affect the placement of ticks PropUtil.runOnChange(invalidateCanvas = state.onAction(ChartBits.AxisCanvas), // minor ticks - minorTickVisible, minorTickStyle.changeCounterProperty(), // not used for layout calculation minorTickCount, minorTickLength, // item placement axisCenterPosition, - axisLabelTextAlignment, // the main properties of what the axis currently shows. // Used for internal computation, so we don't want them to @@ -179,11 +172,11 @@ public AbstractAxisParameter() { * Note that we can use the tick label style as a temporary node for getting the font metrics w/ the correct style. * Unmanaged nodes do not trigger a re-layout of the parent, but invisible text still computes valid font metrics. */ - private final StyleGroup styles = new StyleGroup(this, "axis"); - private final transient LineStyle majorTickStyle = styles.newLineStyle("axis-tick-mark"); - private final transient LineStyle minorTickStyle = styles.newLineStyle("axis-minor-tick-mark"); - private final transient TextStyle tickLabelStyle = styles.newTextStyle("axis-tick-label"); - private final transient TextStyle axisLabel = styles.newTextStyle("axis-label"); + private final transient StyleGroup styleGroup = new StyleGroup(this, "axis"); + private final transient LineStyle majorTickStyle = styleGroup.newLineStyle("axis-major-tick-mark"); + private final transient LineStyle minorTickStyle = styleGroup.newLineStyle("axis-minor-tick-mark"); + private final transient TextStyle tickLabelStyle = styleGroup.newTextStyle("axis-tick-label"); + private final transient TextStyle axisLabel = styleGroup.newTextStyle("axis-label"); protected final transient DoubleArrayList majorTickMarkValues = new DoubleArrayList(); protected final transient DoubleArrayList minorTickMarkValues = new DoubleArrayList(); @@ -216,29 +209,14 @@ public AbstractAxisParameter() { */ private final transient StyleableDoubleProperty axisCenterPosition = CSS.createDoubleProperty(this, "axisCenterPosition", 0.5, true, (oldVal, newVal) -> Math.max(0.0, Math.min(newVal, 1.0))); - /** - * axis label alignment - */ - private final transient ObjectProperty axisLabelTextAlignment = axisLabel.textAlignmentProperty(); - /** * The axis label */ private final transient StyleableStringProperty axisName = CSS.createStringProperty(this, "axisName", ""); - /** - * true if tick marks should be displayed - */ - private final transient BooleanProperty tickMarkVisible = majorTickStyle.visibleProperty(); - - /** - * true if tick mark labels should be displayed - */ - private final transient BooleanProperty tickLabelsVisible = tickLabelStyle.visibleProperty(); - /** * The length of tick mark lines - */ + */ private final transient StyleableDoubleProperty axisPadding = CSS.createDoubleProperty(this, "axisPadding", 15.0); /** @@ -261,16 +239,6 @@ public AbstractAxisParameter() { } }); - /** - * The font for all tick labels - */ - private final transient ObjectProperty tickLabelFont = tickLabelStyle.fontProperty(); - - /** - * The fill for all tick labels - */ - private final transient ObjectProperty tickLabelFill = tickLabelStyle.fillProperty(); - /** * The gap between tick marks and the canvas area */ @@ -306,16 +274,6 @@ public AbstractAxisParameter() { */ private final transient BooleanProperty animated = new SimpleBooleanProperty(this, "animated", false); - /** - * Rotation in degrees of tick mark labels from their normal horizontal. - */ - protected final transient DoubleProperty tickLabelRotation = tickLabelStyle.rotateProperty(); - - /** - * true if minor tick marks should be displayed - */ - private final transient BooleanProperty minorTickVisible = minorTickStyle.visibleProperty(); - /** * The scale factor from data units to visual units */ @@ -356,7 +314,7 @@ public AbstractAxisParameter() { private final transient StyleableIntegerProperty minorTickCount = CSS.createIntegerProperty(this, "minorTickCount", 10); protected boolean isInvertedAxis = false; // internal use (for performance reason) - private final transient BooleanProperty invertAxis = PropUtil.createBooleanProperty(this, "invertAxis", isInvertedAxis, () -> { + private final transient StyleableBooleanProperty invertAxis = CSS.createBooleanProperty(this, "invertAxis", isInvertedAxis, () -> { isInvertedAxis = invertAxisProperty().get(); }); @@ -372,7 +330,7 @@ public AbstractAxisParameter() { private final transient StyleableBooleanProperty autoRangeRounding = CSS.createBooleanProperty(this, "autoRangeRounding", false); - private final transient DoubleProperty autoRangePadding = PropUtil.createDoubleProperty(this, "autoRangePadding", 0); + private final transient StyleableDoubleProperty autoRangePadding = CSS.createDoubleProperty(this, "autoRangePadding", 0); /** * The axis unit label @@ -382,7 +340,7 @@ public AbstractAxisParameter() { /** * The axis unit label */ - private final transient BooleanProperty autoUnitScaling = PropUtil.createBooleanProperty(this, "autoUnitScaling", false); + private final transient StyleableBooleanProperty autoUnitScaling = CSS.createBooleanProperty(this, "autoUnitScaling", false); /** * The axis unit label @@ -489,10 +447,6 @@ public DoubleProperty axisLabelGapProperty() { return axisLabelGap; } - public ObjectProperty axisLabelTextAlignmentProperty() { - return axisLabelTextAlignment; - } - public DoubleProperty axisPaddingProperty() { return axisPadding; } @@ -549,10 +503,6 @@ public double getAxisLabelGap() { return axisLabelGapProperty().get(); } - public TextAlignment getAxisLabelTextAlignment() { - return axisLabelTextAlignmentProperty().get(); - } - public double getAxisPadding() { return axisPaddingProperty().get(); } @@ -662,17 +612,6 @@ public Side getSide() { return sideProperty().get(); } - @Override - public Paint getTickLabelFill() { - return tickLabelFillProperty().get(); - } - - @Override - public Font getTickLabelFont() { - return tickLabelFontProperty().get(); - } - - @Override public StringConverter getTickLabelFormatter() { return tickLabelFormatterProperty().getValue(); } @@ -687,10 +626,6 @@ public double getTickLabelGap() { return tickLabelGapProperty().get(); } - public double getTickLabelRotation() { - return tickLabelRotationProperty().getValue(); - } - @Override public double getTickLabelSpacing() { return tickLabelSpacingProperty().get(); @@ -813,18 +748,6 @@ public boolean isInvertedAxis() { return invertAxisProperty().get(); } - public boolean isMinorTickVisible() { - return minorTickVisibleProperty().get(); - } - - public boolean isTickLabelsVisible() { - return tickLabelsVisibleProperty().get(); - } - - public boolean isTickMarkVisible() { - return tickMarkVisibleProperty().get(); - } - /** * This is true when the axis corresponds to a time-axis * @@ -854,10 +777,6 @@ public DoubleProperty minorTickLengthProperty() { return minorTickLength; } - public BooleanProperty minorTickVisibleProperty() { - return minorTickVisible; - } - /** * The value between each major tick mark in data units. This is automatically set if we are auto-ranging. * @@ -977,10 +896,6 @@ public void setAxisLabelGap(final double value) { axisLabelGapProperty().set(value); } - public void setAxisLabelTextAlignment(final TextAlignment value) { - axisLabelTextAlignmentProperty().set(value); - } - public void setAxisPadding(final double value) { axisPaddingProperty().set(value); } @@ -1020,10 +935,6 @@ public void setMinorTickLength(final double value) { minorTickLengthProperty().set(value); } - public void setMinorTickVisible(final boolean value) { - minorTickVisibleProperty().set(value); - } - @Override public void setName(final String value) { nameProperty().set(value); @@ -1038,14 +949,6 @@ public void setSide(final Side value) { sideProperty().set(value); } - public void setTickLabelFill(final Paint value) { - tickLabelFillProperty().set(value); - } - - public void setTickLabelFont(final Font value) { - tickLabelFontProperty().set(value); - } - public void setTickLabelFormatter(final StringConverter value) { tickLabelFormatterProperty().setValue(value); } @@ -1058,26 +961,14 @@ public void setTickLabelGap(final double value) { tickLabelGapProperty().set(value); } - public void setTickLabelRotation(final double value) { - tickLabelRotationProperty().setValue(value); - } - public void setTickLabelSpacing(final double value) { tickLabelSpacingProperty().set(value); } - public void setTickLabelsVisible(final boolean value) { - tickLabelsVisibleProperty().set(value); - } - public void setTickLength(final double value) { tickLengthProperty().set(value); } - public void setTickMarkVisible(final boolean value) { - tickMarkVisibleProperty().set(value); - } - /** * This is {@code true} when the axis labels and data point should be plotted according to some time-axis definition * @@ -1111,14 +1002,6 @@ public ObjectProperty sideProperty() { return side; } - public ObjectProperty tickLabelFillProperty() { - return tickLabelFill; - } - - public ObjectProperty tickLabelFontProperty() { - return tickLabelFont; - } - public ObjectProperty> tickLabelFormatterProperty() { return tickLabelFormatter; } @@ -1131,26 +1014,14 @@ public DoubleProperty tickLabelGapProperty() { return tickLabelGap; } - public DoubleProperty tickLabelRotationProperty() { - return tickLabelRotation; - } - public DoubleProperty tickLabelSpacingProperty() { return tickLabelSpacing; } - public BooleanProperty tickLabelsVisibleProperty() { - return tickLabelsVisible; - } - public DoubleProperty tickLengthProperty() { return tickLength; } - public BooleanProperty tickMarkVisibleProperty() { - return tickMarkVisible; - } - /** * This is {@code true} when the axis labels and data point should be plotted according to some time-axis definition * @@ -1171,6 +1042,26 @@ public DoubleProperty unitScalingProperty() { return unitScaling; } + protected boolean isMinorTickVisible() { + return minorTickStyle.isVisible(); + } + + protected boolean isTickLabelsVisible() { + return tickLabelStyle.isVisible(); + } + + protected boolean isTickMarkVisible() { + return majorTickStyle.isVisible(); + } + + protected double getTickLabelRotation() { + return tickLabelStyle.getRotate(); + } + + protected Font getTickLabelFont() { + return getTickLabelStyle().getFont(); + } + protected void setScale(final double scale) { scalePropertyImpl().set(scale); } diff --git a/chartfx-chart/src/main/java/io/fair_acc/chartfx/renderer/spi/GridRenderer.java b/chartfx-chart/src/main/java/io/fair_acc/chartfx/renderer/spi/GridRenderer.java index d4c68d4e0..287feec6e 100644 --- a/chartfx-chart/src/main/java/io/fair_acc/chartfx/renderer/spi/GridRenderer.java +++ b/chartfx-chart/src/main/java/io/fair_acc/chartfx/renderer/spi/GridRenderer.java @@ -149,8 +149,8 @@ protected void drawPolarCircle(final GraphicsContext gc, final Axis yAxis, final gc.strokeOval(xCentre - yNorm, yCentre - yNorm, 2 * yNorm, 2 * yNorm); gc.save(); - gc.setFont(yAxis.getTickLabelFont()); - gc.setStroke(yAxis.getTickLabelFill()); + gc.setFont(yAxis.getTickLabelStyle().getFont()); + gc.setStroke(yAxis.getTickLabelStyle().getFill()); // TODO: why stroke rather than fill? gc.setLineDashes((double[]) null); gc.setTextBaseline(VPos.CENTER); gc.strokeText(label, xCentre + (int) yAxis.getTickLabelGap(), yCentre - yNorm); @@ -198,8 +198,8 @@ protected void drawPolarGrid(final GraphicsContext gc, XYChart xyChart) { gc.strokeLine(xCentre, yCentre, x, y); gc.save(); - gc.setFont(yAxis.getTickLabelFont()); - gc.setStroke(yAxis.getTickLabelFill()); + gc.setFont(yAxis.getTickLabelStyle().getFont()); + gc.setStroke(yAxis.getTickLabelStyle().getFill()); // TODO: why stroke rather than fill? gc.setLineDashes((double[]) null); gc.setTextBaseline(VPos.CENTER); if (phi < 350) { diff --git a/chartfx-chart/src/main/java/io/fair_acc/chartfx/renderer/spi/financial/css/FinancialColorSchemeConfig.java b/chartfx-chart/src/main/java/io/fair_acc/chartfx/renderer/spi/financial/css/FinancialColorSchemeConfig.java index fc6c786b3..77f955ccd 100644 --- a/chartfx-chart/src/main/java/io/fair_acc/chartfx/renderer/spi/financial/css/FinancialColorSchemeConfig.java +++ b/chartfx-chart/src/main/java/io/fair_acc/chartfx/renderer/spi/financial/css/FinancialColorSchemeConfig.java @@ -200,10 +200,10 @@ public void applyTo(String theme, String customColorScheme, XYChart chart) throw chart.getGridRenderer().getHorizontalMajorGrid().setStroke(Color.DARKGREY); chart.getGridRenderer().getVerticalMajorGrid().setStroke(Color.DARKGREY); if (chart.getXAxis() instanceof AbstractAxisParameter) { - ((AbstractAxisParameter) chart.getXAxis()).setTickLabelFill(Color.BLACK); + ((AbstractAxisParameter) chart.getXAxis()).getTickLabelStyle().setFill(Color.BLACK); } if (chart.getYAxis() instanceof AbstractAxisParameter) { - ((AbstractAxisParameter) chart.getYAxis()).setTickLabelFill(Color.BLACK); + ((AbstractAxisParameter) chart.getYAxis()).getTickLabelStyle().setFill(Color.BLACK); } break; @@ -216,10 +216,10 @@ public void applyTo(String theme, String customColorScheme, XYChart chart) throw chart.getGridRenderer().getHorizontalMajorGrid().setVisible(false); chart.getTitleLabel().setTextFill(Color.WHITE); if (chart.getXAxis() instanceof AbstractAxisParameter) { - ((AbstractAxisParameter) chart.getXAxis()).setTickLabelFill(Color.WHITESMOKE); + ((AbstractAxisParameter) chart.getXAxis()).getTickLabelStyle().setFill(Color.WHITESMOKE); } if (chart.getYAxis() instanceof AbstractAxisParameter) { - ((AbstractAxisParameter) chart.getYAxis()).setTickLabelFill(Color.WHITESMOKE); + ((AbstractAxisParameter) chart.getYAxis()).getTickLabelStyle().setFill(Color.WHITESMOKE); } break; @@ -233,10 +233,10 @@ public void applyTo(String theme, String customColorScheme, XYChart chart) throw chart.getGridRenderer().getHorizontalMajorGrid().setStroke(Color.rgb(106, 106, 106)); chart.getTitleLabel().setTextFill(Color.WHITE); if (chart.getXAxis() instanceof AbstractAxisParameter) { - ((AbstractAxisParameter) chart.getXAxis()).setTickLabelFill(Color.rgb(194, 194, 194)); + ((AbstractAxisParameter) chart.getXAxis()).getTickLabelStyle().setFill(Color.rgb(194, 194, 194)); } if (chart.getYAxis() instanceof AbstractAxisParameter) { - ((AbstractAxisParameter) chart.getYAxis()).setTickLabelFill(Color.rgb(194, 194, 194)); + ((AbstractAxisParameter) chart.getYAxis()).getTickLabelStyle().setFill(Color.rgb(194, 194, 194)); } break; } diff --git a/chartfx-chart/src/main/java/io/fair_acc/chartfx/utils/PropUtil.java b/chartfx-chart/src/main/java/io/fair_acc/chartfx/utils/PropUtil.java index 043e7960c..f4ddcbb6e 100644 --- a/chartfx-chart/src/main/java/io/fair_acc/chartfx/utils/PropUtil.java +++ b/chartfx-chart/src/main/java/io/fair_acc/chartfx/utils/PropUtil.java @@ -62,6 +62,11 @@ public static ObjectProperty createObjectProperty(Object bean, String nam return prop; } + public static void initAndRunOnChange(Runnable action, ObservableValue... conditions) { + action.run(); + runOnChange(action, conditions); + } + /** * subscribes to property changes without requiring value boxing */ diff --git a/chartfx-chart/src/main/resources/io/fair_acc/chartfx/chart.css b/chartfx-chart/src/main/resources/io/fair_acc/chartfx/chart.css index 5caa47ba7..b63af9a1e 100644 --- a/chartfx-chart/src/main/resources/io/fair_acc/chartfx/chart.css +++ b/chartfx-chart/src/main/resources/io/fair_acc/chartfx/chart.css @@ -167,6 +167,9 @@ -fx-auto-ranging: true; -fx-auto-grow-ranging: false; -fx-auto-range-rounding: false; + -fx-auto-range-padding: 0; + -fx-auto-unit-scaling: false; + -fx-invert-axis: false; -fx-axis-center-position: 0.5; -fx-overlap-policy: SKIP_ALT; -fx-axis-padding: 15px; @@ -198,9 +201,10 @@ -fx-rotate: -90; } .axis .axis-tick-label { + -fx-fill: black; -fx-font-size: 10px; } -.axis .axis-tick-mark, .axis .axis-minor-tick-mark { +.axis .axis-major-tick-mark, .axis .axis-minor-tick-mark { visibility: visible; -fx-stroke: #c3c3c3; -fx-stroke-width: 1; diff --git a/chartfx-chart/src/main/resources/io/fair_acc/chartfx/chart.scss b/chartfx-chart/src/main/resources/io/fair_acc/chartfx/chart.scss index 17539cbe6..a3483c564 100644 --- a/chartfx-chart/src/main/resources/io/fair_acc/chartfx/chart.scss +++ b/chartfx-chart/src/main/resources/io/fair_acc/chartfx/chart.scss @@ -130,7 +130,7 @@ $null: null; // null gets removed from Sass. Maybe create a placeholder and repl } .chart-content { .axis { - .axis-tick-mark { + .axis-major-tick-mark { } .axis-minor-tick-mark { } @@ -228,6 +228,10 @@ $null: null; // null gets removed from Sass. Maybe create a placeholder and repl -fx-auto-grow-ranging: false; // range updates, but won't shrink -fx-auto-range-rounding: false; // auto range w/ rounding + -fx-auto-range-padding: 0; + -fx-auto-unit-scaling: false; + -fx-invert-axis: false; + // Tick spacing (along the width on horizontal axes) -fx-axis-center-position: 0.5; // only for centered axes: relative position of the center line -fx-overlap-policy: SKIP_ALT; // DO_NOTHING, SKIP_ALT, NARROW_FONT, SHIFT_ALT, FORCED_SHIFT_ALT @@ -266,11 +270,12 @@ $null: null; // null gets removed from Sass. Maybe create a placeholder and repl } .axis-tick-label { + -fx-fill: black; -fx-text-alignment: $null; -fx-font-size: 10px; } - .axis-tick-mark, .axis-minor-tick-mark { + .axis-major-tick-mark, .axis-minor-tick-mark { visibility: visible; -fx-stroke: #c3c3c3ff; -fx-stroke-width: 1.0; diff --git a/chartfx-chart/src/test/java/io/fair_acc/chartfx/axes/spi/AbstractAxisParameterTests.java b/chartfx-chart/src/test/java/io/fair_acc/chartfx/axes/spi/AbstractAxisParameterTests.java index 089772e36..e4df9e429 100644 --- a/chartfx-chart/src/test/java/io/fair_acc/chartfx/axes/spi/AbstractAxisParameterTests.java +++ b/chartfx-chart/src/test/java/io/fair_acc/chartfx/axes/spi/AbstractAxisParameterTests.java @@ -231,11 +231,6 @@ void testPositionGetterSetters() { assertEquals(0.2, axis.getAxisCenterPosition()); axis.setAxisCenterPosition(0.5); - assertEquals(TextAlignment.CENTER, axis.getAxisLabelTextAlignment()); //TODO: rename function w.r.t. setter - axis.setAxisLabelTextAlignment(TextAlignment.LEFT); - assertEquals(TextAlignment.LEFT, axis.getAxisLabelTextAlignment()); //TODO: rename function w.r.t. setter - axis.setAxisLabelTextAlignment(TextAlignment.CENTER); - axis.setAxisLabelGap(5); assertEquals(5, axis.getAxisLabelGap()); @@ -248,11 +243,11 @@ void testTickLabelGetterSetters() { AbstractAxisParameter axis = new EmptyAbstractAxisParameter(); axis.set(0.0, 10.0); - axis.setTickLabelFill(Color.RED); - assertEquals(Color.RED, axis.getTickLabelFill()); + axis.getTickLabelStyle().setFill(Color.RED); + assertEquals(Color.RED, axis.getTickLabelStyle().getFill()); final Font font = Font.font("System", 10); - axis.setTickLabelFont(font); + axis.getTickLabelStyle().setFont(font); assertEquals(font, axis.getTickLabelFont()); StringConverter myConverter = new StringConverter<>() { @@ -275,13 +270,13 @@ public String toString(Number object) { axis.setTickLabelSpacing(5); assertEquals(5, axis.getTickLabelSpacing()); - axis.setTickLabelRotation(10); + axis.getTickLabelStyle().setRotate(10); assertEquals(10, axis.getTickLabelRotation()); assertTrue(axis.isTickLabelsVisible()); - axis.setTickLabelsVisible(false); + axis.getTickLabelStyle().setVisible(false); assertFalse(axis.isTickLabelsVisible()); - axis.setTickLabelsVisible(true); + axis.getTickLabelStyle().setVisible(true); } @Test @@ -316,17 +311,17 @@ void testTickMarkGetterSetters() { assertEquals(20, axis.getMinorTickLength()); assertTrue(axis.isMinorTickVisible()); - axis.setMinorTickVisible(false); + axis.getMinorTickStyle().setVisible(false); assertFalse(axis.isMinorTickVisible()); - axis.setMinorTickVisible(true); + axis.getMinorTickStyle().setVisible(true); axis.setTickLength(20); assertEquals(20, axis.getTickLength()); assertTrue(axis.isTickMarkVisible()); - axis.setTickMarkVisible(false); + axis.getMajorTickStyle().setVisible(false); assertFalse(axis.isTickMarkVisible()); - axis.setTickMarkVisible(true); + axis.getMajorTickStyle().setVisible(true); assertNotNull(axis.getTickMarks()); assertNotNull(axis.getTickMarkValues()); diff --git a/chartfx-chart/src/test/java/io/fair_acc/chartfx/axes/spi/AbstractAxisTests.java b/chartfx-chart/src/test/java/io/fair_acc/chartfx/axes/spi/AbstractAxisTests.java index 32021e29b..ea8dc63b9 100644 --- a/chartfx-chart/src/test/java/io/fair_acc/chartfx/axes/spi/AbstractAxisTests.java +++ b/chartfx-chart/src/test/java/io/fair_acc/chartfx/axes/spi/AbstractAxisTests.java @@ -95,8 +95,8 @@ void testDrawRoutines(final Side side) { assertDoesNotThrow(() -> axis.drawAxis(null, 100, 100)); assertDoesNotThrow(() -> AbstractAxis.drawTickMarkLabel(gc, 10, 10, 1.0, new TickMark(Side.BOTTOM, 1.0, 1.0, 0.0, "label"))); assertDoesNotThrow(() -> AbstractAxis.drawTickMarkLabel(gc, 10, 10, 0.9, new TickMark(Side.BOTTOM, 1.0, 1.0, 90.0, "label"))); - axis.setTickMarkVisible(false); - axis.setMinorTickVisible(false); + axis.getMajorTickStyle().setVisible(false); + axis.getMinorTickStyle().setVisible(false); assertDoesNotThrow(() -> axis.drawAxis(gc, 100, 100)); } @@ -278,7 +278,7 @@ public void tickMarkLabelAlignment() { var style = axis.getTickLabelStyle(); // No rotation - axis.setTickLabelRotation(0); + axis.getTickLabelStyle().setRotate(0); axis.setSide(Side.TOP); assertEquals(TextAlignment.CENTER, style.getTextAlignment()); assertEquals(VPos.BOTTOM, style.getTextOrigin()); @@ -296,7 +296,7 @@ public void tickMarkLabelAlignment() { assertEquals(VPos.CENTER, style.getTextOrigin()); // 90 deg - axis.setTickLabelRotation(90); + axis.getTickLabelStyle().setRotate(90); axis.setSide(Side.TOP); assertEquals(TextAlignment.LEFT, style.getTextAlignment()); assertEquals(VPos.CENTER, style.getTextOrigin()); @@ -315,7 +315,7 @@ public void tickMarkLabelAlignment() { // special non 'n x 90 degree' rotation cases for top/bottom - axis.setTickLabelRotation(45); + axis.getTickLabelStyle().setRotate(45); axis.setSide(Side.TOP); assertEquals(TextAlignment.LEFT, style.getTextAlignment()); diff --git a/chartfx-chart/src/test/java/io/fair_acc/chartfx/renderer/spi/financial/CandleStickRendererTest.java b/chartfx-chart/src/test/java/io/fair_acc/chartfx/renderer/spi/financial/CandleStickRendererTest.java index d687fe7e1..021b7fb3d 100644 --- a/chartfx-chart/src/test/java/io/fair_acc/chartfx/renderer/spi/financial/CandleStickRendererTest.java +++ b/chartfx-chart/src/test/java/io/fair_acc/chartfx/renderer/spi/financial/CandleStickRendererTest.java @@ -86,7 +86,7 @@ public void start(Stage stage) throws Exception { @TestFx public void categoryAxisTest() { final CategoryAxis xAxis = new CategoryAxis("time [iso]"); - xAxis.setTickLabelRotation(90); + xAxis.getTickLabelStyle().setRotate(90); xAxis.setOverlapPolicy(AxisLabelOverlapPolicy.SKIP_ALT); ohlcvDataSet.setCategoryBased(true); diff --git a/chartfx-chart/src/test/java/io/fair_acc/chartfx/renderer/spi/financial/FootprintRendererTest.java b/chartfx-chart/src/test/java/io/fair_acc/chartfx/renderer/spi/financial/FootprintRendererTest.java index fea585138..bbb1a0104 100644 --- a/chartfx-chart/src/test/java/io/fair_acc/chartfx/renderer/spi/financial/FootprintRendererTest.java +++ b/chartfx-chart/src/test/java/io/fair_acc/chartfx/renderer/spi/financial/FootprintRendererTest.java @@ -100,7 +100,7 @@ private void financialComponentTest(Stage stage, String scheme) throws Exception @TestFx public void categoryAxisTest() { final CategoryAxis xAxis = new CategoryAxis("time [iso]"); - xAxis.setTickLabelRotation(90); + xAxis.getTickLabelStyle().setRotate(90); xAxis.setOverlapPolicy(AxisLabelOverlapPolicy.SKIP_ALT); ohlcvDataSet.setCategoryBased(true); diff --git a/chartfx-chart/src/test/java/io/fair_acc/chartfx/renderer/spi/financial/HighLowRendererTest.java b/chartfx-chart/src/test/java/io/fair_acc/chartfx/renderer/spi/financial/HighLowRendererTest.java index 4f715102c..f48dff3d7 100644 --- a/chartfx-chart/src/test/java/io/fair_acc/chartfx/renderer/spi/financial/HighLowRendererTest.java +++ b/chartfx-chart/src/test/java/io/fair_acc/chartfx/renderer/spi/financial/HighLowRendererTest.java @@ -86,7 +86,7 @@ void start(Stage stage) throws Exception { @TestFx void categoryAxisTest() { final CategoryAxis xAxis = new CategoryAxis("time [iso]"); - xAxis.setTickLabelRotation(90); + xAxis.getTickLabelStyle().setRotate(90); xAxis.setOverlapPolicy(AxisLabelOverlapPolicy.SKIP_ALT); ohlcvDataSet.setCategoryBased(true); diff --git a/chartfx-chart/src/test/java/io/fair_acc/chartfx/renderer/spi/financial/PositionFinancialRendererPaintAfterEPTest.java b/chartfx-chart/src/test/java/io/fair_acc/chartfx/renderer/spi/financial/PositionFinancialRendererPaintAfterEPTest.java index 464233442..d1ef7017b 100644 --- a/chartfx-chart/src/test/java/io/fair_acc/chartfx/renderer/spi/financial/PositionFinancialRendererPaintAfterEPTest.java +++ b/chartfx-chart/src/test/java/io/fair_acc/chartfx/renderer/spi/financial/PositionFinancialRendererPaintAfterEPTest.java @@ -97,7 +97,7 @@ public void start(Stage stage) throws Exception { @TestFx public void categoryAxisTest() { final CategoryAxis xAxis = new CategoryAxis("time [iso]"); - xAxis.setTickLabelRotation(90); + xAxis.getTickLabelStyle().setRotate(90); xAxis.setOverlapPolicy(AxisLabelOverlapPolicy.SKIP_ALT); ohlcvDataSet.setCategoryBased(true); chart.getAxes().add(0, xAxis); diff --git a/chartfx-samples/src/main/java/io/fair_acc/sample/chart/ChartAnatomySample.java b/chartfx-samples/src/main/java/io/fair_acc/sample/chart/ChartAnatomySample.java index 8bb6a71b8..e3286b8a7 100644 --- a/chartfx-samples/src/main/java/io/fair_acc/sample/chart/ChartAnatomySample.java +++ b/chartfx-samples/src/main/java/io/fair_acc/sample/chart/ChartAnatomySample.java @@ -48,13 +48,13 @@ public void start(final Stage primaryStage) { xAxis2.setSide(Side.TOP); xAxis3.setSide(Side.CENTER_HOR); xAxis3.setMinorTickCount(2); - xAxis3.setAxisLabelTextAlignment(TextAlignment.RIGHT); + xAxis3.getAxisLabel().setTextAlignment(TextAlignment.RIGHT); yAxis1.setSide(Side.LEFT); yAxis2.setSide(Side.RIGHT); yAxis3.setSide(Side.RIGHT); yAxis4.setSide(Side.CENTER_VER); yAxis4.setMinorTickCount(2); - yAxis4.setAxisLabelTextAlignment(TextAlignment.RIGHT); + yAxis4.getAxisLabel().setTextAlignment(TextAlignment.RIGHT); final Chart chart = new Chart() { @Override diff --git a/chartfx-samples/src/main/java/io/fair_acc/sample/chart/ChartIndicatorSample.java b/chartfx-samples/src/main/java/io/fair_acc/sample/chart/ChartIndicatorSample.java index 11304c6fc..ec7ca8169 100644 --- a/chartfx-samples/src/main/java/io/fair_acc/sample/chart/ChartIndicatorSample.java +++ b/chartfx-samples/src/main/java/io/fair_acc/sample/chart/ChartIndicatorSample.java @@ -200,8 +200,8 @@ public BorderPane initComponents() { xAxis1.setAutoRangeRounding(false); xAxis2.setAutoRangeRounding(false); - xAxis1.setTickLabelRotation(45); - xAxis2.setTickLabelRotation(45); + xAxis1.getTickLabelStyle().setRotate(45); + xAxis2.getTickLabelStyle().setRotate(45); xAxis1.invertAxis(false); xAxis2.invertAxis(false); xAxis1.setTimeAxis(true); diff --git a/chartfx-samples/src/main/java/io/fair_acc/sample/chart/HistogramSample.java b/chartfx-samples/src/main/java/io/fair_acc/sample/chart/HistogramSample.java index f00854c5f..fe321927b 100644 --- a/chartfx-samples/src/main/java/io/fair_acc/sample/chart/HistogramSample.java +++ b/chartfx-samples/src/main/java/io/fair_acc/sample/chart/HistogramSample.java @@ -74,7 +74,7 @@ private void fillDemoData() { public Node getChartPanel(final Stage primaryStage) { final StackPane root = new StackPane(); final CategoryAxis xAxis1 = new CategoryAxis("months"); - xAxis1.setTickLabelRotation(90); + xAxis1.getTickLabelStyle().setRotate(90); final DefaultNumericAxis xAxis2 = new DefaultNumericAxis("x-Axis"); xAxis2.setAutoRangeRounding(false); diff --git a/chartfx-samples/src/main/java/io/fair_acc/sample/chart/RollingBufferSample.java b/chartfx-samples/src/main/java/io/fair_acc/sample/chart/RollingBufferSample.java index c6dfefa69..71996c1e0 100644 --- a/chartfx-samples/src/main/java/io/fair_acc/sample/chart/RollingBufferSample.java +++ b/chartfx-samples/src/main/java/io/fair_acc/sample/chart/RollingBufferSample.java @@ -165,7 +165,7 @@ public BorderPane initComponents() { final DefaultNumericAxis xAxis1 = new DefaultNumericAxis("time"); xAxis1.setAutoRangeRounding(false); - xAxis1.setTickLabelRotation(45); + xAxis1.getTickLabelStyle().setRotate(45); xAxis1.setMinorTickCount(30); xAxis1.invertAxis(false); xAxis1.setTimeAxis(true); diff --git a/chartfx-samples/src/main/java/io/fair_acc/sample/chart/RollingBufferSortedTreeSample.java b/chartfx-samples/src/main/java/io/fair_acc/sample/chart/RollingBufferSortedTreeSample.java index 4db151502..9efa86ed3 100644 --- a/chartfx-samples/src/main/java/io/fair_acc/sample/chart/RollingBufferSortedTreeSample.java +++ b/chartfx-samples/src/main/java/io/fair_acc/sample/chart/RollingBufferSortedTreeSample.java @@ -146,7 +146,7 @@ public BorderPane initComponents() { final DefaultNumericAxis xAxis1 = new DefaultNumericAxis("time"); xAxis1.setAutoRangeRounding(false); - xAxis1.setTickLabelRotation(45); + xAxis1.getTickLabelStyle().setRotate(45); xAxis1.invertAxis(false); xAxis1.setTimeAxis(true); final DefaultNumericAxis yAxis1 = new DefaultNumericAxis("beam intensity", "ppp"); diff --git a/chartfx-samples/src/main/java/io/fair_acc/sample/chart/RotatedAxisLabelSample.java b/chartfx-samples/src/main/java/io/fair_acc/sample/chart/RotatedAxisLabelSample.java index 8542242e8..d434ed261 100644 --- a/chartfx-samples/src/main/java/io/fair_acc/sample/chart/RotatedAxisLabelSample.java +++ b/chartfx-samples/src/main/java/io/fair_acc/sample/chart/RotatedAxisLabelSample.java @@ -45,7 +45,7 @@ public Node getChartPanel(final Stage primaryStage) { final DefaultNumericAxis yAxis1 = getSynchedAxis(yAxis0, "y-axis (-90°, " + policy + ")"); yAxis1.setSide(Side.LEFT); - yAxis1.setTickLabelRotation(-90); + yAxis1.getTickLabelStyle().setRotate(-90); yAxis1.setOverlapPolicy(policy); chart.getAxes().addAll(xAxis1, yAxis1); @@ -58,7 +58,7 @@ public Node getChartPanel(final Stage primaryStage) { final DefaultNumericAxis yAxis2 = getSynchedAxis(yAxis0, "y-axis (-90°, " + policy + ") + extra label spacing"); yAxis2.setSide(Side.LEFT); - yAxis2.setTickLabelRotation(-90); + yAxis2.getTickLabelStyle().setRotate(-90); yAxis2.setOverlapPolicy(policy); yAxis2.setTickLabelSpacing(10); @@ -69,13 +69,13 @@ public Node getChartPanel(final Stage primaryStage) { final DefaultNumericAxis xAxis1 = getSynchedAxis(xAxis0, "x-axis (45°)"); xAxis1.setSide(Side.BOTTOM); xAxis1.setOverlapPolicy(AxisLabelOverlapPolicy.DO_NOTHING); - xAxis1.setTickLabelRotation(45); + xAxis1.getTickLabelStyle().setRotate(45); xAxis1.setMaxMajorTickLabelCount(40); final DefaultNumericAxis xAxis2 = getSynchedAxis(xAxis0, "x-axis (90°)"); xAxis2.setSide(Side.BOTTOM); xAxis2.setOverlapPolicy(AxisLabelOverlapPolicy.DO_NOTHING); - xAxis2.setTickLabelRotation(90); + xAxis2.getTickLabelStyle().setRotate(90); xAxis2.setMaxMajorTickLabelCount(40); chart.getAxes().addAll(xAxis1, xAxis2); @@ -83,7 +83,7 @@ public Node getChartPanel(final Stage primaryStage) { final DefaultNumericAxis yAxis1 = getSynchedAxis(yAxis0, "y-axis (-45°)"); yAxis1.setSide(Side.LEFT); yAxis1.setOverlapPolicy(AxisLabelOverlapPolicy.DO_NOTHING); - yAxis1.setTickLabelRotation(-45); + yAxis1.getTickLabelStyle().setRotate(-45); chart.getAxes().addAll(yAxis1); @@ -100,8 +100,7 @@ private static DefaultNumericAxis getSynchedAxis(DefaultNumericAxis orig, String final DefaultNumericAxis axis = new DefaultNumericAxis(newAxisName); axis.minProperty().bind(orig.minProperty()); axis.maxProperty().bind(orig.maxProperty()); - axis.setTickLabelRotation(orig.getTickLabelRotation()); - + axis.getTickLabelStyle().setRotate(orig.getTickLabelStyle().getRotate()); return axis; }