1
0
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:
Victor 2017-09-01 12:28:48 +03:00
parent c3920e7e42
commit 3f0034b4aa
4 changed files with 38 additions and 7 deletions

View File

@ -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

View File

@ -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);

View File

@ -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

View File

@ -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));
}
}