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"));
+ child_fill=child_layer;
parser_rect(nodeElement,child_fill,fill,fill_opacity,opacity);
if(typeFill==2){
build_fill (child_fill,fill,NULL);
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"));
+ child_fill=child_layer;
+ child_stroke=child_layer;
//=======================================================================
std::list<BLine*> k;
//if we are creating a bline
- //First, create the list of vertices
+ //First, create the list of Verteces
if (SVG_RESOLVE_BLINE) {
if(nodename.compare("path")==0){
k=parser_path_d (nodeElement->get_attribute_value("d"),mtx);
//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");
}
if(typeStroke!=0){//outline layer
+ if(typeStroke==2){
+ child_stroke=nodeStartBasicLayer(child_stroke->add_child("layer"));
+ }
for (aux=k.begin(); aux!=k.end(); aux++){
xmlpp::Element *child_outline=child_stroke->add_child("layer");
child_outline->set_attribute("type","outline");
}
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);
}
}
std::list<BLine *> k0;
if(polygon_points.empty())
return k0;
- std::list<Vertice*> points;
+ std::list<Vertex*> points;
std::vector<String> tokens=get_tokens_path (polygon_points);
unsigned int i;
float ax,ay; ax=ay=0;
//adjust
coor2vect(&ax,&ay);
//save
- points.push_back(newVertice(ax,ay));
+ points.push_back(newVertex(ax,ay));
}
k0.push_front(newBLine(&points, true));
return k0;
std::list<BLine *>
Svg_parser::parser_path_d(String path_d,Matrix* mtx){
std::list<BLine *> k;
- std::list<Vertice*> k1;
+ std::list<Vertex*> k1;
std::vector<String> tokens=get_tokens_path(path_d);
String command="M"; //the current command
//operate and save
if(mtx) transformPoint2D(mtx,&ax,&ay);
coor2vect(&ax,&ay);
- k1.push_back(newVertice (ax,ay)); //first element
+ k1.push_back(newVertex (ax,ay)); //first element
setSplit(k1.back(),TRUE);
//"If a moveto is followed by multiple pairs of coordinates,
// the subsequent pairs are treated as implicit lineto commands."
if(isFirst(k1.front(),ax,ay)){
setTg1(k1.front(),k1.front()->x,k1.front()->y,tgx,tgy);
}else{
- k1.push_back(newVertice (ax,ay));
+ k1.push_back(newVertex (ax,ay));
setTg1(k1.back(),k1.back()->x,k1.back()->y,tgx,tgy);
setSplit(k1.back(),TRUE);
}
//save
setTg1(k1.back(),k1.back()->x,k1.back()->y,tgx,tgy);
setSplit(k1.back(),FALSE);
- k1.push_back(newVertice (ax,ay));
+ k1.push_back(newVertex (ax,ay));
setTg1(k1.back(),k1.back()->x,k1.back()->y,tgx,tgy);
}else if(command.compare("L")==0 || command.compare("l")==0){ //line to
//point
if(isFirst(k1.front(),ax,ay)){
setTg1(k1.front(),k1.front()->x,k1.front()->y,k1.front()->x,k1.front()->y);
}else{
- k1.push_back(newVertice(ax,ay));
+ k1.push_back(newVertex(ax,ay));
setTg1(k1.back(),k1.back()->x,k1.back()->y,k1.back()->x,k1.back()->y);
}
}else if(command.compare("H")==0 || command.compare("h")==0){// horizontal move
if(isFirst(k1.front(),ax,ay)){
setTg1(k1.front(),k1.front()->x,k1.front()->y,k1.front()->x,k1.front()->y);
}else{
- k1.push_back(newVertice(ax,ay));
+ k1.push_back(newVertex(ax,ay));
setTg1(k1.back(),k1.back()->x,k1.back()->y,k1.back()->x,k1.back()->y);
}
}else if(command.compare("V")==0 || command.compare("v")==0){//vertical
if(isFirst(k1.front(),ax,ay)){
setTg1(k1.front(),k1.front()->x,k1.front()->y,k1.front()->x,k1.front()->y);
}else{
- k1.push_back(newVertice(ax,ay));
+ k1.push_back(newVertex(ax,ay));
setTg1(k1.back(),k1.back()->x,k1.back()->y,k1.back()->x,k1.back()->y);
}
}else if(command.compare("T")==0 || command.compare("t")==0){// I don't know what does it
if(isFirst(k1.front(),ax,ay)){
setTg1(k1.front(),k1.front()->x,k1.front()->y,tgx,tgy);
}else{
- k1.push_back(newVertice (ax,ay));
+ k1.push_back(newVertex (ax,ay));
setTg1(k1.back(),k1.back()->x,k1.back()->y,tgx,tgy);
setSplit(k1.back(),TRUE);
}
if(isFirst(k1.front(),ax,ay)){
setTg1(k1.front(),k1.front()->x,k1.front()->y,tgx,tgy);
}else{
- k1.push_back(newVertice (ax,ay));
+ k1.push_back(newVertex (ax,ay));
setTg1(k1.back(),k1.back()->x,k1.back()->y,tgx,tgy);
setSplit(k1.back(),TRUE);
}
//save the last tg2
setTg2(k1.back(),k1.back()->x,k1.back()->y,tgx2,tgy2);
//save the intermediate point
- k1.push_back(newVertice (in_x,in_y));
+ k1.push_back(newVertex (in_x,in_y));
setTg1(k1.back(),k1.back()->x,k1.back()->y, in_tgx1 , in_tgy1);
setTg2(k1.back(),k1.back()->x,k1.back()->y, in_tgx2 , in_tgy2);
setSplit(k1.back(),TRUE); //this could be changed
if(isFirst(k1.front(),ax,ay)){
setTg1(k1.front(),k1.front()->x,k1.front()->y,tgx,tgy);
}else{
- k1.push_back(newVertice (ax,ay));
+ k1.push_back(newVertex (ax,ay));
setTg1(k1.back(),k1.back()->x,k1.back()->y,tgx,tgy);
setSplit(k1.back(),TRUE);
}
//operate and save
if(mtx) transformPoint2D(mtx,&ax,&ay);
coor2vect(&ax,&ay);
- k1.push_back(newVertice (ax,ay)); //first element
+ k1.push_back(newVertex (ax,ay)); //first element
setSplit(k1.back(),TRUE);
}
i--; //decrement i to balance "i++" at command change
/* === 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);
}
}
BLine*
-Svg_parser::newBLine(std::list<Vertice*> *points,bool loop){
+Svg_parser::newBLine(std::list<Vertex*> *points,bool loop){
BLine* data;
data=(BLine*)malloc(sizeof(BLine));
//sprintf(data->name,"%s",name.data());
- data->points=new std::list<Vertice*> (*points);
+ data->points=new std::list<Vertex*> (*points);
data->loop=loop;
data->bline_id=new String(new_guid());
data->offset_id=new String(new_guid());
build_real (root->add_child("param"),"amount",angle);
}
void
-Svg_parser::build_points(xmlpp::Element* root,std::list<Vertice*> p){
+Svg_parser::build_points(xmlpp::Element* root,std::list<Vertex*> p){
root->set_attribute("name","vector_list");
xmlpp::Element *child=root->add_child("dynamic_list");
child->set_attribute("type","vector");
- std::list<Vertice*>::iterator aux = p.begin();
+ std::list<Vertex*>::iterator aux = p.begin();
while(aux!=p.end()){
xmlpp::Element *child_entry=child->add_child("entry");
xmlpp::Element *child_vector=child_entry->add_child("vector");
}
}
void
-Svg_parser::build_vertice(xmlpp::Element* root , Vertice *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);
}
void
-Svg_parser::build_bline(xmlpp::Element* root,std::list<Vertice*> p,bool loop,String blineguid){
+Svg_parser::build_bline(xmlpp::Element* root,std::list<Vertex*> p,bool loop,String blineguid){
root->set_attribute("name","bline");
xmlpp::Element *child=root->add_child("bline");
child->set_attribute("type","bline_point");
else
child->set_attribute("loop","false");
if(!blineguid.empty()) child->set_attribute("guid",blineguid);
- std::list<Vertice*>::iterator aux = p.begin();
+ std::list<Vertex*>::iterator aux = p.begin();
while(aux!=p.end()){
- if(*aux) build_vertice (child->add_child("entry"),*aux);
+ if(*aux) build_vertex (child->add_child("entry"),*aux);
aux++;
}
}
}
void
-Svg_parser::setTg1(Vertice *p,float p1x,float p1y,float p2x,float p2y){
+Svg_parser::setTg1(Vertex *p,float p1x,float p1y,float p2x,float p2y){
float rd=0,ag=0;
float d1x,d1y,d2x,d2y,dx,dy;
d1x=p1x*60;
p->angle1=ag;
}
void
-Svg_parser::setTg2(Vertice* p,float p1x,float p1y,float p2x,float p2y){
+Svg_parser::setTg2(Vertex* p,float p1x,float p1y,float p2x,float p2y){
float rd=0,ag=0;
float d1x,d1y,d2x,d2y,dx,dy;
d1x=p1x*60;
}
void
-Svg_parser::setSplit(Vertice* p,bool val){
+Svg_parser::setSplit(Vertex* p,bool val){
if(p!=NULL){
p->split=val;
}
}
int
-Svg_parser::isFirst(Vertice* nodo,float a, float b){
+Svg_parser::isFirst(Vertex* nodo,float a, float b){
if(nodo->x==a && nodo->y==b)
return 1;
return 0;
}
-Vertice*
-Svg_parser::newVertice(float x,float y){
- Vertice* vert;
- vert=(Vertice*)malloc(sizeof(Vertice));
+Vertex*
+Svg_parser::newVertex(float x,float y){
+ Vertex* vert;
+ vert=(Vertex*)malloc(sizeof(Vertex));
vert->x=x;
vert->y=y;
vert->radius1=vert->radius2=vert->angle1=vert->angle2=0;