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.SVGPath;
import static com.annimon.hotarufx.visual.PropertyType.STRING;

public class SVGPathNode extends ShapeNode {

    public final SVGPath svgPath;

    private PropertyTimelineHolder<String> content;

    public SVGPathNode() {
        this(new SVGPath());
    }

    private SVGPathNode(SVGPath svgPath) {
        super(svgPath);
        this.svgPath = svgPath;
        content = PropertyTimelineHolder.empty();
    }

    public PropertyTimeline<String> contentProperty() {
        return content.setIfEmptyThenGet(svgPath::contentProperty);
    }

    @Override
    public void buildTimeline(TimeLine timeline) {
        super.buildTimeline(timeline);
        content.applyIfPresent(timeline);
    }

    @Override
    public PropertyBindings propertyBindings(PropertyBindings bindings) {
        return super.propertyBindings(bindings)
                .add("content", STRING, this::contentProperty);
    }

    @Override
    public <R, T> R accept(NodeVisitor<R, T> visitor, T input) {
        return visitor.visit(this, input);
    }
}

@@ -306,16 +306,52 @@
 isitor;%0A
+import javafx.scene.shape.FillRule;%0A
 import j
@@ -377,16 +377,16 @@
 VGPath;%0A
-
 import s
@@ -573,16 +573,69 @@
 content;
+%0A    private PropertyTimelineHolder%3CString%3E fillRule;
 %0A%0A    pu
@@ -840,16 +840,67 @@
 mpty();%0A
+        fillRule = PropertyTimelineHolder.empty();%0A
     %7D%0A%0A 
@@ -1021,32 +1021,197 @@
 operty);%0A    %7D%0A%0A
+    public PropertyTimeline%3CString%3E fillRuleProperty() %7B%0A        return fillRule.setIfEmptyThenGet(enumToString(FillRule.class, svgPath.fillRuleProperty()));%0A    %7D%0A%0A
     @Override%0A  
@@ -1336,24 +1336,67 @@
 (timeline);%0A
+        fillRule.applyIfPresent(timeline);%0A
     %7D%0A%0A    @
@@ -1526,16 +1526,16 @@
 ndings)%0A
-
         
@@ -1580,32 +1580,97 @@
 contentProperty)
+%0A                .add(%22fillRule%22, STRING, this::fillRuleProperty)
 ;%0A    %7D%0A%0A    @Ov

Add fill rule svg property