@@ -84,8 +84,9 @@ public class Zoomer extends ChartPlugin {
8484 private static final String ICON_ZOOM_V = "fa-arrows-v:" + FONT_SIZE ;
8585
8686 /**
87- * Default pan mouse filter passing on left mouse button with {@link MouseEvent#isControlDown() control key down }.
87+ * Default pan mouse filter passing on middle mouse button {@link MouseEventsHelper#isOnlyMiddleButtonDown() }.
8888 */
89+ @ Deprecated
8990 public static final Predicate <MouseEvent > DEFAULT_MOUSE_FILTER = MouseEventsHelper ::isOnlyMiddleButtonDown ;
9091 private double panShiftX ;
9192 private double panShiftY ;
@@ -94,26 +95,6 @@ public class Zoomer extends ChartPlugin {
9495 private final BooleanProperty autoZoomEnable = new SimpleBooleanProperty (this , "enableAutoZoom" , false );
9596 private final IntegerProperty autoZoomThreshold = new SimpleIntegerProperty (this , "autoZoomThreshold" ,
9697 DEFAULT_AUTO_ZOOM_THRESHOLD );
97- private final EventHandler <MouseEvent > panStartHandler = event -> {
98- if (isPannerEnabled () && DEFAULT_MOUSE_FILTER .test (event )) {
99- panStarted (event );
100- event .consume ();
101- }
102- };
103-
104- private final EventHandler <MouseEvent > panDragHandler = event -> {
105- if (panOngoing ()) {
106- panDragged (event );
107- event .consume ();
108- }
109- };
110-
111- private final EventHandler <MouseEvent > panEndHandler = event -> {
112- if (panOngoing ()) {
113- panEnded ();
114- event .consume ();
115- }
116- };
11798
11899 /**
119100 * Default zoom-in mouse filter passing on left mouse button (only).
@@ -125,6 +106,11 @@ public class Zoomer extends ChartPlugin {
125106 */
126107 public final Predicate <MouseEvent > defaultZoomOutMouseFilter = event -> MouseEventsHelper .isOnlySecondaryButtonDown (event ) && MouseEventsHelper .modifierKeysUp (event ) && isMouseEventWithinCanvas (event );
127108
109+ /**
110+ * Default pan mouse filter passing on middle mouse button (only).
111+ */
112+ public final Predicate <MouseEvent > defaultPanMouseFilter = event -> MouseEventsHelper .isOnlyMiddleButtonDown (event ) && MouseEventsHelper .modifierKeysUp (event ) && isMouseEventWithinCanvas (event );
113+
128114 /**
129115 * Default zoom-origin mouse filter passing on right mouse button with {@link MouseEvent#isControlDown() control key
130116 * down}.
@@ -138,6 +124,7 @@ public class Zoomer extends ChartPlugin {
138124
139125 private Predicate <MouseEvent > zoomInMouseFilter = defaultZoomInMouseFilter ;
140126 private Predicate <MouseEvent > zoomOutMouseFilter = defaultZoomOutMouseFilter ;
127+ private Predicate <MouseEvent > panMouseFilter = defaultPanMouseFilter ;
141128 private Predicate <MouseEvent > zoomOriginMouseFilter = defaultZoomOriginFilter ;
142129 private Predicate <ScrollEvent > zoomScrollFilter = defaultScrollFilter ;
143130
@@ -226,6 +213,27 @@ protected void invalidated() {
226213 }
227214 };
228215
216+ private final EventHandler <MouseEvent > panStartHandler = event -> {
217+ if (isPannerEnabled () && (panMouseFilter == null || panMouseFilter .test (event ))) {
218+ panStarted (event );
219+ event .consume ();
220+ }
221+ };
222+
223+ private final EventHandler <MouseEvent > panDragHandler = event -> {
224+ if (panOngoing ()) {
225+ panDragged (event );
226+ event .consume ();
227+ }
228+ };
229+
230+ private final EventHandler <MouseEvent > panEndHandler = event -> {
231+ if (panOngoing ()) {
232+ panEnded ();
233+ event .consume ();
234+ }
235+ };
236+
229237 private final EventHandler <MouseEvent > zoomOriginHandler = event -> {
230238 if (getZoomOriginMouseFilter () == null || getZoomOriginMouseFilter ().test (event )) {
231239 final boolean zoomOutPerformed = zoomOrigin ();
@@ -462,6 +470,16 @@ public Predicate<MouseEvent> getZoomOutMouseFilter() {
462470 return zoomOutMouseFilter ;
463471 }
464472
473+ /**
474+ * Returns pan mouse filter.
475+ *
476+ * @return pan mouse filter
477+ * @see #setPanMouseFilter(Predicate)
478+ */
479+ public Predicate <MouseEvent > getPanMouseFilter () {
480+ return panMouseFilter ;
481+ }
482+
465483 /**
466484 * Returns zoom-scroll filter.
467485 *
@@ -649,6 +667,17 @@ public void setZoomOutMouseFilter(final Predicate<MouseEvent> zoomOutMouseFilter
649667 this .zoomOutMouseFilter = zoomOutMouseFilter ;
650668 }
651669
670+ /**
671+ * Sets filter on {@link MouseEvent#MOUSE_CLICKED MOUSE_CLICKED} events that should start pan operation.
672+ *
673+ * @param panMouseFilter the filter to accept pan mouse event. If {@code null} then any MOUSE_CLICKED event
674+ * will start pan operation. By default it's set to {@link #defaultPanMouseFilter}.
675+ * @see #getPanMouseFilter()
676+ */
677+ public void setPanMouseFilter (final Predicate <MouseEvent > panMouseFilter ) {
678+ this .panMouseFilter = panMouseFilter ;
679+ }
680+
652681 /**
653682 * Sets filter on {@link MouseEvent#MOUSE_CLICKED MOUSE_CLICKED} events that should trigger zoom-origin operation.
654683 *
0 commit comments