X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-core%2Fsrc%2Fmodules%2Fmod_svg%2Fsvg_parser.cpp;h=84609a2b6e724585cd09c6128d991570a55ce188;hb=ba6e4eda772f869a43e61d96d7b9f7d5c38d81e2;hp=3bfdf7a0241ddc1cfdbe1b5b6337460e032ce8dd;hpb=0703e70dadd38d509646d7202843f09187a8ad3e;p=synfig.git diff --git a/synfig-core/src/modules/mod_svg/svg_parser.cpp b/synfig-core/src/modules/mod_svg/svg_parser.cpp index 3bfdf7a..84609a2 100644 --- a/synfig-core/src/modules/mod_svg/svg_parser.cpp +++ b/synfig-core/src/modules/mod_svg/svg_parser.cpp @@ -279,18 +279,14 @@ Svg_parser::parser_graphics(const xmlpp::Node* node,xmlpp::Element* root,String typeStroke=2; //gradient } - xmlpp::Element* child_layer = nodeStartBasicLayer(root->add_child("layer")); - xmlpp::Element* child_fill = child_layer; - xmlpp::Element* child_stroke = child_layer; - if(typeFill==2){ - child_fill=nodeStartBasicLayer(child_fill->add_child("layer")); - } - if(typeStroke==2){ - child_stroke=nodeStartBasicLayer(child_stroke->add_child("layer")); - } + xmlpp::Element* child_layer = root; + xmlpp::Element* child_fill; + xmlpp::Element* child_stroke; //make simple fills if(nodename.compare("rect")==0 && typeFill!=0){ + 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){ build_fill (child_fill,fill,NULL); @@ -298,7 +294,10 @@ Svg_parser::parser_graphics(const xmlpp::Node* node,xmlpp::Element* root,String parser_effects(nodeElement,child_layer,parent_style,mtx); return; } - + if ((!(SVG_RESOLVE_BLINE) && mtx) || typeFill==2 || typeStroke==2) + child_layer = nodeStartBasicLayer(root->add_child("layer"), id); + child_fill=child_layer; + child_stroke=child_layer; //======================================================================= @@ -324,6 +323,9 @@ Svg_parser::parser_graphics(const xmlpp::Node* node,xmlpp::Element* root,String //int n = k.size(); if(typeFill!=0){//region layer + /*if(typeFill==2){ + child_fill=nodeStartBasicLayer(child_fill->add_child("layer")); + }*/ for (aux = k.begin(); aux!=k.end(); aux++){ xmlpp::Element *child_region=child_fill->add_child("layer"); child_region->set_attribute("type","region"); @@ -353,6 +355,9 @@ Svg_parser::parser_graphics(const xmlpp::Node* node,xmlpp::Element* root,String } if(typeStroke!=0){//outline layer + if(typeStroke==2){ + 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"); child_outline->set_attribute("type","outline"); @@ -390,17 +395,17 @@ Svg_parser::parser_graphics(const xmlpp::Node* node,xmlpp::Element* root,String } if(typeStroke==2){ //gradient in onto mode (stroke) - if (SVG_RESOLVE_BLINE) - build_fill(child_stroke,fill,mtx); - else - build_fill(child_stroke,fill,NULL); - } - if (SVG_RESOLVE_BLINE) - parser_effects(nodeElement,child_layer,parent_style,NULL); - else - parser_effects(nodeElement,child_layer,parent_style,mtx); - + if (SVG_RESOLVE_BLINE) + build_fill(child_stroke,stroke,mtx); + else + build_fill(child_stroke,stroke,NULL); + } } + + if (SVG_RESOLVE_BLINE) + parser_effects(nodeElement,child_layer,parent_style,NULL); + else + parser_effects(nodeElement,child_layer,parent_style,mtx); } } @@ -848,7 +853,7 @@ Svg_parser::parser_path_d(String path_d,Matrix* mtx){ /* === EFFECTS PARSERS ===================================================== */ void -Svg_parser::parser_effects(const xmlpp::Element* nodeElement,xmlpp::Element* root,String parent_style,Matrix* mtx){ +Svg_parser::parser_effects(const xmlpp::Element* /*nodeElement*/,xmlpp::Element* root,String /*parent_style*/,Matrix* mtx){ build_transform(root, mtx); } @@ -979,7 +984,7 @@ Svg_parser::build_linearGradient(xmlpp::Element* root,LinearGradient* data,Matri 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 @@ -1038,6 +1043,7 @@ Svg_parser::build_linearGradient(xmlpp::Element* root,LinearGradient* data,Matri //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"); @@ -1054,7 +1060,7 @@ Svg_parser::build_radialGradient(xmlpp::Element* root,RadialGradient* data,Matri 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 @@ -1064,6 +1070,7 @@ Svg_parser::build_radialGradient(xmlpp::Element* root,RadialGradient* data,Matri 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){ @@ -1077,6 +1084,7 @@ Svg_parser::build_radialGradient(xmlpp::Element* root,RadialGradient* data,Matri }else { gradient=root->add_child("layer"); + gradient->set_attribute("desc",data->name); build_param (gradient->add_child("param"),"blend_method","integer","21"); //straight onto } @@ -1087,6 +1095,7 @@ Svg_parser::build_radialGradient(xmlpp::Element* root,RadialGradient* data,Matri //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 @@ -1302,7 +1311,7 @@ Svg_parser::build_points(xmlpp::Element* root,std::list p){ } } void -Svg_parser::build_Vertex(xmlpp::Element* root , Vertex *p){ +Svg_parser::build_vertex(xmlpp::Element* root , Vertex *p){ xmlpp::Element *child_comp=root->add_child("composite"); child_comp->set_attribute("type","bline_point"); build_vector (child_comp->add_child("param"),"point",p->x,p->y); @@ -1336,7 +1345,7 @@ Svg_parser::build_bline(xmlpp::Element* root,std::list p,bool loop,Stri if(!blineguid.empty()) child->set_attribute("guid",blineguid); std::list::iterator aux = p.begin(); while(aux!=p.end()){ - if(*aux) build_Vertex (child->add_child("entry"),*aux); + if(*aux) build_vertex (child->add_child("entry"),*aux); aux++; } } @@ -1427,11 +1436,11 @@ Svg_parser::build_vector (xmlpp::Element* root,String name,float x,float y,Strin } 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");