仅在左键点击时触发 JFXRippler 波纹 (#5188)
This commit is contained in:
@@ -34,6 +34,7 @@ import javafx.geometry.Bounds;
|
|||||||
import javafx.scene.CacheHint;
|
import javafx.scene.CacheHint;
|
||||||
import javafx.scene.Group;
|
import javafx.scene.Group;
|
||||||
import javafx.scene.Node;
|
import javafx.scene.Node;
|
||||||
|
import javafx.scene.input.MouseButton;
|
||||||
import javafx.scene.input.MouseEvent;
|
import javafx.scene.input.MouseEvent;
|
||||||
import javafx.scene.layout.Pane;
|
import javafx.scene.layout.Pane;
|
||||||
import javafx.scene.layout.Region;
|
import javafx.scene.layout.Region;
|
||||||
@@ -78,7 +79,6 @@ public class JFXRippler extends StackPane {
|
|||||||
|
|
||||||
protected static final double RIPPLE_MAX_RADIUS = 300;
|
protected static final double RIPPLE_MAX_RADIUS = 300;
|
||||||
|
|
||||||
private boolean enabled = true;
|
|
||||||
private boolean forceOverlay = false;
|
private boolean forceOverlay = false;
|
||||||
private final Interpolator rippleInterpolator = Interpolator.SPLINE(0.0825,
|
private final Interpolator rippleInterpolator = Interpolator.SPLINE(0.0825,
|
||||||
0.3025,
|
0.3025,
|
||||||
@@ -176,10 +176,6 @@ public class JFXRippler extends StackPane {
|
|||||||
return control;
|
return control;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setEnabled(boolean enable) {
|
|
||||||
this.enabled = enable;
|
|
||||||
}
|
|
||||||
|
|
||||||
// methods that can be changed by extending the rippler class
|
// methods that can be changed by extending the rippler class
|
||||||
|
|
||||||
/// generate the clipping mask
|
/// generate the clipping mask
|
||||||
@@ -255,10 +251,15 @@ public class JFXRippler extends StackPane {
|
|||||||
if (getChildren().contains(control)) {
|
if (getChildren().contains(control)) {
|
||||||
control.boundsInParentProperty().addListener(observable -> resetRippler());
|
control.boundsInParentProperty().addListener(observable -> resetRippler());
|
||||||
}
|
}
|
||||||
control.addEventHandler(MouseEvent.MOUSE_PRESSED,
|
control.addEventHandler(MouseEvent.MOUSE_PRESSED, event -> {
|
||||||
(event) -> createRipple(event.getX(), event.getY()));
|
if (event.getButton() == MouseButton.PRIMARY)
|
||||||
|
createRipple(event.getX(), event.getY());
|
||||||
|
});
|
||||||
// create fade out transition for the ripple
|
// create fade out transition for the ripple
|
||||||
control.addEventHandler(MouseEvent.MOUSE_RELEASED, e -> releaseRipple());
|
control.addEventHandler(MouseEvent.MOUSE_RELEASED, event -> {
|
||||||
|
if (event.getButton() == MouseButton.PRIMARY)
|
||||||
|
releaseRipple();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -363,25 +364,23 @@ public class JFXRippler extends StackPane {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void createRipple() {
|
void createRipple() {
|
||||||
if (enabled) {
|
if (!generating.getAndSet(true)) {
|
||||||
if (!generating.getAndSet(true)) {
|
// create overlay once then change its color later
|
||||||
// create overlay once then change its color later
|
createOverlay();
|
||||||
createOverlay();
|
if (this.getClip() == null || (getChildren().size() == 1 && !cacheRipplerClip) || resetClip) {
|
||||||
if (this.getClip() == null || (getChildren().size() == 1 && !cacheRipplerClip) || resetClip) {
|
this.setClip(getMask());
|
||||||
this.setClip(getMask());
|
|
||||||
}
|
|
||||||
this.resetClip = false;
|
|
||||||
|
|
||||||
// create the ripple effect
|
|
||||||
final Ripple ripple = new Ripple(generatorCenterX, generatorCenterY);
|
|
||||||
getChildren().add(ripple);
|
|
||||||
ripplesQueue.add(ripple);
|
|
||||||
|
|
||||||
// animate the ripple
|
|
||||||
overlayRect.outAnimation.stop();
|
|
||||||
overlayRect.inAnimation.play();
|
|
||||||
ripple.inAnimation.play();
|
|
||||||
}
|
}
|
||||||
|
this.resetClip = false;
|
||||||
|
|
||||||
|
// create the ripple effect
|
||||||
|
final Ripple ripple = new Ripple(generatorCenterX, generatorCenterY);
|
||||||
|
getChildren().add(ripple);
|
||||||
|
ripplesQueue.add(ripple);
|
||||||
|
|
||||||
|
// animate the ripple
|
||||||
|
overlayRect.outAnimation.stop();
|
||||||
|
overlayRect.inAnimation.play();
|
||||||
|
ripple.inAnimation.play();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user