1
0
mirror of https://github.com/aNNiMON/HotaruFX.git synced 2024-09-19 14:14:21 +03:00

Add ellipse node

This commit is contained in:
Victor 2017-09-02 15:01:10 +03:00
parent eded42e5fb
commit 0f1d22e92d
4 changed files with 80 additions and 18 deletions

View File

@ -6,15 +6,7 @@ import com.annimon.hotarufx.lib.NodeValue;
import com.annimon.hotarufx.lib.Types; import com.annimon.hotarufx.lib.Types;
import com.annimon.hotarufx.lib.Validator; import com.annimon.hotarufx.lib.Validator;
import com.annimon.hotarufx.lib.Value; import com.annimon.hotarufx.lib.Value;
import com.annimon.hotarufx.visual.objects.CircleNode; import com.annimon.hotarufx.visual.objects.*;
import com.annimon.hotarufx.visual.objects.GroupNode;
import com.annimon.hotarufx.visual.objects.LineNode;
import com.annimon.hotarufx.visual.objects.ObjectNode;
import com.annimon.hotarufx.visual.objects.PolygonNode;
import com.annimon.hotarufx.visual.objects.PolylineNode;
import com.annimon.hotarufx.visual.objects.RectangleNode;
import com.annimon.hotarufx.visual.objects.SVGPathNode;
import com.annimon.hotarufx.visual.objects.TextNode;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.function.Supplier; import java.util.function.Supplier;
@ -26,6 +18,7 @@ public class NodesBundle implements Bundle {
@Override @Override
public void load(Context context) { public void load(Context context) {
context.functions().put("circle", node(CircleNode::new)); context.functions().put("circle", node(CircleNode::new));
context.functions().put("ellipse", node(EllipseNode::new));
context.functions().put("group", group()); context.functions().put("group", group());
context.functions().put("line", node(LineNode::new)); context.functions().put("line", node(LineNode::new));
context.functions().put("polygon", poly(PolygonNode::new)); context.functions().put("polygon", poly(PolygonNode::new));

View File

@ -0,0 +1,70 @@
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.shape.Ellipse;
import static com.annimon.hotarufx.visual.PropertyType.NUMBER;
public class EllipseNode extends ShapeNode {
public final Ellipse ellipse;
private PropertyTimelineHolder<Number> centerX, centerY, radiusX, radiusY;
public EllipseNode() {
this(new Ellipse());
}
private EllipseNode(Ellipse ellipse) {
super(ellipse);
this.ellipse = ellipse;
centerX = PropertyTimelineHolder.empty();
centerY = PropertyTimelineHolder.empty();
radiusX = PropertyTimelineHolder.empty();
radiusY = PropertyTimelineHolder.empty();
}
public PropertyTimeline<Number> centerXProperty() {
return centerX.setIfEmptyThenGet(ellipse::centerXProperty);
}
public PropertyTimeline<Number> centerYProperty() {
return centerY.setIfEmptyThenGet(ellipse::centerYProperty);
}
public PropertyTimeline<Number> radiusXProperty() {
return radiusX.setIfEmptyThenGet(ellipse::radiusXProperty);
}
public PropertyTimeline<Number> radiusYProperty() {
return radiusY.setIfEmptyThenGet(ellipse::radiusYProperty);
}
@Override
public void buildTimeline(TimeLine timeline) {
super.buildTimeline(timeline);
centerX.applyIfPresent(timeline);
centerY.applyIfPresent(timeline);
radiusX.applyIfPresent(timeline);
radiusY.applyIfPresent(timeline);
}
@Override
public PropertyBindings propertyBindings(PropertyBindings bindings) {
return super.propertyBindings(bindings)
.add("cx", NUMBER, this::centerXProperty)
.add("centerX", NUMBER, this::centerXProperty)
.add("cy", NUMBER, this::centerYProperty)
.add("centerY", NUMBER, this::centerYProperty)
.add("radiusX", NUMBER, this::radiusXProperty)
.add("radiusY", NUMBER, this::radiusYProperty);
}
@Override
public <R, T> R accept(NodeVisitor<R, T> visitor, T input) {
return visitor.visit(this, input);
}
}

View File

@ -1,6 +1,7 @@
package com.annimon.hotarufx.visual.visitors; package com.annimon.hotarufx.visual.visitors;
import com.annimon.hotarufx.visual.objects.CircleNode; import com.annimon.hotarufx.visual.objects.CircleNode;
import com.annimon.hotarufx.visual.objects.EllipseNode;
import com.annimon.hotarufx.visual.objects.GroupNode; import com.annimon.hotarufx.visual.objects.GroupNode;
import com.annimon.hotarufx.visual.objects.LineNode; import com.annimon.hotarufx.visual.objects.LineNode;
import com.annimon.hotarufx.visual.objects.PolygonNode; import com.annimon.hotarufx.visual.objects.PolygonNode;
@ -12,6 +13,7 @@ import com.annimon.hotarufx.visual.objects.TextNode;
public interface NodeVisitor<R, T> { public interface NodeVisitor<R, T> {
R visit(CircleNode node, T input); R visit(CircleNode node, T input);
R visit(EllipseNode node, T input);
R visit(GroupNode node, T input); R visit(GroupNode node, T input);
R visit(LineNode node, T input); R visit(LineNode node, T input);
R visit(PolygonNode node, T input); R visit(PolygonNode node, T input);

View File

@ -2,15 +2,7 @@ package com.annimon.hotarufx.visual.visitors;
import com.annimon.hotarufx.visual.TimeLine; import com.annimon.hotarufx.visual.TimeLine;
import com.annimon.hotarufx.visual.VirtualScene; import com.annimon.hotarufx.visual.VirtualScene;
import com.annimon.hotarufx.visual.objects.CircleNode; import com.annimon.hotarufx.visual.objects.*;
import com.annimon.hotarufx.visual.objects.GroupNode;
import com.annimon.hotarufx.visual.objects.LineNode;
import com.annimon.hotarufx.visual.objects.ObjectNode;
import com.annimon.hotarufx.visual.objects.PolygonNode;
import com.annimon.hotarufx.visual.objects.PolylineNode;
import com.annimon.hotarufx.visual.objects.RectangleNode;
import com.annimon.hotarufx.visual.objects.SVGPathNode;
import com.annimon.hotarufx.visual.objects.TextNode;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor @RequiredArgsConstructor
@ -23,6 +15,11 @@ public class RenderVisitor implements NodeVisitor<Void, VirtualScene> {
return render(node, scene); return render(node, scene);
} }
@Override
public Void visit(EllipseNode node, VirtualScene scene) {
return render(node, scene);
}
@Override @Override
public Void visit(GroupNode group, VirtualScene scene) { public Void visit(GroupNode group, VirtualScene scene) {
render(group, scene); render(group, scene);