mirror of
https://github.com/aNNiMON/HotaruFX.git
synced 2024-09-19 14:14:21 +03:00
Add node translate properties
This commit is contained in:
parent
c3920e7e42
commit
3f0034b4aa
@ -7,6 +7,7 @@ import com.annimon.hotarufx.visual.TimeLine;
|
||||
import com.annimon.hotarufx.visual.visitors.NodeVisitor;
|
||||
import javafx.scene.shape.Circle;
|
||||
import static com.annimon.hotarufx.visual.PropertyType.*;
|
||||
import static com.annimon.hotarufx.visual.objects.PropertyConsumers.*;
|
||||
|
||||
public class CircleNode extends ShapeNode {
|
||||
|
||||
@ -41,9 +42,9 @@ public class CircleNode extends ShapeNode {
|
||||
@Override
|
||||
public void buildTimeline(TimeLine timeline) {
|
||||
super.buildTimeline(timeline);
|
||||
centerX.ifPresent(PropertyConsumers.numberConsumer(timeline));
|
||||
centerY.ifPresent(PropertyConsumers.numberConsumer(timeline));
|
||||
radius.ifPresent(PropertyConsumers.numberConsumer(timeline));
|
||||
centerX.ifPresent(numberConsumer(timeline));
|
||||
centerY.ifPresent(numberConsumer(timeline));
|
||||
radius.ifPresent(numberConsumer(timeline));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -1,26 +1,53 @@
|
||||
package com.annimon.hotarufx.visual.objects;
|
||||
|
||||
import com.annimon.hotarufx.visual.PropertyBindings;
|
||||
import com.annimon.hotarufx.visual.PropertyTimeline;
|
||||
import com.annimon.hotarufx.visual.PropertyTimelineHolder;
|
||||
import com.annimon.hotarufx.visual.TimeLine;
|
||||
import com.annimon.hotarufx.visual.visitors.NodeVisitor;
|
||||
import javafx.scene.Node;
|
||||
import static com.annimon.hotarufx.visual.PropertyType.*;
|
||||
import static com.annimon.hotarufx.visual.objects.PropertyConsumers.*;
|
||||
|
||||
public abstract class ObjectNode {
|
||||
|
||||
private final Node node;
|
||||
private PropertyTimelineHolder<Number> translateX, translateY, translateZ;
|
||||
|
||||
public ObjectNode(Node node) {
|
||||
this.node = node;
|
||||
translateX = PropertyTimelineHolder.empty();
|
||||
translateY = PropertyTimelineHolder.empty();
|
||||
translateZ = PropertyTimelineHolder.empty();
|
||||
}
|
||||
|
||||
public void buildTimeline(TimeLine timeline) { }
|
||||
public PropertyTimeline<Number> translateXProperty() {
|
||||
return translateX.setIfEmptyThenGet(node::translateXProperty);
|
||||
}
|
||||
|
||||
public PropertyTimeline<Number> translateYProperty() {
|
||||
return translateY.setIfEmptyThenGet(node::translateYProperty);
|
||||
}
|
||||
|
||||
public PropertyTimeline<Number> translateZProperty() {
|
||||
return translateZ.setIfEmptyThenGet(node::translateZProperty);
|
||||
}
|
||||
|
||||
public void buildTimeline(TimeLine timeline) {
|
||||
translateX.ifPresent(numberConsumer(timeline));
|
||||
translateY.ifPresent(numberConsumer(timeline));
|
||||
translateZ.ifPresent(numberConsumer(timeline));
|
||||
}
|
||||
|
||||
public final PropertyBindings propertyBindings() {
|
||||
return propertyBindings(new PropertyBindings());
|
||||
}
|
||||
|
||||
protected PropertyBindings propertyBindings(PropertyBindings bindings) {
|
||||
return bindings;
|
||||
return bindings
|
||||
.add("translateX", NUMBER, this::translateXProperty)
|
||||
.add("translateY", NUMBER, this::translateYProperty)
|
||||
.add("translateZ", NUMBER, this::translateZProperty);
|
||||
}
|
||||
|
||||
public abstract <R, T> R accept(NodeVisitor<R, T> visitor, T input);
|
||||
|
@ -7,6 +7,7 @@ import com.annimon.hotarufx.visual.TimeLine;
|
||||
import javafx.scene.paint.Paint;
|
||||
import javafx.scene.shape.Shape;
|
||||
import static com.annimon.hotarufx.visual.PropertyType.*;
|
||||
import static com.annimon.hotarufx.visual.objects.PropertyConsumers.*;
|
||||
|
||||
public abstract class ShapeNode extends ObjectNode {
|
||||
|
||||
@ -32,8 +33,8 @@ public abstract class ShapeNode extends ObjectNode {
|
||||
@Override
|
||||
public void buildTimeline(TimeLine timeline) {
|
||||
super.buildTimeline(timeline);
|
||||
fill.ifPresent(PropertyConsumers.paintConsumer(timeline));
|
||||
stroke.ifPresent(PropertyConsumers.paintConsumer(timeline));
|
||||
fill.ifPresent(paintConsumer(timeline));
|
||||
stroke.ifPresent(paintConsumer(timeline));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -28,6 +28,7 @@ class NodesBundleTest {
|
||||
assertThat(context.functions(), hasKey("circle"));
|
||||
|
||||
val map = new HashMap<String, Value>();
|
||||
map.put("translateZ", NumberValue.of(-40));
|
||||
map.put("cx", NumberValue.of(-10));
|
||||
map.put("radius", NumberValue.of(50));
|
||||
map.put("fill", new StringValue("#00AA00"));
|
||||
@ -43,5 +44,6 @@ class NodesBundleTest {
|
||||
assertThat(circle.circle.getCenterX(), closeTo(-10, 0.001));
|
||||
assertThat(circle.circle.getRadius(), closeTo(50, 0.001));
|
||||
assertThat(circle.circle.getFill(), is(Color.web("#00AA00")));
|
||||
assertThat(circle.circle.getTranslateZ(), closeTo(-40, 0.001));
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user