From 4d8ebc3a8e5370afa69e04a507ce7c62f4200380 Mon Sep 17 00:00:00 2001 From: rstein Date: Sat, 14 Sep 2019 12:08:40 +0200 Subject: [PATCH] minor: made drawing of grid on top/bottom CSS more easily configurable --- .../gsi/chart/renderer/spi/GridRenderer.java | 49 ++++++------------- 1 file changed, 16 insertions(+), 33 deletions(-) diff --git a/chartfx-chart/src/main/java/de/gsi/chart/renderer/spi/GridRenderer.java b/chartfx-chart/src/main/java/de/gsi/chart/renderer/spi/GridRenderer.java index 19600d28f..6e6839bb3 100644 --- a/chartfx-chart/src/main/java/de/gsi/chart/renderer/spi/GridRenderer.java +++ b/chartfx-chart/src/main/java/de/gsi/chart/renderer/spi/GridRenderer.java @@ -47,22 +47,18 @@ public class GridRenderer extends Pane implements Renderer { private static final String STYLE_CLASS_MINOR_GRID_LINE = "chart-minor-grid-lines"; private static final String STYLE_CLASS_MINOR_GRID_LINE_H = "chart-minor-horizontal-lines"; private static final String STYLE_CLASS_MINOR_GRID_LINE_V = "chart-minor-vertical-lines"; + private static final String STYLE_CLASS_GRID_ON_TOP = "chart-grid-line-on-top"; private static final PseudoClass SELECTED_PSEUDO_CLASS = PseudoClass.getPseudoClass("withMinor"); - private static final List> STYLEABLES; - static { - final List> styleables = new ArrayList<>(Region.getClassCssMetaData()); - styleables.add(StyleableProperties.GRID_ON_TOP); - STYLEABLES = Collections.unmodifiableList(styleables); - } private static final double[] DEFAULT_GRID_DASH_PATTERM = { 4.5, 2.5 }; protected final Chart baseChart; - protected final BooleanProperty drawGridOnTop = new SimpleStyleableBooleanProperty(StyleableProperties.GRID_ON_TOP, - this, "drawGridOnTop", true); + // protected final BooleanProperty drawGridOnTop = new SimpleStyleableBooleanProperty(StyleableProperties.GRID_ON_TOP, + // this, "drawGridOnTop", true); private final Line horMajorGridStyleNode; private final Line verMajorGridStyleNode; private final Line horMinorGridStyleNode; private final Line verMinorGridStyleNode; + private final Line drawGridOnTopNode; private final Group gridStyleNodes = new Group(); protected final ObservableList axesList = FXCollections.observableArrayList(); @@ -92,8 +88,13 @@ public GridRenderer(final XYChart chart) { verMinorGridStyleNode.getStyleClass().add(GridRenderer.STYLE_CLASS_MINOR_GRID_LINE_V); verMinorGridStyleNode.setVisible(false); + drawGridOnTopNode = new Line(); + drawGridOnTopNode.getStyleClass().add(GridRenderer.STYLE_CLASS_GRID_ON_TOP); + drawGridOnTopNode.getStyleClass().add(GridRenderer.STYLE_CLASS_GRID_ON_TOP); + drawGridOnTopNode.setVisible(true); + gridStyleNodes.getChildren().addAll(horMajorGridStyleNode, verMajorGridStyleNode, horMinorGridStyleNode, - verMinorGridStyleNode); + verMinorGridStyleNode, drawGridOnTopNode); getChildren().add(gridStyleNodes); final Scene scene = new Scene(this); @@ -104,12 +105,15 @@ public GridRenderer(final XYChart chart) { verMajorGridStyleNode.getPseudoClassStates().addListener(listener); horMinorGridStyleNode.getPseudoClassStates().addListener(listener); verMinorGridStyleNode.getPseudoClassStates().addListener(listener); + drawGridOnTopNode.getPseudoClassStates().addListener(listener); ChangeListener change = (ob, o, n) -> { horMajorGridStyleNode.pseudoClassStateChanged(GridRenderer.SELECTED_PSEUDO_CLASS, horMinorGridStyleNode.isVisible()); verMajorGridStyleNode.pseudoClassStateChanged(GridRenderer.SELECTED_PSEUDO_CLASS, verMinorGridStyleNode.isVisible()); + drawGridOnTopNode.pseudoClassStateChanged(GridRenderer.SELECTED_PSEUDO_CLASS, + drawGridOnTopNode.isVisible()); chart.requestLayout(); }; @@ -118,10 +122,6 @@ public GridRenderer(final XYChart chart) { drawOnTopProperty().addListener(change); } - public static List> getClassCssMetaData() { - return GridRenderer.STYLEABLES; - } - private static double snap(final double value) { return (int) value + 0.5; } @@ -149,7 +149,7 @@ public Canvas drawLegendSymbol(DataSet dataSet, int dsIndex, int width, int heig * @return drawOnTop property */ public final BooleanProperty drawOnTopProperty() { - return drawGridOnTop; + return drawGridOnTopNode.visibleProperty(); } /** @@ -235,7 +235,7 @@ public final BooleanProperty horizontalMinorGridLinesVisibleProperty() { * @return drawOnTop state */ public final boolean isDrawOnTop() { - return drawGridOnTop.get(); + return drawGridOnTopNode.isVisible(); } @Override @@ -261,7 +261,7 @@ public void render(final GraphicsContext gc, final Chart chart, final int dataSe * @param state true: draw on top */ public final void setDrawOnTop(boolean state) { - drawGridOnTop.set(state); + drawGridOnTopNode.setVisible(state); } @Override @@ -489,21 +489,4 @@ protected void drawVerticalMinorGridLines(final GraphicsContext gc, final Axis x } } - private static class StyleableProperties { - - private static final CssMetaData GRID_ON_TOP = new CssMetaData( - "-fx-grid-on-top", BooleanConverter.getInstance(), Boolean.TRUE, false) { - - @SuppressWarnings("unchecked") - @Override - public StyleableProperty getStyleableProperty(final GridRenderer node) { - return (StyleableProperty) node.drawGridOnTop; - } - - @Override - public boolean isSettable(final GridRenderer node) { - return node.drawGridOnTop == null || !node.drawGridOnTop.isBound(); - } - }; - } }