From e96bdc1c7e72a613c947c88e70d2916a2f552d59 Mon Sep 17 00:00:00 2001 From: 0xb00bface <0xboobface@gmail.com> Date: Sat, 14 Nov 2020 19:25:51 +0100 Subject: [PATCH] Adjust mouse scroll speed to height of the scrollpane content --- .../FasterVerticalScrollPaneSkin.java | 31 +++++++++++++++++++ .../java/ctbrec/ui/tabs/ThumbOverviewTab.java | 3 ++ 2 files changed, 34 insertions(+) create mode 100644 client/src/main/java/ctbrec/ui/controls/FasterVerticalScrollPaneSkin.java diff --git a/client/src/main/java/ctbrec/ui/controls/FasterVerticalScrollPaneSkin.java b/client/src/main/java/ctbrec/ui/controls/FasterVerticalScrollPaneSkin.java new file mode 100644 index 00000000..fee2f219 --- /dev/null +++ b/client/src/main/java/ctbrec/ui/controls/FasterVerticalScrollPaneSkin.java @@ -0,0 +1,31 @@ +package ctbrec.ui.controls; + +import javafx.scene.control.ScrollPane; +import javafx.scene.control.skin.ScrollPaneSkin; +import javafx.scene.input.ScrollEvent; + +public class FasterVerticalScrollPaneSkin extends ScrollPaneSkin { + + public FasterVerticalScrollPaneSkin(final ScrollPane scrollPane) { + super(scrollPane); + + getSkinnable().addEventFilter(ScrollEvent.SCROLL, event -> { + double ratio = scrollPane.getViewportBounds().getHeight() / scrollPane.getContent().getBoundsInLocal().getHeight(); + double baseUnitIncrement = 0.15; + double unitIncrement = baseUnitIncrement * ratio * 1.25; + getVerticalScrollBar().setUnitIncrement(unitIncrement); + + if (event.getDeltaX() < 0) { + getHorizontalScrollBar().increment(); + } else if (event.getDeltaX() > 0) { + getHorizontalScrollBar().decrement(); + } + if (event.getDeltaY() < 0) { + getVerticalScrollBar().increment(); + } else if (event.getDeltaY() > 0) { + getVerticalScrollBar().decrement(); + } + event.consume(); + }); + } +} diff --git a/client/src/main/java/ctbrec/ui/tabs/ThumbOverviewTab.java b/client/src/main/java/ctbrec/ui/tabs/ThumbOverviewTab.java index bdf13d8b..09ceac00 100644 --- a/client/src/main/java/ctbrec/ui/tabs/ThumbOverviewTab.java +++ b/client/src/main/java/ctbrec/ui/tabs/ThumbOverviewTab.java @@ -42,6 +42,7 @@ import ctbrec.ui.action.OpenRecordingsDir; import ctbrec.ui.controls.SearchBox; import ctbrec.ui.controls.SearchPopover; import ctbrec.ui.controls.SearchPopoverTreeList; +import ctbrec.ui.controls.FasterVerticalScrollPaneSkin; import javafx.animation.FadeTransition; import javafx.animation.Interpolator; import javafx.animation.ParallelTransition; @@ -196,6 +197,8 @@ public class ThumbOverviewTab extends Tab implements TabSelectionListener { scrollPane.setContent(grid); scrollPane.setFitToHeight(true); scrollPane.setFitToWidth(true); + FasterVerticalScrollPaneSkin scrollPaneSkin = new FasterVerticalScrollPaneSkin(scrollPane); + scrollPane.setSkin(scrollPaneSkin); BorderPane.setMargin(scrollPane, new Insets(5)); pagination = new HBox(5);