/[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.15, Wed Nov 28 16:19:49 2001 UTC revision 1.16, Tue Dec 18 22:50:12 2001 UTC
# Line 982  Line 982 
982          xfree(d);          xfree(d);
983  }  }
984    
985  void draw_rev(gdImagePtr im, int cx, int ty, revision_t *r)  void draw_rev(gdImagePtr im, revision_t *r)
986  {  {
987          int lx = cx - r->w/2;          int lx = r->cx - r->w/2;
988          int rx = lx + r->w;          int rx = lx + r->w;
989          int i;          int i;
990            int ty = r->y;
991          draw_rbox(im, lx, ty, rx, ty+r->h, 0, &conf.rev_color, &conf.rev_bgcolor);          draw_rbox(im, lx, ty, rx, ty+r->h, 0, &conf.rev_color, &conf.rev_bgcolor);
992          ty += conf.rev_tspace;          ty += conf.rev_tspace;
993          draw_string(im, r->rev->rev, &conf.rev_font, cx, ty, ALIGN_HC, &conf.rev_color);          draw_string(im, r->rev->rev, &conf.rev_font, r->cx, ty, ALIGN_HC, &conf.rev_color);
994          ty += get_sheight(r->rev->rev, &conf.rev_font);          ty += get_sheight(r->rev->rev, &conf.rev_font);
995          draw_stringnl(im, r->revtext, &conf.rev_text_font, cx, ty, ALIGN_HC, &conf.rev_text_color);          draw_stringnl(im, r->revtext, &conf.rev_text_font, r->cx, ty, ALIGN_HC, &conf.rev_text_color);
996          ty += get_sheight(r->revtext, &conf.rev_text_font);          ty += get_sheight(r->revtext, &conf.rev_text_font);
997          for(i = 0; i < r->ntags; i++)          for(i = 0; i < r->ntags; i++)
998          {          {
999                  draw_string(im, r->tags[i]->tag, &conf.tag_font, cx, ty, ALIGN_HC, &conf.tag_color);                  draw_string(im, r->tags[i]->tag, &conf.tag_font, r->cx, ty, ALIGN_HC, &conf.tag_color);
1000                  ty += get_sheight(r->tags[i]->tag, &conf.tag_font);                  ty += get_sheight(r->tags[i]->tag, &conf.tag_font);
1001          }          }
1002  }  }
1003    
1004  void draw_branch(gdImagePtr im, int cx, int ty, branch_t *b)  void draw_branch_box(gdImagePtr im, branch_t *b, int offset)
1005  {  {
1006          int lx = cx - b->w/2;          int lx = b->cx - b->w/2;
1007          int rx = lx + b->w;          int rx = lx + b->w;
         int yy;  
1008          int i;          int i;
1009          /*draw_rbox(im, cx-b->tw/2-1, ty-1, cx+b->tw/2+1, ty+b->th+1, 0, &conf.title_color);*/          int yy;
1010          draw_rbox(im, lx, ty, rx, ty+b->h, 5, &conf.branch_color, &conf.branch_bgcolor);  
1011            draw_rbox(im, lx, b->y+offset, rx, b->y+b->h+offset, 5, &conf.branch_color, &conf.branch_bgcolor);
1012          yy = conf.branch_tspace;          yy = conf.branch_tspace;
1013          draw_string(im, b->branch->branch, &conf.branch_font, cx, ty+yy, ALIGN_HC, &conf.branch_color);          draw_string(im, b->branch->branch, &conf.branch_font, b->cx, b->y+yy+offset, ALIGN_HC, &conf.branch_color);
1014          yy += get_sheight(b->branch->branch, &conf.branch_font);          yy += get_sheight(b->branch->branch, &conf.branch_font);
1015          for(i = 0; i < b->ntags; i++)          for(i = 0; i < b->ntags; i++)
1016          {          {
1017                  draw_string(im, b->tags[i]->tag, &conf.branch_font, cx, ty+yy, ALIGN_HC, &conf.branch_color);                  draw_string(im, b->tags[i]->tag, &conf.branch_font, b->cx, b->y+yy+offset, ALIGN_HC, &conf.branch_color);
1018                  yy += get_sheight(b->tags[i]->tag, &conf.branch_font);                  yy += get_sheight(b->tags[i]->tag, &conf.branch_font);
1019          }          }
1020    }
1021    
1022          ty += b->h;  void draw_branch(gdImagePtr im, branch_t *b)
1023          for(i = 0; i < b->nrevs; i++)  {
1024            int yy;
1025            int i;
1026            /*draw_rbox(im, cx-b->tw/2-1, ty-1, cx+b->tw/2+1, ty+b->th+1, 0, &conf.title_color);*/
1027            draw_branch_box(im, b, 0);
1028    
1029            if(conf.upside_down)
1030          {          {
1031                  gdImageLine(im, cx, ty, cx, ty+conf.rev_minline, conf.rev_color.id);                  yy = b->y;
1032                  ty += conf.rev_minline;                  for(i = 0; i < b->nrevs; i++)
1033                  draw_rev(im, cx, ty, b->revs[i]);                  {
1034                  ty += b->revs[i]->h;                          revision_t *r = b->revs[i];
1035                            gdImageLine(im, r->cx, yy, r->cx, r->y+r->h, conf.rev_color.id);
1036                            draw_rev(im, r);
1037                            yy = r->y;
1038                    }
1039                    if(conf.branch_mirror)
1040                    {
1041                            gdImageLine(im, b->cx, yy, b->cx, yy-conf.rev_minline, conf.rev_color.id);
1042                            draw_branch_box(im, b, yy-b->y-b->h-conf.rev_minline);
1043                    }
1044            }
1045            else
1046            {
1047                    yy = b->y + b->h;
1048                    for(i = 0; i < b->nrevs; i++)
1049                    {
1050                            revision_t *r = b->revs[i];
1051                            gdImageLine(im, r->cx, yy, r->cx, r->y, conf.rev_color.id);
1052                            draw_rev(im, r);
1053                            yy = r->y + r->h;
1054                    }
1055                    if(conf.branch_mirror)
1056                    {
1057                            gdImageLine(im, b->cx, yy, b->cx, yy+conf.rev_minline, conf.rev_color.id);
1058                            draw_branch_box(im, b, yy-b->y+conf.rev_minline);
1059                    }
1060          }          }
1061  }  }
1062    
# Line 1034  Line 1067 
1067          int y1 = r->y + r->h/2;          int y1 = r->y + r->h/2;
1068          int x2 = b->cx;          int x2 = b->cx;
1069          int y2 = b->y;          int y2 = b->y;
1070            if(conf.upside_down)
1071                    y2 += b->h;
1072          gdImageLine(im, x1, y1, x2, y1, conf.branch_color.id);          gdImageLine(im, x1, y1, x2, y1, conf.branch_color.id);
1073          gdImageLine(im, x2, y1, x2, y2, conf.branch_color.id);          gdImageLine(im, x2, y1, x2, y2, conf.branch_color.id);
1074  }  }
# Line 1066  Line 1101 
1101          alloc_color(im, &white_color);          alloc_color(im, &white_color);
1102    
1103          for(i = 0; i < rcs->nbranches; i++)          for(i = 0; i < rcs->nbranches; i++)
1104                  draw_branch(im, rcs->branches[i]->cx, rcs->branches[i]->y, rcs->branches[i]);                  draw_branch(im, rcs->branches[i]);
1105          for(i = 0; i < rcs->nbranches; i++)          for(i = 0; i < rcs->nbranches; i++)
1106          {          {
1107                  if(rcs->branches[i]->branchpoint)                  if(rcs->branches[i]->branchpoint)
# Line 1177  Line 1212 
1212          int w2;          int w2;
1213          int moved;          int moved;
1214    
1215            /* Remove all unwanted revisions */
1216            if(conf.strip_untagged)
1217            {
1218                    for(i = 0; i < rcs->nbranches; i++)
1219                    {
1220                            branch_t *bp = rcs->branches[i];
1221                            for(j = 0; j < bp->nrevs-1; j++)
1222                            {
1223                                    if(!bp->revs[j]->ntags && !bp->revs[j]->nbranches)
1224                                    {
1225                                            memmove(&bp->revs[j], &bp->revs[j+1], (bp->nrevs-j-1) * sizeof(bp->revs[0]));
1226                                            bp->nrevs--;
1227                                            j--;
1228                                    }
1229                            }
1230                    }
1231            }
1232    
1233          /* Calculate the box-sizes of the revisions */          /* Calculate the box-sizes of the revisions */
1234          for(i = 0; i < rcs->nsrev; i++)          for(i = 0; i < rcs->nsrev; i++)
1235          {          {
# Line 1224  Line 1277 
1277                                  w = bp->revs[j]->w;                                  w = bp->revs[j]->w;
1278                          h += bp->revs[j]->h + conf.rev_minline;                          h += bp->revs[j]->h + conf.rev_minline;
1279                  }                  }
1280                    if(conf.branch_mirror)
1281                            h += bp->h + conf.rev_minline;
1282                  bp->th = h;                  bp->th = h;
1283                  bp->tw = w;                  bp->tw = w;
1284          }          }
# Line 1276  Line 1331 
1331                  rect_union(&x, &y, &w, &h, rcs->branches[i]);                  rect_union(&x, &y, &w, &h, rcs->branches[i]);
1332          rcs->tw = w;          rcs->tw = w;
1333          rcs->th = h;          rcs->th = h;
1334    
1335            /* Flip the entire tree */
1336            if(conf.upside_down)
1337            {
1338                    y += rcs->th;
1339                    for(i = 0; i < rcs->nbranches; i++)
1340                    {
1341                            branch_t *b = rcs->branches[i];
1342                            for(j = 0; j < b->nrevs; j++)
1343                            {
1344                                    revision_t *r = b->revs[j];
1345                                    r->y = y - r->y - r->h + conf.margin_top;
1346                            }
1347                            b->y = y - b->y - b->h + conf.margin_top;
1348                    }
1349            }
1350  }  }
1351    
1352  /*  /*
# Line 1286  Line 1357 
1357  void make_imagemap(rcsfile_t *rcs, FILE *fp)  void make_imagemap(rcsfile_t *rcs, FILE *fp)
1358  {  {
1359          int i, j;          int i, j;
         char *href;  
         char *alt;  
1360          fprintf(fp, "<map name=\"%s\">\n", conf.map_name);          fprintf(fp, "<map name=\"%s\">\n", conf.map_name);
1361          for(i = 0; i < rcs->nbranches; i++)          for(i = 0; i < rcs->nbranches; i++)
1362          {          {
1363                  branch_t *b = rcs->branches[i];                  branch_t *b = rcs->branches[i];
1364                  tag_t *tag = b->ntags ? b->tags[0] : NULL;                  tag_t *tag = b->ntags ? b->tags[0] : NULL;
1365                  href = expand_string(conf.map_branch_href, rcs, NULL, b->branch, NULL, tag);                  char *bhref = expand_string(conf.map_branch_href, rcs, NULL, b->branch, NULL, tag);
1366                  alt = expand_string(conf.map_branch_alt, rcs, NULL, b->branch, NULL, tag);                  char *balt = expand_string(conf.map_branch_alt, rcs, NULL, b->branch, NULL, tag);
1367                  fprintf(fp, "\t<area shape=\"rect\" %s coords=\"%d,%d,%d,%d\" %s>\n",                  fprintf(fp, "\t<area shape=\"rect\" %s coords=\"%d,%d,%d,%d\" %s>\n",
1368                                  href,                                  bhref,
1369                                  b->cx - b->w/2, b->y, b->cx + b->w/2, b->y + b->h,                                  b->cx - b->w/2, b->y, b->cx + b->w/2, b->y + b->h,
1370                                  alt);                                  balt);
                 xfree(href);  
                 xfree(alt);  
1371                  for(j = 0; j < b->nrevs; j++)                  for(j = 0; j < b->nrevs; j++)
1372                  {                  {
1373                          revision_t *r = b->revs[j];                          revision_t *r = b->revs[j];
# Line 1309  Line 1376 
1376                          int x1;                          int x1;
1377                          int x2;                          int x2;
1378                          int y1;                          int y1;
1379                            int y2;
1380                            char *href;
1381                            char *alt;
1382    
1383                          tag = r->ntags ? r->tags[0] : NULL;                          tag = r->ntags ? r->tags[0] : NULL;
1384                          href = expand_string(conf.map_rev_href, rcs, r, r->rev, NULL, tag);                          href = expand_string(conf.map_rev_href, rcs, r, r->rev, NULL, tag);
# Line 1319  Line 1389 
1389                                  alt);                                  alt);
1390                          xfree(href);                          xfree(href);
1391                          xfree(alt);                          xfree(alt);
1392                          if ( j > 0 || b->branchpoint )                          if(j > 0 || b->branchpoint)
1393                          {                          {
1394                              if ( j > 0 )                                  if(j > 0)
1395                              {                                  {
1396                                  r1 = b->revs[j-1];                                          r1 = b->revs[j-1];
1397                                  xoff = MIN(r->w, r1->w)/4;                                          xoff = MIN(r->w, r1->w)/4;
1398                                  y1 = r1->y + r1->h;                                          y1 = conf.upside_down ? r1->y : r1->y + r1->h;
1399                              }                                  }
1400                              else                                  else
1401                              {                                  {
1402                                  r1 = b->branchpoint;                                          r1 = b->branchpoint;
1403                                  xoff = MIN(r->w, b->w)/4;                                          xoff = MIN(r->w, b->w)/4;
1404                                  y1 = b->y + b->h;                                          y1 = conf.upside_down ? b->y : b->y + b->h;
1405                              }                                  }
1406                              x1 = r->cx - xoff;                                  x1 = r->cx - xoff;
1407                              x2 = r->cx + xoff;                                  x2 = r->cx + xoff;
1408                                    y2 = conf.upside_down ? r->y + r->h : r->y;
1409                              href = expand_string(conf.map_diff_href, rcs, r, r->rev, r1->rev, tag);                                  href = expand_string(conf.map_diff_href, rcs, r, r->rev, r1->rev, tag);
1410                              alt = expand_string(conf.map_diff_alt, rcs, r, r->rev, r1->rev, tag);                                  alt = expand_string(conf.map_diff_alt, rcs, r, r->rev, r1->rev, tag);
1411                              fprintf(fp, "\t<area shape=\"rect\" %s coords=\"%d,%d,%d,%d\" %s>\n",                                  fprintf(fp, "\t<area shape=\"rect\" %s coords=\"%d,%d,%d,%d\" %s>\n",
1412                                      href,                                          href,
1413                                      x1, y1 + 1, x2, r->y - 1,                                          x1, y1 + 1, x2, y2 - 1,
1414                                      alt);                                          alt);
1415                              xfree(href);                                  xfree(href);
1416                              xfree(alt);                                  xfree(alt);
1417                          }                          }
1418                  }                  }
1419                    if(conf.branch_mirror)
1420                    {
1421                            int y;
1422                            if(conf.upside_down)
1423                                    y = b->y + b->h - b->th;
1424                            else
1425                                    y = b->y - b->h + b->th;
1426                            fprintf(fp, "\t<area shape=\"rect\" %s coords=\"%d,%d,%d,%d\" %s>\n",
1427                                            bhref,
1428                                            b->cx - b->w/2, y, b->cx + b->w/2, y + b->h,
1429                                            balt);
1430                    }
1431                    xfree(bhref);
1432                    xfree(balt);
1433          }          }
1434          fprintf(fp, "</map>\n");          fprintf(fp, "</map>\n");
1435  }  }
# Line 1398  Line 1482 
1482   */   */
1483  static const char usage_str[] =  static const char usage_str[] =
1484          "Usage: cvsgraph [options] <file>\n"          "Usage: cvsgraph [options] <file>\n"
1485            "  -b           Add a branch box at both sides of the trunk (config value is negated)\n"
1486          "  -c <file>    Read alternative config from <file>\n"          "  -c <file>    Read alternative config from <file>\n"
1487          "  -d <level>   Enable debug mode at <level>\n"          "  -d <level>   Enable debug mode at <level>\n"
1488          "  -h           This message\n"          "  -h           This message\n"
# Line 1407  Line 1492 
1492          "  -o <file>    Output to <file>\n"          "  -o <file>    Output to <file>\n"
1493          "  -q           Be quiet (i.e. no warnings)\n"          "  -q           Be quiet (i.e. no warnings)\n"
1494          "  -r <path>    Use <path> as cvsroot path\n"          "  -r <path>    Use <path> as cvsroot path\n"
1495            "  -s           Strip untagged revisions (config value is negated)\n"
1496            "  -u           Upside down image (mirror vertically; config value is negated)\n"
1497          "  -V           Print version and exit\n"          "  -V           Print version and exit\n"
1498          "  -[0-9] <txt> Use <txt> for expansion\n"          "  -[0-9] <txt> Use <txt> for expansion\n"
1499          ;          ;
# Line 1438  Line 1525 
1525          char *cvsroot = NULL;          char *cvsroot = NULL;
1526          char *cvsmodule = NULL;          char *cvsmodule = NULL;
1527          int imagemap = 0;          int imagemap = 0;
1528            int upsidedown = 0;
1529            int bmirror = 0;
1530            int stripuntag = 0;
1531          char *imgmapname = NULL;          char *imgmapname = NULL;
1532          int lose = 0;          int lose = 0;
1533          FILE *fp;          FILE *fp;
1534          rcsfile_t *rcs;          rcsfile_t *rcs;
1535          gdImagePtr im;          gdImagePtr im;
1536    
1537          while((optc = getopt(argc, argv, "0:1:2:3:4:5:6:7:8:9:c:d:hiM:m:o:qr:V")) != EOF)          while((optc = getopt(argc, argv, "0:1:2:3:4:5:6:7:8:9:bc:d:hiM:m:o:qr:suV")) != EOF)
1538          {          {
1539                  switch(optc)                  switch(optc)
1540                  {                  {
1541                    case 'b':
1542                            bmirror = 1;
1543                            break;
1544                  case 'c':                  case 'c':
1545                          confpath = xstrdup(optarg);                          confpath = xstrdup(optarg);
1546                          break;                          break;
# Line 1472  Line 1565 
1565                  case 'r':                  case 'r':
1566                          cvsroot = xstrdup(optarg);                          cvsroot = xstrdup(optarg);
1567                          break;                          break;
1568                    case 's':
1569                            stripuntag = 1;
1570                            break;
1571                    case 'u':
1572                            upsidedown = 1;
1573                            break;
1574                  case 'V':                  case 'V':
1575                          fprintf(stdout, "cvsgraph v%s, %s\n", VERSION_STR, NOTICE_STR);                          fprintf(stdout, "cvsgraph v%s, %s\n", VERSION_STR, NOTICE_STR);
1576                          return 0;                          return 0;
# Line 1551  Line 1650 
1650          if(cvsroot)     conf.cvsroot = cvsroot;          if(cvsroot)     conf.cvsroot = cvsroot;
1651          if(cvsmodule)   conf.cvsmodule = cvsmodule;          if(cvsmodule)   conf.cvsmodule = cvsmodule;
1652          if(imgmapname)  conf.map_name = imgmapname;          if(imgmapname)  conf.map_name = imgmapname;
1653            if(upsidedown)  conf.upside_down = !conf.upside_down;
1654            if(bmirror)     conf.branch_mirror = !conf.branch_mirror;
1655            if(stripuntag)  conf.strip_untagged = !conf.strip_untagged;
1656    
1657          append_slash(&conf.cvsroot);          append_slash(&conf.cvsroot);
1658          append_slash(&conf.cvsmodule);          append_slash(&conf.cvsmodule);

Legend:
Removed from v.1.15  
changed lines
  Added in v.1.16

  ViewVC Help
Powered by ViewVC 1.1.0 with CvsGraph 1.7.0