//make simple fills
if(nodename.compare("rect")==0 && typeFill!=0){
- if (mtx) child_layer = nodeStartBasicLayer(root->add_child("layer"));
+ if (mtx) child_layer = nodeStartBasicLayer(root->add_child("layer"), id);
child_fill=child_layer;
parser_rect(nodeElement,child_fill,fill,fill_opacity,opacity);
if(typeFill==2){
return;
}
if ((!(SVG_RESOLVE_BLINE) && mtx) || typeFill==2 || typeStroke==2)
- child_layer = nodeStartBasicLayer(root->add_child("layer"));
+ child_layer = nodeStartBasicLayer(root->add_child("layer"), id);
child_fill=child_layer;
child_stroke=child_layer;
if(typeStroke!=0){//outline layer
if(typeStroke==2){
- child_stroke=nodeStartBasicLayer(child_stroke->add_child("layer"));
+ child_stroke=nodeStartBasicLayer(child_stroke->add_child("layer"),"stroke");
}
for (aux=k.begin(); aux!=k.end(); aux++){
xmlpp::Element *child_outline=child_stroke->add_child("layer");
gradient->set_attribute("type","linear_gradient");
gradient->set_attribute("active","true");
- gradient->set_attribute("desc","Gradient004");
+ gradient->set_attribute("desc",data->name);
build_param (gradient->add_child("param"),"z_depth","real","0");
build_param (gradient->add_child("param"),"amount","real","1");
//straight onto
//gradient link
xmlpp::Element *child_stops=gradient->add_child("param");
child_stops->set_attribute("name","gradient");
+ child_stops->set_attribute("guid",GUID::hasher(data->name).get_string());
build_stop_color (child_stops->add_child("gradient"),data->stops);
build_param (gradient->add_child("param"),"loop","bool","false");
build_param (gradient->add_child("param"),"zigzag","bool","false");
layer->set_attribute("type","PasteCanvas");
layer->set_attribute("active","true");
layer->set_attribute("version","0.1");
- layer->set_attribute("desc","Composite");
+ layer->set_attribute("desc",data->name);
build_param (layer->add_child("param"),"z_depth","real","0");
build_param (layer->add_child("param"),"amount","real","1");
build_param (layer->add_child("param"),"blend_method","integer","21"); //straight onto
xmlpp::Element* child_layer=child->add_child("canvas");
gradient=child_layer->add_child("layer");
+ gradient->set_attribute("desc",data->name);
build_param (gradient->add_child("param"),"blend_method","integer","0"); //composite
Matrix *mtx2=NULL;
if (mtx && data->transform){
}else {
gradient=root->add_child("layer");
+ gradient->set_attribute("desc",data->name);
build_param (gradient->add_child("param"),"blend_method","integer","21"); //straight onto
}
//gradient link
xmlpp::Element *child_stops=gradient->add_child("param");
child_stops->set_attribute("name","gradient");
+ child_stops->set_attribute("guid",GUID::hasher(data->name).get_string());
build_stop_color (child_stops->add_child("gradient"),data->stops);
//here the center point and radius
}
xmlpp::Element*
-Svg_parser::nodeStartBasicLayer(xmlpp::Element* root){
+Svg_parser::nodeStartBasicLayer(xmlpp::Element* root, String name){
root->set_attribute("type","PasteCanvas");
root->set_attribute("active","true");
root->set_attribute("version","0.1");
- root->set_attribute("desc","Composite");
+ root->set_attribute("desc",name);
build_param (root->add_child("param"),"z_depth","real","0");
build_param (root->add_child("param"),"amount","real","1");
build_param (root->add_child("param"),"blend_method","integer","0");
Matrix*
Svg_parser::newMatrix(const String mvector){
if(!mvector.empty()){
- Matrix* data=(Matrix*)malloc(sizeof(Matrix));
std::vector<String> tokens=tokenize(mvector,",");
if(tokens.size()!=6) return newMatrix(1,0,0,1,0,0);
+ Matrix* data=(Matrix*)malloc(sizeof(Matrix));
data->a=atof(tokens.at(0).data());
data->b=atof(tokens.at(1).data());
data->c=atof(tokens.at(2).data());
else if(a=='V'){ e=15; i++;}
else if(a=='H'){ e=16; i++;}
else if(a=='z' || a=='Z'){ e=17; i++;}
- else if(a=='-' ||a=='.'|| isdigit (a)){ e=18;}
+ else if(a=='-' || a=='.' || a=='e' || a=='E' || isdigit (a)){ e=18;}
else if(a==','){ e=19; i++;}
else if(a==' '){i++;}
break;
case 16: tokens.push_back("H"); e=0; break;
case 17: tokens.push_back("z"); e=0; break;//loop
- case 18: if(a=='-'||a=='.'|| isdigit (a)){
+ case 18: if(a=='-' || a=='.' || a=='e' || a=='E' || isdigit (a)){
buffer.append(path.substr(i,1));i++;
}else{
e=20;
int
Svg_parser::getRed(String hex){
if(hex.at(0)=='#'){
+ //allow for 3-digit hex codes (#rgb = #rrggbb)
+ if (hex.length()<7) return (16+1) * hextodec(hex.substr(1,1));
return hextodec(hex.substr(1,2));
}else if(hex.compare(0,3,"rgb")==0 || hex.compare(0,3,"RGB")==0){
int start=hex.find_first_of("(")+1;
int
Svg_parser::getGreen(String hex){
if(hex.at(0)=='#'){
+ if (hex.length()<7) return (16+1) * hextodec(hex.substr(2,1));
return hextodec(hex.substr(3,2));
}else if(hex.compare(0,3,"rgb")==0 || hex.compare(0,3,"RGB")==0){
int start=hex.find_first_of("(")+1;
int
Svg_parser::getBlue(String hex){
if(hex.at(0)=='#'){
+ if (hex.length()<7) return (16+1) * hextodec(hex.substr(3,1));
return hextodec(hex.substr(5,2));
}else if(hex.compare(0,3,"rgb")==0 || hex.compare(0,3,"RGB")==0){
int start=hex.find_first_of("(")+1;