diff options
Diffstat (limited to 'recordmydesktop/src/rmd_rectinsert.c')
-rw-r--r-- | recordmydesktop/src/rmd_rectinsert.c | 398 |
1 files changed, 199 insertions, 199 deletions
diff --git a/recordmydesktop/src/rmd_rectinsert.c b/recordmydesktop/src/rmd_rectinsert.c index bc70e44..1950d65 100644 --- a/recordmydesktop/src/rmd_rectinsert.c +++ b/recordmydesktop/src/rmd_rectinsert.c @@ -33,53 +33,53 @@ /** * Collide two rectangles and dictate most sane action for insertion, * as well as provide the updated rectangle(s) -* \param wgeom1 resident rectangle +* \param xrect1 resident rectangle * -* \param wgeom2 New rectangle +* \param xrect2 New rectangle * -* \param wgeom_return Pointer to rectangles to be inserted +* \param xrect_return Pointer to rectangles to be inserted * -* \param ngeoms number of entries in wgeom_return +* \param nrects number of entries in xrect_return * * \retval 0 No collision * -* \retval 1 wgeom1 is covered by wgeom2 +* \retval 1 xrect1 is covered by xrect2 * -* \retval 2 wgeom2 is covered by wgeom1 +* \retval 2 xrect2 is covered by xrect1 * -* \retval -1 wgeom1 was broken (new is picked up in wgeom_return) +* \retval -1 xrect1 was broken (new is picked up in xrect_return) * -* \retval -2 wgeom2 was broken (new is picked up in wgeom_return) +* \retval -2 xrect2 was broken (new is picked up in xrect_return) * -* \retval -10 Grouping the two geoms is possible +* \retval -10 Grouping the two rects is possible * */ -static int CollideRects(WGeometry *wgeom1, - WGeometry *wgeom2, - WGeometry wgeom_return[], - int *ngeoms) { +static int CollideRects(XRectangle *xrect1, + XRectangle *xrect2, + XRectangle xrect_return[], + int *nrects) { //1 fits in 2 - if((wgeom1->x>=wgeom2->x)&& - (wgeom1->x+wgeom1->width<=wgeom2->x+wgeom2->width)&& - (wgeom1->y>=wgeom2->y)&& - (wgeom1->y+wgeom1->height<=wgeom2->y+wgeom2->height)){ - *ngeoms=0; + if((xrect1->x>=xrect2->x)&& + (xrect1->x+xrect1->width<=xrect2->x+xrect2->width)&& + (xrect1->y>=xrect2->y)&& + (xrect1->y+xrect1->height<=xrect2->y+xrect2->height)){ + *nrects=0; return 1; } //2 fits in 1 - else if((wgeom2->x>=wgeom1->x)&& - (wgeom2->x+wgeom2->width<=wgeom1->x+wgeom1->width)&& - (wgeom2->y>=wgeom1->y)&& - (wgeom2->y+wgeom2->height<=wgeom1->y+wgeom1->height)){ - *ngeoms=0; + else if((xrect2->x>=xrect1->x)&& + (xrect2->x+xrect2->width<=xrect1->x+xrect1->width)&& + (xrect2->y>=xrect1->y)&& + (xrect2->y+xrect2->height<=xrect1->y+xrect1->height)){ + *nrects=0; return 2; } //no collision - else if((wgeom1->x+wgeom1->width<wgeom2->x)|| - (wgeom2->x+wgeom2->width<wgeom1->x)|| - (wgeom1->y+wgeom1->height<wgeom2->y)|| - (wgeom2->y+wgeom2->height<wgeom1->y)){ - *ngeoms=0; + else if((xrect1->x+xrect1->width<xrect2->x)|| + (xrect2->x+xrect2->width<xrect1->x)|| + (xrect1->y+xrect1->height<xrect2->y)|| + (xrect2->y+xrect2->height<xrect1->y)){ + *nrects=0; return 0; } else{ @@ -91,10 +91,10 @@ static int CollideRects(WGeometry *wgeom1, //function should always start at the next element(which is logical since //if any rect makes it to a points none of it's part collides with previous //nodes on the list, too) - int x1[2]={wgeom1->x,wgeom1->x+wgeom1->width}; - int y1[2]={wgeom1->y,wgeom1->y+wgeom1->height}; - int x2[2]={wgeom2->x,wgeom2->x+wgeom2->width}; - int y2[2]={wgeom2->y,wgeom2->y+wgeom2->height}; + int x1[2]={xrect1->x,xrect1->x+xrect1->width}; + int y1[2]={xrect1->y,xrect1->y+xrect1->height}; + int x2[2]={xrect2->x,xrect2->x+xrect2->width}; + int y2[2]={xrect2->y,xrect2->y+xrect2->height}; int enclosed[2][4],tot1,tot2; enclosed[0][0]=(((x1[0]>=x2[0])&&(x1[0]<=x2[1])&& (y1[0]>=y2[0])&&(y1[0]<=y2[1]))?1:0); @@ -117,223 +117,223 @@ static int CollideRects(WGeometry *wgeom1, if((tot1==2)&&(tot2==2)){//same width or height, which is the best case //group if((enclosed[1][0]&&enclosed[1][1])&& - (wgeom1->width==wgeom2->width)){ - *ngeoms=1; - wgeom_return[0].x = wgeom1->x; - wgeom_return[0].y = wgeom1->y; - wgeom_return[0].width = wgeom1->width; - wgeom_return[0].height = wgeom2->height + wgeom2->y - wgeom1->y; + (xrect1->width==xrect2->width)){ + *nrects=1; + xrect_return[0].x = xrect1->x; + xrect_return[0].y = xrect1->y; + xrect_return[0].width = xrect1->width; + xrect_return[0].height = xrect2->height + xrect2->y - xrect1->y; return -10; } else if((enclosed[1][0]&&enclosed[1][2])&& - (wgeom1->height==wgeom2->height)){ - *ngeoms=1; - wgeom_return[0].x = wgeom1->x; - wgeom_return[0].y = wgeom1->y; - wgeom_return[0].width = wgeom2->width + wgeom2->x - wgeom1->x; - wgeom_return[0].height = wgeom1->height; + (xrect1->height==xrect2->height)){ + *nrects=1; + xrect_return[0].x = xrect1->x; + xrect_return[0].y = xrect1->y; + xrect_return[0].width = xrect2->width + xrect2->x - xrect1->x; + xrect_return[0].height = xrect1->height; return -10; } else if((enclosed[1][3]&&enclosed[1][1])&& - (wgeom1->height==wgeom2->height)){ - *ngeoms=1; - wgeom_return[0].x = wgeom2->x; - wgeom_return[0].y = wgeom2->y; - wgeom_return[0].width = wgeom1->width + wgeom1->x - wgeom2->x; - wgeom_return[0].height = wgeom2->height; + (xrect1->height==xrect2->height)){ + *nrects=1; + xrect_return[0].x = xrect2->x; + xrect_return[0].y = xrect2->y; + xrect_return[0].width = xrect1->width + xrect1->x - xrect2->x; + xrect_return[0].height = xrect2->height; return -10; } else if((enclosed[1][3]&&enclosed[1][2])&& - (wgeom1->width==wgeom2->width)){ - *ngeoms=1; - wgeom_return[0].x = wgeom2->x; - wgeom_return[0].y = wgeom2->y; - wgeom_return[0].width = wgeom2->width; - wgeom_return[0].height = wgeom1->height + wgeom1->y - wgeom2->y; + (xrect1->width==xrect2->width)){ + *nrects=1; + xrect_return[0].x = xrect2->x; + xrect_return[0].y = xrect2->y; + xrect_return[0].width = xrect2->width; + xrect_return[0].height = xrect1->height + xrect1->y - xrect2->y; return -10; } //if control reaches here therewasn't a group and we go on } if(tot2==2){ - //break geom2 - wgeom_return[0].x = wgeom2->x; - wgeom_return[0].y = wgeom2->y; - wgeom_return[0].width = wgeom2->width; - wgeom_return[0].height = wgeom2->height; - *ngeoms=1; + //break rect2 + xrect_return[0].x = xrect2->x; + xrect_return[0].y = xrect2->y; + xrect_return[0].width = xrect2->width; + xrect_return[0].height = xrect2->height; + *nrects=1; if(enclosed[1][0]&&enclosed[1][1]){ - wgeom_return[0].y = y1[1]; - wgeom_return[0].height -= y1[1] - y2[0]; + xrect_return[0].y = y1[1]; + xrect_return[0].height -= y1[1] - y2[0]; } else if(enclosed[1][0]&&enclosed[1][2]){ - wgeom_return[0].x = x1[1]; - wgeom_return[0].width -= x1[1] - x2[0]; + xrect_return[0].x = x1[1]; + xrect_return[0].width -= x1[1] - x2[0]; } else if(enclosed[1][3]&&enclosed[1][1]) - wgeom_return[0].width -= x2[1] - x1[0]; + xrect_return[0].width -= x2[1] - x1[0]; else if(enclosed[1][3]&&enclosed[1][2]) - wgeom_return[0].height -= y2[1] - y1[0]; + xrect_return[0].height -= y2[1] - y1[0]; return -2; } else if(tot1==2){ //if the first one breaks(which is already inserted) //then we reenter the part that was left and the one //that was to be inserted - wgeom_return[1].x = wgeom2->x; - wgeom_return[1].y = wgeom2->y; - wgeom_return[1].width = wgeom2->width; - wgeom_return[1].height = wgeom2->height; - wgeom_return[0].x = wgeom1->x; - wgeom_return[0].y = wgeom1->y; - wgeom_return[0].width = wgeom1->width; - wgeom_return[0].height = wgeom1->height; - *ngeoms=1; + xrect_return[1].x = xrect2->x; + xrect_return[1].y = xrect2->y; + xrect_return[1].width = xrect2->width; + xrect_return[1].height = xrect2->height; + xrect_return[0].x = xrect1->x; + xrect_return[0].y = xrect1->y; + xrect_return[0].width = xrect1->width; + xrect_return[0].height = xrect1->height; + *nrects=1; if(enclosed[0][0]&&enclosed[0][1]){ - wgeom_return[0].y = y2[1]; - wgeom_return[0].height -= y2[1] - y1[0]; + xrect_return[0].y = y2[1]; + xrect_return[0].height -= y2[1] - y1[0]; } else if(enclosed[0][0]&&enclosed[0][2]){ - wgeom_return[0].x = x2[1]; - wgeom_return[0].width -= x2[1] - x1[0]; + xrect_return[0].x = x2[1]; + xrect_return[0].width -= x2[1] - x1[0]; } else if(enclosed[0][3]&&enclosed[0][1]) - wgeom_return[0].width -= x1[1] - x2[0]; + xrect_return[0].width -= x1[1] - x2[0]; else if(enclosed[0][3]&&enclosed[0][2]) - wgeom_return[0].height -= y1[1] - y2[0]; + xrect_return[0].height -= y1[1] - y2[0]; return -1; } else if(tot2==1){ //in which case there is also tot1==1 //but we rather not break that - //break geom2 in two - *ngeoms=2; + //break rect2 in two + *nrects=2; if(enclosed[1][0]){ //first - wgeom_return[0].x = x1[1]; - wgeom_return[0].y = y2[0]; - wgeom_return[0].width = wgeom2->width - x1[1] + x2[0]; - wgeom_return[0].height = wgeom2->height; + xrect_return[0].x = x1[1]; + xrect_return[0].y = y2[0]; + xrect_return[0].width = xrect2->width - x1[1] + x2[0]; + xrect_return[0].height = xrect2->height; //second - wgeom_return[1].x = x2[0]; - wgeom_return[1].y = y1[1]; - wgeom_return[1].width = x1[1] - x2[0]; - wgeom_return[1].height = wgeom2->height - y1[1] + y2[0]; + xrect_return[1].x = x2[0]; + xrect_return[1].y = y1[1]; + xrect_return[1].width = x1[1] - x2[0]; + xrect_return[1].height = xrect2->height - y1[1] + y2[0]; } else if(enclosed[1][1]){ //first - wgeom_return[0].x = x2[0]; - wgeom_return[0].y = y2[0]; - wgeom_return[0].width = wgeom2->width - x2[1] + x1[0]; - wgeom_return[0].height = wgeom2->height; + xrect_return[0].x = x2[0]; + xrect_return[0].y = y2[0]; + xrect_return[0].width = xrect2->width - x2[1] + x1[0]; + xrect_return[0].height = xrect2->height; //second - wgeom_return[1].x = x1[0]; - wgeom_return[1].y = y1[1]; - wgeom_return[1].width = x2[1] - x1[0]; - wgeom_return[1].height = wgeom2->height - y1[1] + y2[0]; + xrect_return[1].x = x1[0]; + xrect_return[1].y = y1[1]; + xrect_return[1].width = x2[1] - x1[0]; + xrect_return[1].height = xrect2->height - y1[1] + y2[0]; } else if(enclosed[1][2]){ //first(same as [1][0]) - wgeom_return[0].x = x1[1]; - wgeom_return[0].y = y2[0]; - wgeom_return[0].width = wgeom2->width - x1[1] + x2[0]; - wgeom_return[0].height = wgeom2->height; + xrect_return[0].x = x1[1]; + xrect_return[0].y = y2[0]; + xrect_return[0].width = xrect2->width - x1[1] + x2[0]; + xrect_return[0].height = xrect2->height; //second - wgeom_return[1].x = x2[0]; - wgeom_return[1].y = y2[0]; - wgeom_return[1].width = x1[1] - x2[0]; - wgeom_return[1].height = wgeom2->height - y2[1] + y1[0]; + xrect_return[1].x = x2[0]; + xrect_return[1].y = y2[0]; + xrect_return[1].width = x1[1] - x2[0]; + xrect_return[1].height = xrect2->height - y2[1] + y1[0]; } else if(enclosed[1][3]){ //first(same as [1][1]) - wgeom_return[0].x = x2[0]; - wgeom_return[0].y = y2[0]; - wgeom_return[0].width = wgeom2->width - x2[1] + x1[0]; - wgeom_return[0].height = wgeom2->height; + xrect_return[0].x = x2[0]; + xrect_return[0].y = y2[0]; + xrect_return[0].width = xrect2->width - x2[1] + x1[0]; + xrect_return[0].height = xrect2->height; //second - wgeom_return[1].x = x1[0]; - wgeom_return[1].y = y2[0]; - wgeom_return[1].width = x2[1] - x1[0]; - wgeom_return[1].height = wgeom2->height - y2[1] + y1[0]; + xrect_return[1].x = x1[0]; + xrect_return[1].y = y2[0]; + xrect_return[1].width = x2[1] - x1[0]; + xrect_return[1].height = xrect2->height - y2[1] + y1[0]; } return -2; } else{//polygons collide but no point of one is in the other - //so we just keep the two parts of geom2 that are outside geom1 + //so we just keep the two parts of rect2 that are outside rect1 - //break geom2 in two + //break rect2 in two //two cases: - //geom2 crossing vertically geom1 - //and geom2 crossing horizontally geom1 + //rect2 crossing vertically rect1 + //and rect2 crossing horizontally rect1 //The proper one can be found by simply checking x,y positions - *ngeoms=2; - if(wgeom2->y<wgeom1->y){ + *nrects=2; + if(xrect2->y<xrect1->y){ //common - wgeom_return[0].x = wgeom_return[1].x = x2[0]; - wgeom_return[0].width = wgeom_return[1].width = wgeom2->width; + xrect_return[0].x = xrect_return[1].x = x2[0]; + xrect_return[0].width = xrect_return[1].width = xrect2->width; - wgeom_return[0].y = y2[0]; - wgeom_return[0].height = wgeom2->height - y2[1] + y1[0]; - wgeom_return[1].y = y1[1]; - wgeom_return[1].height = y2[1] - y1[1]; + xrect_return[0].y = y2[0]; + xrect_return[0].height = xrect2->height - y2[1] + y1[0]; + xrect_return[1].y = y1[1]; + xrect_return[1].height = y2[1] - y1[1]; } else{ //common - wgeom_return[0].y = wgeom_return[1].y = y2[0]; - wgeom_return[0].height = wgeom_return[1].height = wgeom2->height; + xrect_return[0].y = xrect_return[1].y = y2[0]; + xrect_return[0].height = xrect_return[1].height = xrect2->height; - wgeom_return[0].x = x2[0]; - wgeom_return[0].width = wgeom2->width - x2[1] + x1[0]; - wgeom_return[1].x = x1[1]; - wgeom_return[1].width = x2[1] - x1[1]; + xrect_return[0].x = x2[0]; + xrect_return[0].width = xrect2->width - x2[1] + x1[0]; + xrect_return[1].x = x1[1]; + xrect_return[1].width = x2[1] - x1[1]; } return -2; } } } -int RectInsert(RectArea **root,WGeometry *wgeom){ +int RectInsert(RectArea **root,XRectangle *xrect){ int total_insertions=0; RectArea *temp=NULL,*newnode=(RectArea *)malloc(sizeof(RectArea)); //align //we do need to know boundaries - wgeom->width+=(wgeom->width%2)|(wgeom->x%2); - wgeom->height+=(wgeom->height%2)|(wgeom->y%2); - wgeom->width+=(wgeom->width%2); - wgeom->height+=(wgeom->height%2); - wgeom->x-=wgeom->x%2; - wgeom->y-=wgeom->y%2; -// fprintf(stderr," %d %d %d %d\n",wgeom->x, + xrect->width+=(xrect->width%2)|(xrect->x%2); + xrect->height+=(xrect->height%2)|(xrect->y%2); + xrect->width+=(xrect->width%2); + xrect->height+=(xrect->height%2); + xrect->x-=xrect->x%2; + xrect->y-=xrect->y%2; +// fprintf(stderr," %d %d %d %d\n",xrect->x, - newnode->geom.x=wgeom->x; - newnode->geom.y=wgeom->y; - newnode->geom.width=wgeom->width; - newnode->geom.height=wgeom->height; + newnode->rect.x=xrect->x; + newnode->rect.y=xrect->y; + newnode->rect.width=xrect->width; + newnode->rect.height=xrect->height; newnode->prev=newnode->next=NULL; if(*root==NULL){ *root=newnode; total_insertions=1; } else{ - WGeometry wgeom_return[2]; + XRectangle xrect_return[2]; - int ngeoms=0,insert_ok=1,i=0; + int nrects=0,insert_ok=1,i=0; temp=*root; while(insert_ok){ //if something is broken list does not procceed //(except on -1 collres case) - int collres = CollideRects(&temp->geom, wgeom, &wgeom_return[0], &ngeoms); + int collres = CollideRects(&temp->rect, xrect, &xrect_return[0], &nrects); if((!collres)) insert_ok=1; else{ - for(i=0;i<ngeoms;i++){ - wgeom_return[i].width += (wgeom_return[i].width % 2) | - (wgeom_return[i].x % 2); - wgeom_return[i].height += (wgeom_return[i].height % 2) | - (wgeom_return[i].y % 2); - wgeom_return[i].width += (wgeom_return[i].width % 2); - wgeom_return[i].height += (wgeom_return[i].height % 2); - wgeom_return[i].x -= wgeom_return[i].x % 2; - wgeom_return[i].y -= wgeom_return[i].y % 2; + for(i=0;i<nrects;i++){ + xrect_return[i].width += (xrect_return[i].width % 2) | + (xrect_return[i].x % 2); + xrect_return[i].height += (xrect_return[i].height % 2) | + (xrect_return[i].y % 2); + xrect_return[i].width += (xrect_return[i].width % 2); + xrect_return[i].height += (xrect_return[i].height % 2); + xrect_return[i].x -= xrect_return[i].x % 2; + xrect_return[i].y -= xrect_return[i].y % 2; } insert_ok=0; switch(collres){ @@ -345,8 +345,8 @@ int RectInsert(RectArea **root,WGeometry *wgeom){ temp->prev->next=temp->next; temp->next->prev=temp->prev; free(temp); - if((wgeom->width>0)&&(wgeom->height>0)) - total_insertions+=RectInsert(&temp1,wgeom); + if((xrect->width>0)&&(xrect->height>0)) + total_insertions+=RectInsert(&temp1,xrect); } else{ temp->prev->next=newnode; @@ -359,10 +359,10 @@ int RectInsert(RectArea **root,WGeometry *wgeom){ if((*root)->next!=NULL){ (*root)=(*root)->next; (*root)->prev=NULL; - if((wgeom->width>0)&&(wgeom->height>0)) - total_insertions+=RectInsert(root,wgeom); + if((xrect->width>0)&&(xrect->height>0)) + total_insertions+=RectInsert(root,xrect); } - else if((wgeom->width>0)&&(wgeom->height>0)){ + else if((xrect->width>0)&&(xrect->height>0)){ *root=newnode; total_insertions++; } @@ -379,12 +379,12 @@ int RectInsert(RectArea **root,WGeometry *wgeom){ case -1://current node is broken and reinserted //(in same pos) //newnode is also reinserted - if (wgeom_return[0].width > 0 && - wgeom_return[0].height > 0) { - temp->geom.x = wgeom_return[0].x; - temp->geom.y = wgeom_return[0].y; - temp->geom.width = wgeom_return[0].width; - temp->geom.height = wgeom_return[0].height; + if (xrect_return[0].width > 0 && + xrect_return[0].height > 0) { + temp->rect.x = xrect_return[0].x; + temp->rect.y = xrect_return[0].y; + temp->rect.width = xrect_return[0].width; + temp->rect.height = xrect_return[0].height; if(temp->next==NULL){ temp->next=newnode; newnode->prev=temp; @@ -412,49 +412,49 @@ int RectInsert(RectArea **root,WGeometry *wgeom){ temp->next->prev=temp->prev; temp->prev->next=temp->next; total_insertions+=RectInsert(&temp->next, - wgeom); + xrect); } free(temp); } break; case -2://new is broken and reinserted if(temp->next==NULL){ - total_insertions+=ngeoms; - newnode->geom.x = wgeom_return[0].x; - newnode->geom.y = wgeom_return[0].y; - newnode->geom.width = wgeom_return[0].width; - newnode->geom.height = wgeom_return[0].height; + total_insertions+=nrects; + newnode->rect.x = xrect_return[0].x; + newnode->rect.y = xrect_return[0].y; + newnode->rect.width = xrect_return[0].width; + newnode->rect.height = xrect_return[0].height; temp->next=newnode; newnode->prev=temp; - if(ngeoms>1){ + if(nrects>1){ RectArea *newnode1= (RectArea *)malloc(sizeof(RectArea)); - newnode1->geom.x = wgeom_return[1].x; - newnode1->geom.y = wgeom_return[1].y; - newnode1->geom.width = wgeom_return[1].width; - newnode1->geom.height = wgeom_return[1].height; + newnode1->rect.x = xrect_return[1].x; + newnode1->rect.y = xrect_return[1].y; + newnode1->rect.width = xrect_return[1].width; + newnode1->rect.height = xrect_return[1].height; newnode->next=newnode1; newnode1->prev=newnode; newnode1->next=NULL; } } else{ - for(i=0;i<ngeoms;i++){ - if(wgeom_return[i].width > 0 && - wgeom_return[i].height > 0) + for(i=0;i<nrects;i++){ + if(xrect_return[i].width > 0 && + xrect_return[i].height > 0) total_insertions+= - RectInsert(&temp->next, &wgeom_return[i]); + RectInsert(&temp->next, &xrect_return[i]); } } break; case -10://grouped if(temp->prev==NULL){ if(temp->next==NULL){//empty list - newnode->geom.x = wgeom_return[0].x; - newnode->geom.y = wgeom_return[0].y; - newnode->geom.width = wgeom_return[0].width; - newnode->geom.height = wgeom_return[0].height; + newnode->rect.x = xrect_return[0].x; + newnode->rect.y = xrect_return[0].y; + newnode->rect.width = xrect_return[0].width; + newnode->rect.height = xrect_return[0].height; *root=newnode; free(temp); @@ -464,17 +464,17 @@ int RectInsert(RectArea **root,WGeometry *wgeom){ *root=temp->next; (*root)->prev=NULL; free(temp); - if(wgeom_return[0].width > 0 && - wgeom_return[0].height > 0) + if(xrect_return[0].width > 0 && + xrect_return[0].height > 0) total_insertions+= - RectInsert(root, &wgeom_return[0]); + RectInsert(root, &xrect_return[0]); } } else if(temp->next==NULL){//last, enter anyway - newnode->geom.x = wgeom_return[0].x; - newnode->geom.y = wgeom_return[0].y; - newnode->geom.width = wgeom_return[0].width; - newnode->geom.height = wgeom_return[0].height; + newnode->rect.x = xrect_return[0].x; + newnode->rect.y = xrect_return[0].y; + newnode->rect.width = xrect_return[0].width; + newnode->rect.height = xrect_return[0].height; temp->prev->next=newnode; newnode->prev=temp->prev; free(temp); @@ -485,10 +485,10 @@ int RectInsert(RectArea **root,WGeometry *wgeom){ temp->prev->next=temp->next; temp->next->prev=temp->prev; free(temp); - if(wgeom_return[0].width > 0 && - wgeom_return[0].height > 0) + if(xrect_return[0].width > 0 && + xrect_return[0].height > 0) total_insertions+= - RectInsert(&temp1, &wgeom_return[0]); + RectInsert(&temp1, &xrect_return[0]); } break; } |