/[CvsGraph]/cvsgraph/cvsgraph.c
ViewVC logotype

Diff of /cvsgraph/cvsgraph.c

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.58, Wed Jun 22 22:51:51 2005 UTC revision 1.59, Thu Dec 15 13:06:09 2005 UTC
# Line 703  Line 703 
703          return r;          return r;
704  }  }
705    
706  static char *build_regex(size_t n, regmatch_t *m, const char *ms)  static char *build_regex(size_t n, regmatch_t *m, const char *ms, int idx)
707  {  {
708          char *cptr;          char *cptr;
709          int i;          int i;
710    
711          if(!conf.merge_to || !conf.merge_to[0])          if(!conf.merge_to.strs[idx])
712                  return NULL;                  return NULL;
713    
714          zap_string();          zap_string();
715          for(cptr = conf.merge_to; *cptr; cptr++)          for(cptr = conf.merge_to.strs[idx]; *cptr; cptr++)
716          {          {
717                  if(*cptr == '%')                  if(*cptr == '%')
718                  {                  {
# Line 761  Line 761 
761                  rcs->merges[rcs->nmerges].type = TR_REVISION;                  rcs->merges[rcs->nmerges].type = TR_REVISION;
762                  rcs->merges[rcs->nmerges].from.rev = *r;                  rcs->merges[rcs->nmerges].from.rev = *r;
763                  rcs->merges[rcs->nmerges].to.rev = rcs->srev[i];                  rcs->merges[rcs->nmerges].to.rev = rcs->srev[i];
764                    rcs->merges[rcs->nmerges].clr = -1;
765                  rcs->nmerges++;                  rcs->nmerges++;
766                  (*r)->stripped = -1;                  (*r)->stripped = -1;
767                  rcs->srev[i]->stripped = -1;                  rcs->srev[i]->stripped = -1;
# Line 769  Line 770 
770    
771  static void find_merges(rcsfile_t *rcs)  static void find_merges(rcsfile_t *rcs)
772  {  {
773          int i;          int i, j;
774          int err;          int err;
775          int rcflags = REG_EXTENDED | (conf.merge_nocase ? REG_ICASE : 0);          int rcflags = REG_EXTENDED | (conf.merge_nocase ? REG_ICASE : 0);
776          regex_t *refrom = NULL;          regex_t *refrom = NULL;
777          regex_t *reto = NULL;          regex_t *reto = NULL;
778          regmatch_t *matchfrom = NULL;          regmatch_t *matchfrom = NULL;
779    
780          if(!conf.merge_from || !conf.merge_from[0] || !conf.merge_to || !conf.merge_to[0])          if(!conf.merge_from.n || !conf.merge_to.n)
                 return;  
   
         refrom = xmalloc(sizeof(*refrom));  
         reto = xmalloc(sizeof(*reto));  
   
         /* Compile the 'from' regex match for merge identification */  
         err = regcomp(refrom, conf.merge_from, rcflags);  
         if(err)  
         {  
                 char *msg;  
                 i = regerror(err, refrom, NULL, 0);  
                 msg = xmalloc(i+1);  
                 regerror(err, refrom, msg, i+1);  
                 stack_msg(MSG_WARN, "%s", msg);  
                 xfree(msg);  
                 xfree(refrom);  
                 xfree(reto);  
781                  return;                  return;
         }  
         else  
                 matchfrom = xmalloc((refrom->re_nsub+1) * sizeof(*matchfrom));  
782    
783          for(i = 0; i < rcs->tags->ntags; i++)          for(j = 0; j < conf.merge_from.n; j++)
784          {          {
785                  tag_t *t = rcs->tags->tags[i];                  if(!conf.merge_from.strs[0] || !conf.merge_to.strs[0])
   
                 /* Must be revision tags and not detached */  
                 if(t->rev->isbranch || !t->logrev)  
786                          continue;                          continue;
787    
788                  /* Try to find merge tag matches */                  refrom = xmalloc(sizeof(*refrom));
789                  if(!regexec(refrom, t->tag, refrom->re_nsub+1, matchfrom, 0))                  reto = xmalloc(sizeof(*reto));
790    
791                    /* Compile the 'from' regex match for merge identification */
792                    err = regcomp(refrom, conf.merge_from.strs[j], rcflags);
793                    if(err)
794                  {                  {
795                          int n;                          char *msg;
796                          char *to;                          i = regerror(err, refrom, NULL, 0);
797                            msg = xmalloc(i+1);
798                            regerror(err, refrom, msg, i+1);
799                            stack_msg(MSG_WARN, "%s", msg);
800                            xfree(msg);
801                            xfree(refrom);
802                            xfree(reto);
803                            return;
804                    }
805                    else
806                            matchfrom = xmalloc((refrom->re_nsub+1) * sizeof(*matchfrom));
807    
808                    for(i = 0; i < rcs->tags->ntags; i++)
809                    {
810                            tag_t *t = rcs->tags->tags[i];
811    
812                            /* Must be revision tags and not detached */
813                            if(t->rev->isbranch || !t->logrev)
814                                    continue;
815    
816                          to = build_regex(refrom->re_nsub+1, matchfrom, t->tag);                          /* Try to find merge tag matches */
817                          if(to)                          if(!regexec(refrom, t->tag, refrom->re_nsub+1, matchfrom, 0))
818                          {                          {
819                                  err = regcomp(reto, to, rcflags);                                  int n;
820                                  if(err)                                  char *to;
821                                  {  
822                                          char *msg;                                  to = build_regex(refrom->re_nsub+1, matchfrom, t->tag, j);
823                                          i = regerror(err, reto, NULL, 0);                                  if(to)
                                         msg = xmalloc(i+1);  
                                         regerror(err, reto, msg, i+1);  
                                         stack_msg(MSG_WARN, "%s", msg);  
                                         xfree(msg);  
                                 }  
                                 else if(!err)  
824                                  {                                  {
825                                          for(n = 0; n < rcs->tags->ntags; n++)                                          err = regcomp(reto, to, rcflags);
826                                            if(err)
827                                          {                                          {
828                                                  tag_t *nt = rcs->tags->tags[n];                                                  char *msg;
829                                                  /* From and To never should match the same tag or belong to a branch */                                                  i = regerror(err, reto, NULL, 0);
830                                                  if(n == i || nt->rev->isbranch || !nt->logrev)                                                  msg = xmalloc(i+1);
831                                                          continue;                                                  regerror(err, reto, msg, i+1);
832                                                    stack_msg(MSG_WARN, "%s", msg);
833                                                  if(!regexec(reto, nt->tag, 0, NULL, 0))                                                  xfree(msg);
834                                            }
835                                            else if(!err)
836                                            {
837                                                    for(n = 0; n < rcs->tags->ntags; n++)
838                                                  {                                                  {
839                                                          /* Tag matches */                                                          tag_t *nt = rcs->tags->tags[n];
840                                                          rcs->merges = xrealloc(rcs->merges,                                                          /* From and To never should match the same tag or belong to a branch */
841                                                                          sizeof(rcs->merges[0]) * (rcs->nmerges+1));                                                          if(n == i || nt->rev->isbranch || !nt->logrev)
842                                                          rcs->merges[rcs->nmerges].type = TR_TAG;                                                                  continue;
843                                                          rcs->merges[rcs->nmerges].to.tag = nt;  
844                                                          rcs->merges[rcs->nmerges].from.tag = t;                                                          if(!regexec(reto, nt->tag, 0, NULL, 0))
                                                         rcs->nmerges++;  
                                                         if(!conf.tag_ignore_merge)  
845                                                          {                                                          {
846                                                                  nt->ignore = 0;                                                                  /* Tag matches */
847                                                                  t->ignore = 0;                                                                  rcs->merges = xrealloc(rcs->merges,
848                                                                                    sizeof(rcs->merges[0]) * (rcs->nmerges+1));
849                                                                    rcs->merges[rcs->nmerges].type = TR_TAG;
850                                                                    rcs->merges[rcs->nmerges].to.tag = nt;
851                                                                    rcs->merges[rcs->nmerges].from.tag = t;
852                                                                    rcs->merges[rcs->nmerges].clr = j;
853                                                                    rcs->nmerges++;
854                                                                    if(!conf.tag_ignore_merge)
855                                                                    {
856                                                                            nt->ignore = 0;
857                                                                            t->ignore = 0;
858                                                                    }
859                                                                    /* We cannot (should not) match multiple times */
860                                                                    if(!conf.merge_findall)
861                                                                            break;
862                                                          }                                                          }
                                                         /* We cannot (should not) match multiple times */  
                                                         if(!conf.merge_findall)  
                                                                 break;  
863                                                  }                                                  }
864                                                    regfree(reto);
865                                          }                                          }
866                                          regfree(reto);                                          xfree(to);
867                                  }                                  }
                                 xfree(to);  
868                          }                          }
869                  }                  }
870                    if(matchfrom)   xfree(matchfrom);
871                    if(refrom)      { regfree(refrom); xfree(refrom); }
872                    if(reto)        xfree(reto);
873                    refrom = NULL;
874                    reto = NULL;
875                    matchfrom = NULL;
876          }          }
         if(matchfrom)   xfree(matchfrom);  
         if(refrom)      { regfree(refrom); xfree(refrom); }  
         if(reto)        xfree(reto);  
877  }  }
878    
879  static void assign_tags(rcsfile_t *rcs)  static void assign_tags(rcsfile_t *rcs)
# Line 1333  Line 1344 
1344  static color_t *clr_id = NULL;  static color_t *clr_id = NULL;
1345  static int nclr_id = 0;  static int nclr_id = 0;
1346    
1347  static color_t *clr(gdImagePtr im, const char *s, revision_t *r, branch_t *b)  static color_t *clr(gdImagePtr im, const char *s, revision_t *r, branch_t *b, int idx)
1348  {  {
1349          int i;          int i;
1350          color_t *c = get_colorref(s);          color_t *c = get_colorref(s, idx);
1351          if(!c)          if(!c)
1352                  c = &black_color;                  c = &black_color;
1353          for(i = 0; i < nclr_id; i++)          for(i = 0; i < nclr_id; i++)
# Line 1503  Line 1514 
1514          }          }
1515  #endif  #endif
1516          yy = -yy;          yy = -yy;
1517          gdImageString(im, f->gdfont, x+xx+1, y+yy, s, c->id);          gdImageString(im, f->gdfont, x+xx+1, y+yy, (unsigned char *)s, c->id);
1518  }  }
1519    
1520  static void draw_stringnl(gdImagePtr im, char *s, font_t *f, int x, int y, int align, color_t *c)  static void draw_stringnl(gdImagePtr im, char *s, font_t *f, int x, int y, int align, color_t *c)
# Line 1545  Line 1556 
1556                  ty = r->y;                  ty = r->y;
1557                  x2 = r->cx;                  x2 = r->cx;
1558          }          }
1559          draw_rbox(im, lx, ty, rx, ty+r->h, 0, clr(im, "rev_color", r, NULL), clr(im, "rev_bgcolor", r, NULL));          draw_rbox(im, lx, ty, rx, ty+r->h, 0, clr(im, "rev_color", r, NULL, 0), clr(im, "rev_bgcolor", r, NULL, 0));
1560          ty += conf.rev_tspace;          ty += conf.rev_tspace;
1561          if(!conf.rev_hidenumber)          if(!conf.rev_hidenumber)
1562          {          {
1563                  draw_string(im, r->rev->rev, &conf.rev_font, x2, ty, ALIGN_HC, clr(im, "rev_color", r, NULL));                  draw_string(im, r->rev->rev, &conf.rev_font, x2, ty, ALIGN_HC, clr(im, "rev_color", r, NULL, 0));
1564                  ty += get_sheight(r->rev->rev, &conf.rev_font);                  ty += get_sheight(r->rev->rev, &conf.rev_font);
1565          }          }
1566          draw_stringnl(im, r->revtext, &conf.rev_text_font, x2, ty, ALIGN_HC, clr(im, "rev_text_color", r, NULL));          draw_stringnl(im, r->revtext, &conf.rev_text_font, x2, ty, ALIGN_HC, clr(im, "rev_text_color", r, NULL, 0));
1567          ty += get_sheight(r->revtext, &conf.rev_text_font);          ty += get_sheight(r->revtext, &conf.rev_text_font);
1568          for(i = 0; i < r->ntags; i++)          for(i = 0; i < r->ntags; i++)
1569          {          {
1570                  draw_string(im, r->tags[i]->tag, &conf.tag_font, x2, ty, ALIGN_HC, clr(im, "tag_color", r, NULL));                  draw_string(im, r->tags[i]->tag, &conf.tag_font, x2, ty, ALIGN_HC, clr(im, "tag_color", r, NULL, 0));
1571                  ty += get_sheight(r->tags[i]->tag, &conf.tag_font) + conf.rev_separator;                  ty += get_sheight(r->tags[i]->tag, &conf.tag_font) + conf.rev_separator;
1572          }          }
1573  }  }
# Line 1581  Line 1592 
1592                  rx = lx + b->w;                  rx = lx + b->w;
1593                  x2 = b->cx;                  x2 = b->cx;
1594          }          }
1595          draw_rbox(im, lx+xp, yp, rx+xp, yp+b->h, 5, clr(im, "branch_color", NULL, b), clr(im, "branch_bgcolor", NULL, b));          draw_rbox(im, lx+xp, yp, rx+xp, yp+b->h, 5, clr(im, "branch_color", NULL, b, 0), clr(im, "branch_bgcolor", NULL, b, 0));
1596          yy = conf.branch_tspace;          yy = conf.branch_tspace;
1597          if(!b->nfolds)          if(!b->nfolds)
1598          {          {
1599                  if(!conf.rev_hidenumber)                  if(!conf.rev_hidenumber)
1600                  {                  {
1601                          draw_string(im, b->branch->branch, &conf.branch_font, x2+xp, yp+yy, ALIGN_HC, clr(im, "branch_color", NULL, b));                          draw_string(im, b->branch->branch, &conf.branch_font, x2+xp, yp+yy, ALIGN_HC, clr(im, "branch_color", NULL, b, 0));
1602                          yy += get_sheight(b->branch->branch, &conf.branch_font);                          yy += get_sheight(b->branch->branch, &conf.branch_font);
1603                  }                  }
1604                  for(i = 0; i < b->ntags; i++)                  for(i = 0; i < b->ntags; i++)
1605                  {                  {
1606                          draw_string(im, b->tags[i]->tag, &conf.branch_tag_font, x2+xp, yp+yy, ALIGN_HC, clr(im, "branch_tag_color", NULL, b));                          draw_string(im, b->tags[i]->tag, &conf.branch_tag_font, x2+xp, yp+yy, ALIGN_HC, clr(im, "branch_tag_color", NULL, b, 0));
1607                          yy += get_sheight(b->tags[i]->tag, &conf.branch_tag_font);                          yy += get_sheight(b->tags[i]->tag, &conf.branch_tag_font);
1608                  }                  }
1609          }          }
# Line 1601  Line 1612 
1612                  int y1, y2;                  int y1, y2;
1613                  int tx = lx + b->fw + conf.branch_lspace;                  int tx = lx + b->fw + conf.branch_lspace;
1614                  int nx = tx - get_swidth(" ", &conf.branch_font);                  int nx = tx - get_swidth(" ", &conf.branch_font);
1615                  draw_string(im, b->branch->branch, &conf.branch_font, nx+xp, yp+yy, ALIGN_HR, clr(im, "branch_color", NULL, b));                  draw_string(im, b->branch->branch, &conf.branch_font, nx+xp, yp+yy, ALIGN_HR, clr(im, "branch_color", NULL, b, 0));
1616                  y1 = get_sheight(b->branch->branch, &conf.branch_font);                  y1 = get_sheight(b->branch->branch, &conf.branch_font);
1617                  draw_string(im, b->tags[0]->tag, &conf.branch_tag_font, tx+xp, yp+yy, ALIGN_HL, clr(im, "branch_tag_color", NULL, b));                  draw_string(im, b->tags[0]->tag, &conf.branch_tag_font, tx+xp, yp+yy, ALIGN_HL, clr(im, "branch_tag_color", NULL, b, 0));
1618                  y2 = get_sheight(b->tags[0]->tag, &conf.branch_font);                  y2 = get_sheight(b->tags[0]->tag, &conf.branch_font);
1619                  yy += MAX(y1, y2);                  yy += MAX(y1, y2);
1620                  for(i = 0; i < b->nfolds; i++)                  for(i = 0; i < b->nfolds; i++)
1621                  {                  {
1622                          draw_string(im, b->folds[i]->branch->branch, &conf.branch_font, nx+xp, yp+yy, ALIGN_HR, clr(im, "branch_color", NULL, b));                          draw_string(im, b->folds[i]->branch->branch, &conf.branch_font, nx+xp, yp+yy, ALIGN_HR, clr(im, "branch_color", NULL, b, 0));
1623                          y1 = get_sheight(b->folds[i]->branch->branch, &conf.branch_font);                          y1 = get_sheight(b->folds[i]->branch->branch, &conf.branch_font);
1624                          draw_string(im, b->folds[i]->tags[0]->tag, &conf.branch_tag_font, tx+xp, yp+yy, ALIGN_HL, clr(im, "branch_tag_color", NULL, b));                          draw_string(im, b->folds[i]->tags[0]->tag, &conf.branch_tag_font, tx+xp, yp+yy, ALIGN_HL, clr(im, "branch_tag_color", NULL, b, 0));
1625                          y2 = get_sheight(b->folds[i]->tags[0]->tag, &conf.branch_tag_font);                          y2 = get_sheight(b->folds[i]->tags[0]->tag, &conf.branch_tag_font);
1626                          yy += MAX(y1, y2);                          yy += MAX(y1, y2);
1627                  }                  }
# Line 1649  Line 1660 
1660                          for(i = 0; i < b->nrevs; i++)                          for(i = 0; i < b->nrevs; i++)
1661                          {                          {
1662                                  revision_t *r = b->revs[i];                                  revision_t *r = b->revs[i];
1663                                  line[0] = line[3] = clr(im, "rev_color", r, b)->id;                                  line[0] = line[3] = clr(im, "rev_color", r, b, 0)->id;
1664                                  gdImageSetStyle(im, line, r->stripped > 0 ? 4 : 1);                                  gdImageSetStyle(im, line, r->stripped > 0 ? 4 : 1);
1665                                  gdImageLine(im, xx, r->y, r->cx+r->w, r->y, gdStyled);                                  gdImageLine(im, xx, r->y, r->cx+r->w, r->y, gdStyled);
1666                                  for(sign = l = 1; l < conf.thick_lines; l++)                                  for(sign = l = 1; l < conf.thick_lines; l++)
# Line 1664  Line 1675 
1675                          if(conf.branch_dupbox && b->nrevs)                          if(conf.branch_dupbox && b->nrevs)
1676                          {                          {
1677                                  i = b->cx - b->tw + b->w;                                  i = b->cx - b->tw + b->w;
1678                                  gdImageLine(im, xx, b->y, i+b->w, b->y, clr(im, "rev_color", NULL, b)->id);                                  gdImageLine(im, xx, b->y, i+b->w, b->y, clr(im, "rev_color", NULL, b, 0)->id);
1679                                  for(sign = l = 1; l < conf.thick_lines; l++)                                  for(sign = l = 1; l < conf.thick_lines; l++)
1680                                  {                                  {
1681                                          int pp = (l+1)/2*sign;                                          int pp = (l+1)/2*sign;
1682                                          gdImageLine(im, xx, b->y+pp, i+b->w, b->y+pp, clr(im, "rev_color", NULL, b)->id);                                          gdImageLine(im, xx, b->y+pp, i+b->w, b->y+pp, clr(im, "rev_color", NULL, b, 0)->id);
1683                                          sign *= -1;                                          sign *= -1;
1684                                  }                                  }
1685                                  draw_branch_box(im, b, i - b->cx, b->y - b->h/2);                                  draw_branch_box(im, b, i - b->cx, b->y - b->h/2);
# Line 1680  Line 1691 
1691                          for(i = 0; i < b->nrevs; i++)                          for(i = 0; i < b->nrevs; i++)
1692                          {                          {
1693                                  revision_t *r = b->revs[i];                                  revision_t *r = b->revs[i];
1694                                  line[0] = line[3] = clr(im, "rev_color", r, b)->id;                                  line[0] = line[3] = clr(im, "rev_color", r, b, 0)->id;
1695                                  gdImageSetStyle(im, line, r->stripped > 0 ? 4 : 1);                                  gdImageSetStyle(im, line, r->stripped > 0 ? 4 : 1);
1696                                  gdImageLine(im, xx, r->y, r->cx, r->y, gdStyled);                                  gdImageLine(im, xx, r->y, r->cx, r->y, gdStyled);
1697                                  for(sign = l = 1; l < conf.thick_lines; l++)                                  for(sign = l = 1; l < conf.thick_lines; l++)
# Line 1695  Line 1706 
1706                          if(conf.branch_dupbox && b->nrevs)                          if(conf.branch_dupbox && b->nrevs)
1707                          {                          {
1708                                  i = b->cx + b->tw - b->w;                                  i = b->cx + b->tw - b->w;
1709                                  gdImageLine(im, xx, b->y, i, b->y, clr(im, "rev_color", NULL, b)->id);                                  gdImageLine(im, xx, b->y, i, b->y, clr(im, "rev_color", NULL, b, 0)->id);
1710                                  for(sign = l = 1; l < conf.thick_lines; l++)                                  for(sign = l = 1; l < conf.thick_lines; l++)
1711                                  {                                  {
1712                                          int pp = (l+1)/2*sign;                                          int pp = (l+1)/2*sign;
1713                                          gdImageLine(im, xx, b->y+pp, i, b->y+pp, clr(im, "rev_color", NULL, b)->id);                                          gdImageLine(im, xx, b->y+pp, i, b->y+pp, clr(im, "rev_color", NULL, b, 0)->id);
1714                                          sign *= -1;                                          sign *= -1;
1715                                  }                                  }
1716                                  draw_branch_box(im, b, i - b->cx, b->y - b->h/2);                                  draw_branch_box(im, b, i - b->cx, b->y - b->h/2);
# Line 1714  Line 1725 
1725                          for(i = 0; i < b->nrevs; i++)                          for(i = 0; i < b->nrevs; i++)
1726                          {                          {
1727                                  revision_t *r = b->revs[i];                                  revision_t *r = b->revs[i];
1728                                  line[0] = line[3] = clr(im, "rev_color", r, b)->id;                                  line[0] = line[3] = clr(im, "rev_color", r, b, 0)->id;
1729                                  gdImageSetStyle(im, line, r->stripped > 0 ? 4 : 1);                                  gdImageSetStyle(im, line, r->stripped > 0 ? 4 : 1);
1730                                  gdImageLine(im, r->cx, yy, r->cx, r->y+r->h, gdStyled);                                  gdImageLine(im, r->cx, yy, r->cx, r->y+r->h, gdStyled);
1731                                  for(sign = l = 1; l < conf.thick_lines; l++)                                  for(sign = l = 1; l < conf.thick_lines; l++)
# Line 1729  Line 1740 
1740                          if(conf.branch_dupbox && b->nrevs)                          if(conf.branch_dupbox && b->nrevs)
1741                          {                          {
1742                                  i = b->y - b->th + b->h;                                  i = b->y - b->th + b->h;
1743                                  gdImageLine(im, b->cx, yy, b->cx, i, clr(im, "rev_color", NULL, b)->id);                                  gdImageLine(im, b->cx, yy, b->cx, i, clr(im, "rev_color", NULL, b, 0)->id);
1744                                  for(sign = l = 1; l < conf.thick_lines; l++)                                  for(sign = l = 1; l < conf.thick_lines; l++)
1745                                  {                                  {
1746                                          int pp = (l+1)/2*sign;                                          int pp = (l+1)/2*sign;
1747                                          gdImageLine(im, b->cx+pp, yy, b->cx+pp, i, clr(im, "rev_color", NULL, b)->id);                                          gdImageLine(im, b->cx+pp, yy, b->cx+pp, i, clr(im, "rev_color", NULL, b, 0)->id);
1748                                          sign *= -1;                                          sign *= -1;
1749                                  }                                  }
1750                                  draw_branch_box(im, b, 0, i);                                  draw_branch_box(im, b, 0, i);
# Line 1745  Line 1756 
1756                          for(i = 0; i < b->nrevs; i++)                          for(i = 0; i < b->nrevs; i++)
1757                          {                          {
1758                                  revision_t *r = b->revs[i];                                  revision_t *r = b->revs[i];
1759                                  line[0] = line[3] = clr(im, "rev_color", r, b)->id;                                  line[0] = line[3] = clr(im, "rev_color", r, b, 0)->id;
1760                                  gdImageSetStyle(im, line, r->stripped > 0 ? 4 : 1);                                  gdImageSetStyle(im, line, r->stripped > 0 ? 4 : 1);
1761                                  gdImageLine(im, r->cx, yy, r->cx, r->y, gdStyled);                                  gdImageLine(im, r->cx, yy, r->cx, r->y, gdStyled);
1762                                  for(sign = l = 1; l < conf.thick_lines; l++)                                  for(sign = l = 1; l < conf.thick_lines; l++)
# Line 1760  Line 1771 
1771                          if(conf.branch_dupbox && b->nrevs)                          if(conf.branch_dupbox && b->nrevs)
1772                          {                          {
1773                                  i = b->y + b->th - b->h;                                  i = b->y + b->th - b->h;
1774                                  gdImageLine(im, b->cx, yy, b->cx, i, clr(im, "rev_color", NULL, b)->id);                                  gdImageLine(im, b->cx, yy, b->cx, i, clr(im, "rev_color", NULL, b, 0)->id);
1775                                  for(sign = l = 1; l < conf.thick_lines; l++)                                  for(sign = l = 1; l < conf.thick_lines; l++)
1776                                  {                                  {
1777                                          int pp = (l+1)/2*sign;                                          int pp = (l+1)/2*sign;
1778                                          gdImageLine(im, b->cx+pp, yy, b->cx+pp, i, clr(im, "rev_color", NULL, b)->id);                                          gdImageLine(im, b->cx+pp, yy, b->cx+pp, i, clr(im, "rev_color", NULL, b, 0)->id);
1779                                          sign *= -1;                                          sign *= -1;
1780                                  }                                  }
1781                                  draw_branch_box(im, b, 0, i);                                  draw_branch_box(im, b, 0, i);
# Line 1801  Line 1812 
1812                  if(conf.upside_down)                  if(conf.upside_down)
1813                          y2 += b->h;                          y2 += b->h;
1814          }          }
1815          gdImageLine(im, x1, y1, x2, y1, clr(im, "branch_color", NULL, b)->id);          gdImageLine(im, x1, y1, x2, y1, clr(im, "branch_color", NULL, b, 0)->id);
1816          gdImageLine(im, x2, y1, x2, y2, clr(im, "branch_color", NULL, b)->id);          gdImageLine(im, x2, y1, x2, y2, clr(im, "branch_color", NULL, b, 0)->id);
1817          for(sign = l = 1; l < conf.thick_lines; l++)          for(sign = l = 1; l < conf.thick_lines; l++)
1818          {          {
1819                  int pp = (l+1)/2*sign;                  int pp = (l+1)/2*sign;
1820                  gdImageLine(im, x1, y1+pp, x2, y1+pp, clr(im, "branch_color", NULL, b)->id);                  gdImageLine(im, x1, y1+pp, x2, y1+pp, clr(im, "branch_color", NULL, b, 0)->id);
1821                  gdImageLine(im, x2+pp, y1, x2+pp, y2, clr(im, "branch_color", NULL, b)->id);                  gdImageLine(im, x2+pp, y1, x2+pp, y2, clr(im, "branch_color", NULL, b, 0)->id);
1822                  sign *= -1;                  sign *= -1;
1823          }          }
1824  }  }
# Line 1826  Line 1837 
1837                  case TR_TAG:                  case TR_TAG:
1838                          fr = rcs->merges[i].from.tag->logrev;                          fr = rcs->merges[i].from.tag->logrev;
1839                          tr = rcs->merges[i].to.tag->logrev;                          tr = rcs->merges[i].to.tag->logrev;
1840                          colorid = clr(im, "merge_color.id", NULL, NULL)->id;                          colorid = clr(im, "merge_color", NULL, NULL, rcs->merges[i].clr)->id;
1841                          break;                          break;
1842                  case TR_REVISION:                  case TR_REVISION:
1843                          fr = rcs->merges[i].from.rev;                          fr = rcs->merges[i].from.rev;
1844                          tr = rcs->merges[i].to.rev;                          tr = rcs->merges[i].to.rev;
1845                          colorid = clr(im, "merge_cvsnt_color", NULL, NULL)->id;                          colorid = clr(im, "merge_cvsnt_color", NULL, NULL, 0)->id;
1846                          break;                          break;
1847                  default:                  default:
1848                          continue;                          continue;
# Line 2044  Line 2055 
2055    
2056          for(i = 0; i < nmsg_stack; i++)          for(i = 0; i < nmsg_stack; i++)
2057          {          {
2058                  draw_stringnl(im, msg_stack[i].msg, &conf.msg_font, conf.margin_left, offset, ALIGN_HL|ALIGN_VT, clr(im, "msg_color", NULL, NULL));                  draw_stringnl(im, msg_stack[i].msg, &conf.msg_font, conf.margin_left, offset, ALIGN_HL|ALIGN_VT, clr(im, "msg_color", NULL, NULL, 0));
2059                  offset += msg_stack[i].h;                  offset += msg_stack[i].h;
2060          }          }
2061  }  }
# Line 2102  Line 2113 
2113          h += conf.margin_top + conf.margin_bottom;          h += conf.margin_top + conf.margin_bottom;
2114    
2115          im = gdImageCreate(w, h);          im = gdImageCreate(w, h);
2116          bgid = clr(im, "color_bg", NULL, NULL)->id;     /* The background is always a unique color, */          bgid = clr(im, "color_bg", NULL, NULL, 0)->id;  /* The background is always a unique color, */
2117          zap_clr();                                      /* so clear the color ref table */          zap_clr();                                      /* so clear the color ref table */
2118          clr(im, "__black_color__", NULL, NULL);          clr(im, "__black_color__", NULL, NULL, 0);
2119    
2120          if(conf.transparent_bg)          if(conf.transparent_bg)
2121                  gdImageColorTransparent(im, bgid);                  gdImageColorTransparent(im, bgid);
# Line 2135  Line 2146 
2146                  gdImageFilledRectangle(im, w-conf.margin_right, 0, w-1, h-1, bgid);                  gdImageFilledRectangle(im, w-conf.margin_right, 0, w-1, h-1, bgid);
2147          }          }
2148    
2149          draw_stringnl(im, cptr, &conf.title_font, conf.title_x, conf.title_y, conf.title_align, clr(im, "title_color", NULL, NULL));          draw_stringnl(im, cptr, &conf.title_font, conf.title_x, conf.title_y, conf.title_align, clr(im, "title_color", NULL, NULL, 0));
2150          xfree(cptr);          xfree(cptr);
2151    
2152          if(conf.merge_front)          if(conf.merge_front)
# Line 2621  Line 2632 
2632          branch_t *b;          branch_t *b;
2633          int i;          int i;
2634          int space;          int space;
2635          int nlinks;          int nlinks = 0;
2636          int dy;          int dy;
2637          int rest;          int rest;
2638    
# Line 3214  Line 3225 
3225    
3226          if(im)          if(im)
3227          {          {
3228                  gdImageFilledRectangle(im, x1-2, y1-2, x1+2, y1+2, clr(im, "title_color", NULL, NULL)->id);                  gdImageFilledRectangle(im, x1-2, y1-2, x1+2, y1+2, clr(im, "title_color", NULL, NULL, 0)->id);
3229                  gdImageFilledRectangle(im, x2-2, y2-2, x2+2, y2+2, clr(im, "tag_color.id", NULL, NULL)->id);                  gdImageFilledRectangle(im, x2-2, y2-2, x2+2, y2+2, clr(im, "tag_color.id", NULL, NULL, 0)->id);
3230                  gdImageLine(im, x1, y1, x2, y2, clr(im, "title_color", NULL, NULL)->id);                  gdImageLine(im, x1, y1, x2, y2, clr(im, "title_color", NULL, NULL, 0)->id);
3231          }          }
3232  }  }
3233    
# Line 3400  Line 3411 
3411                                          bhref, x1, y1, x2, y2, balt, htp);                                          bhref, x1, y1, x2, y2, balt, htp);
3412                          if(im)                          if(im)
3413                          {                          {
3414                                  gdImageFilledRectangle(im, x1-2, y1-2, x1+2, y1+2, clr(im, "title_color", NULL, NULL)->id);                                  gdImageFilledRectangle(im, x1-2, y1-2, x1+2, y1+2, clr(im, "title_color", NULL, NULL, 0)->id);
3415                                  gdImageFilledRectangle(im, x2-2, y2-2, x2+2, y2+2, clr(im, "tag_color", NULL, NULL)->id);                                  gdImageFilledRectangle(im, x2-2, y2-2, x2+2, y2+2, clr(im, "tag_color", NULL, NULL, 0)->id);
3416                                  gdImageLine(im, x1, y1, x2, y2, clr(im, "title_color", NULL, NULL)->id);                                  gdImageLine(im, x1, y1, x2, y2, clr(im, "title_color", NULL, NULL, 0)->id);
3417                          }                          }
3418                  }                  }
3419                  else                  else
# Line 3477  Line 3488 
3488                                  href, x1, y1, x2, y2, alt, htp);                                  href, x1, y1, x2, y2, alt, htp);
3489                          if(im)                          if(im)
3490                          {                          {
3491                                  gdImageFilledRectangle(im, x1-2, y1-2, x1+2, y1+2, clr(im, "title_color", NULL, NULL)->id);                                  gdImageFilledRectangle(im, x1-2, y1-2, x1+2, y1+2, clr(im, "title_color", NULL, NULL, 0)->id);
3492                                  gdImageFilledRectangle(im, x2-2, y2-2, x2+2, y2+2, clr(im, "tag_color", NULL, NULL)->id);                                  gdImageFilledRectangle(im, x2-2, y2-2, x2+2, y2+2, clr(im, "tag_color", NULL, NULL, 0)->id);
3493                                  gdImageLine(im, x1, y1, x2, y2, clr(im, "title_color", NULL, NULL)->id);                                  gdImageLine(im, x1, y1, x2, y2, clr(im, "title_color", NULL, NULL, 0)->id);
3494                          }                          }
3495                          xfree(href);                          xfree(href);
3496                          xfree(alt);                          xfree(alt);
# Line 3547  Line 3558 
3558                                          alt, htp);                                          alt, htp);
3559                                  if(im)                                  if(im)
3560                                  {                                  {
3561                                          gdImageFilledRectangle(im, x1-2, y1-2, x1+2, y1+2, clr(im, "title_color", NULL, NULL)->id);                                          gdImageFilledRectangle(im, x1-2, y1-2, x1+2, y1+2, clr(im, "title_color", NULL, NULL, 0)->id);
3562                                          gdImageFilledRectangle(im, x2-2, y2-2, x2+2, y2+2, clr(im, "tag_color", NULL, NULL)->id);                                          gdImageFilledRectangle(im, x2-2, y2-2, x2+2, y2+2, clr(im, "tag_color", NULL, NULL, 0)->id);
3563                                          gdImageLine(im, x1, y1, x2, y2, clr(im, "title_color", NULL, NULL)->id);                                          gdImageLine(im, x1, y1, x2, y2, clr(im, "title_color", NULL, NULL, 0)->id);
3564                                  }                                  }
3565                                  xfree(href);                                  xfree(href);
3566                                  xfree(alt);                                  xfree(alt);
# Line 3575  Line 3586 
3586                                          bhref, x1, y1, x2, y2, balt, htp);                                          bhref, x1, y1, x2, y2, balt, htp);
3587                          if(im)                          if(im)
3588                          {                          {
3589                                  gdImageFilledRectangle(im, x1-2, y1-2, x1+2, y1+2, clr(im, "title_color", NULL, NULL)->id);                                  gdImageFilledRectangle(im, x1-2, y1-2, x1+2, y1+2, clr(im, "title_color", NULL, NULL, 0)->id);
3590                                  gdImageFilledRectangle(im, x2-2, y2-2, x2+2, y2+2, clr(im, "tag_color", NULL, NULL)->id);                                  gdImageFilledRectangle(im, x2-2, y2-2, x2+2, y2+2, clr(im, "tag_color", NULL, NULL, 0)->id);
3591                                  gdImageLine(im, x1, y1, x2, y2, clr(im, "title_color", NULL, NULL)->id);                                  gdImageLine(im, x1, y1, x2, y2, clr(im, "title_color", NULL, NULL, 0)->id);
3592                          }                          }
3593                  }                  }
3594                  xfree(bhref);                  xfree(bhref);
# Line 3781  Line 3792 
3792          conf.rev_text           = xstrdup("%d");          conf.rev_text           = xstrdup("%d");
3793          conf.branch_subtree     = xstrdup("");          conf.branch_subtree     = xstrdup("");
3794          conf.tag_ignore         = xstrdup("");          conf.tag_ignore         = xstrdup("");
3795          conf.merge_from         = xstrdup("");          conf.merge_from.n       = 0;
3796          conf.merge_to           = xstrdup("");          conf.merge_from.strs    = NULL;
3797            conf.merge_to.n         = 0;
3798            conf.merge_to.strs      = NULL;
3799          conf.merge_arrows       = 1;          conf.merge_arrows       = 1;
3800          conf.merge_cvsnt        = 1;          conf.merge_cvsnt        = 1;
3801          conf.arrow_width        = ARROW_WIDTH;          conf.arrow_width        = ARROW_WIDTH;
# Line 3794  Line 3807 
3807          conf.branch_tag_color   = black_color;          conf.branch_tag_color   = black_color;
3808          conf.rev_color          = black_color;          conf.rev_color          = black_color;
3809          conf.rev_bgcolor        = white_color;          conf.rev_bgcolor        = white_color;
3810          conf.merge_color        = black_color;          conf.merge_color.n      = 0;
3811            conf.merge_color.clrs   = NULL;
3812          conf.merge_cvsnt_color  = black_color;          conf.merge_cvsnt_color  = black_color;
3813          conf.tag_color          = black_color;          conf.tag_color          = black_color;
3814          conf.title_color        = black_color;          conf.title_color        = black_color;

Legend:
Removed from v.1.58  
changed lines
  Added in v.1.59

  ViewVC Help
Powered by ViewVC 1.1.0 with CvsGraph 1.7.0