From 4f52259aa9c9b6f8ab43245ef80b1b19ff6b5d60 Mon Sep 17 00:00:00 2001 From: 0xboobface <0xboobface@gmail.com> Date: Tue, 30 Jun 2020 20:28:44 +0200 Subject: [PATCH] Add mouse click behaviour to range slider --- .../controls/range/RangeSliderBehavior.java | 40 +++++++++++++++++-- .../ui/controls/range/RangeSliderSkin.java | 10 +---- 2 files changed, 38 insertions(+), 12 deletions(-) diff --git a/client/src/main/java/ctbrec/ui/controls/range/RangeSliderBehavior.java b/client/src/main/java/ctbrec/ui/controls/range/RangeSliderBehavior.java index e7987c03..2a38c596 100644 --- a/client/src/main/java/ctbrec/ui/controls/range/RangeSliderBehavior.java +++ b/client/src/main/java/ctbrec/ui/controls/range/RangeSliderBehavior.java @@ -5,6 +5,9 @@ import java.util.List; import com.sun.javafx.scene.control.behavior.BehaviorBase; // NOSONAR import com.sun.javafx.scene.control.inputmap.InputMap; // NOSONAR +import javafx.scene.Node; +import javafx.scene.input.MouseEvent; + public class RangeSliderBehavior extends BehaviorBase> { private RangeSlider rangeSlider; @@ -12,6 +15,13 @@ public class RangeSliderBehavior extends BehaviorBase rangeSlider) { super(rangeSlider); this.rangeSlider = rangeSlider; + rangeSlider.addEventFilter(MouseEvent.MOUSE_CLICKED, this::sliderClicked); + } + + private void sliderClicked(MouseEvent me) { + Node source = (Node) me.getSource(); + double positionPercentage = me.getX() / source.getBoundsInParent().getWidth(); + moveClosestThumbTo(positionPercentage); } @Override @@ -26,9 +36,9 @@ public class RangeSliderBehavior extends BehaviorBase= high.doubleValue()) { - newPosition = rangeSlider.getRange().getTicks().get(rangeSlider.getLow().intValue()); + newPosition = getLow(); } rangeSlider.setLow(newPosition); } @@ -39,13 +49,34 @@ public class RangeSliderBehavior extends BehaviorBase extends BehaviorBase> { this.behavior = behavior; initTrack(); initThumbs(thumbRange); - registerChangeListener(control.getLow(), (obsVal) -> getSkinnable().requestLayout()); - registerChangeListener(control.getHigh(), (obsVal) -> getSkinnable().requestLayout()); + registerChangeListener(control.getLow(), obsVal -> getSkinnable().requestLayout()); + registerChangeListener(control.getHigh(), obsVal -> getSkinnable().requestLayout()); } private void initThumbs(ThumbRange t) { @@ -44,8 +44,6 @@ public class RangeSliderSkin extends SkinBase> { preDragThumbPoint = t.low.localToParent(me.getX(), me.getY()); preDragPos = (getSkinnable().getLow().doubleValue() - getSkinnable().getMinimum().doubleValue()) / (getMaxMinusMinNoZero()); }); - - t.low.setOnMouseDragged(me -> { Point2D cur = t.low.localToParent(me.getX(), me.getY()); double dragPos = (isHorizontal()) ? cur.getX() - preDragThumbPoint.getX() : -(cur.getY() - preDragThumbPoint.getY()); @@ -56,15 +54,12 @@ public class RangeSliderSkin extends SkinBase> { preDragThumbPoint = t.high.localToParent(me.getX(), me.getY()); preDragPos = (getSkinnable().getHigh().doubleValue() - getSkinnable().getMinimum().doubleValue()) / (getMaxMinusMinNoZero()); }); - - t.high.setOnMouseDragged(me -> { boolean orientation = getSkinnable().getOrientation() == Orientation.HORIZONTAL; double trackLen = orientation ? track.getWidth() : track.getHeight(); Point2D cur = t.high.localToParent(me.getX(), me.getY()); double dragPos = getSkinnable().getOrientation() != Orientation.HORIZONTAL ? -(cur.getY() - preDragThumbPoint.getY()) : cur.getX() - preDragThumbPoint.getX(); behavior.highThumbDragged(preDragPos + dragPos / trackLen); - }); } @@ -208,7 +203,6 @@ public class RangeSliderSkin extends SkinBase> { if (isHorizontal()) { if (showTickMarks) { double w = Math.max(140, tickLine.prefWidth(-1)); - System.err.println("computePrefWidth " + w); return w; } else { return 140;