package com.pixelmaid.dresscode.antlr.types.tree.functions.transforms;
import java.util.List;
import com.pixelmaid.dresscode.antlr.types.VarType;
import com.pixelmaid.dresscode.antlr.types.tree.DCNode;
import com.pixelmaid.dresscode.antlr.types.tree.NodeEvent;
import com.pixelmaid.dresscode.drawing.primitive2d.Color;
import com.pixelmaid.dresscode.drawing.primitive2d.Drawable;
public class FillNode extends NodeEvent implements DCNode {
protected List<DCNode> params;
protected int line;
public FillNode(List<DCNode> ps, int l) {
params = ps;
line = l;
}
@Override
public VarType evaluate() {
Drawable d;
Color c = null;
if(params.size()<2||params.size()>4){
throw new RuntimeException("Incorrect number of parameters for fill at line " + line);
}
try{
d= (params.get(0).evaluate().asDrawable());
if(params.size()==2){
if(params.get(1).evaluate().isNumber()){
c= new Color(params.get(1).evaluate().asDouble().intValue());
}
else if(params.get(1).evaluate().isString()){
c = params.get(1).evaluate().asColor();
}
}
else if(params.size()==4){
c= new Color(params.get(1).evaluate().asDouble().intValue(),params.get(2).evaluate().asDouble().intValue(),params.get(3).evaluate().asDouble().intValue());
}
d.setFillColor(c);
d.doFill(true);
d.setLine(line);
return new VarType(d);
}
catch (ClassCastException e){
throw new RuntimeException("Illegal fill function call at line:"+ line+" : " + this);
}
}
}