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 com.annimon.hotarufx.visual.visitors.NodeVisitor;
|
||||||
import javafx.scene.shape.Circle;
|
import javafx.scene.shape.Circle;
|
||||||
import static com.annimon.hotarufx.visual.PropertyType.*;
|
import static com.annimon.hotarufx.visual.PropertyType.*;
|
||||||
|
import static com.annimon.hotarufx.visual.objects.PropertyConsumers.*;
|
||||||
|
|
||||||
public class CircleNode extends ShapeNode {
|
public class CircleNode extends ShapeNode {
|
||||||
|
|
||||||
@ -41,9 +42,9 @@ public class CircleNode extends ShapeNode {
|
|||||||
@Override
|
@Override
|
||||||
public void buildTimeline(TimeLine timeline) {
|
public void buildTimeline(TimeLine timeline) {
|
||||||
super.buildTimeline(timeline);
|
super.buildTimeline(timeline);
|
||||||
centerX.ifPresent(PropertyConsumers.numberConsumer(timeline));
|
centerX.ifPresent(numberConsumer(timeline));
|
||||||
centerY.ifPresent(PropertyConsumers.numberConsumer(timeline));
|
centerY.ifPresent(numberConsumer(timeline));
|
||||||
radius.ifPresent(PropertyConsumers.numberConsumer(timeline));
|
radius.ifPresent(numberConsumer(timeline));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1,26 +1,53 @@
|
|||||||
package com.annimon.hotarufx.visual.objects;
|
package com.annimon.hotarufx.visual.objects;
|
||||||
|
|
||||||
import com.annimon.hotarufx.visual.PropertyBindings;
|
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.TimeLine;
|
||||||
import com.annimon.hotarufx.visual.visitors.NodeVisitor;
|
import com.annimon.hotarufx.visual.visitors.NodeVisitor;
|
||||||
import javafx.scene.Node;
|
import javafx.scene.Node;
|
||||||
|
import static com.annimon.hotarufx.visual.PropertyType.*;
|
||||||
|
import static com.annimon.hotarufx.visual.objects.PropertyConsumers.*;
|
||||||
|
|
||||||
public abstract class ObjectNode {
|
public abstract class ObjectNode {
|
||||||
|
|
||||||
private final Node node;
|
private final Node node;
|
||||||
|
private PropertyTimelineHolder<Number> translateX, translateY, translateZ;
|
||||||
|
|
||||||
public ObjectNode(Node node) {
|
public ObjectNode(Node node) {
|
||||||
this.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() {
|
public final PropertyBindings propertyBindings() {
|
||||||
return propertyBindings(new PropertyBindings());
|
return propertyBindings(new PropertyBindings());
|
||||||
}
|
}
|
||||||
|
|
||||||
protected PropertyBindings propertyBindings(PropertyBindings bindings) {
|
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);
|
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.paint.Paint;
|
||||||
import javafx.scene.shape.Shape;
|
import javafx.scene.shape.Shape;
|
||||||
import static com.annimon.hotarufx.visual.PropertyType.*;
|
import static com.annimon.hotarufx.visual.PropertyType.*;
|
||||||
|
import static com.annimon.hotarufx.visual.objects.PropertyConsumers.*;
|
||||||
|
|
||||||
public abstract class ShapeNode extends ObjectNode {
|
public abstract class ShapeNode extends ObjectNode {
|
||||||
|
|
||||||
@ -32,8 +33,8 @@ public abstract class ShapeNode extends ObjectNode {
|
|||||||
@Override
|
@Override
|
||||||
public void buildTimeline(TimeLine timeline) {
|
public void buildTimeline(TimeLine timeline) {
|
||||||
super.buildTimeline(timeline);
|
super.buildTimeline(timeline);
|
||||||
fill.ifPresent(PropertyConsumers.paintConsumer(timeline));
|
fill.ifPresent(paintConsumer(timeline));
|
||||||
stroke.ifPresent(PropertyConsumers.paintConsumer(timeline));
|
stroke.ifPresent(paintConsumer(timeline));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -28,6 +28,7 @@ class NodesBundleTest {
|
|||||||
assertThat(context.functions(), hasKey("circle"));
|
assertThat(context.functions(), hasKey("circle"));
|
||||||
|
|
||||||
val map = new HashMap<String, Value>();
|
val map = new HashMap<String, Value>();
|
||||||
|
map.put("translateZ", NumberValue.of(-40));
|
||||||
map.put("cx", NumberValue.of(-10));
|
map.put("cx", NumberValue.of(-10));
|
||||||
map.put("radius", NumberValue.of(50));
|
map.put("radius", NumberValue.of(50));
|
||||||
map.put("fill", new StringValue("#00AA00"));
|
map.put("fill", new StringValue("#00AA00"));
|
||||||
@ -43,5 +44,6 @@ class NodesBundleTest {
|
|||||||
assertThat(circle.circle.getCenterX(), closeTo(-10, 0.001));
|
assertThat(circle.circle.getCenterX(), closeTo(-10, 0.001));
|
||||||
assertThat(circle.circle.getRadius(), closeTo(50, 0.001));
|
assertThat(circle.circle.getRadius(), closeTo(50, 0.001));
|
||||||
assertThat(circle.circle.getFill(), is(Color.web("#00AA00")));
|
assertThat(circle.circle.getFill(), is(Color.web("#00AA00")));
|
||||||
|
assertThat(circle.circle.getTranslateZ(), closeTo(-40, 0.001));
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user