/[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.34, Mon Mar 17 01:33:44 2003 UTC revision 1.38, Fri Jul 16 13:24:53 2004 UTC
# Line 36  Line 36 
36  #include <time.h>  #include <time.h>
37  #include <limits.h>  #include <limits.h>
38  #include <regex.h>  #include <regex.h>
39    #include <math.h>
40    
41  #ifdef HAVE_GETOPT_H  #ifdef HAVE_GETOPT_H
42  # include <getopt.h>  # include <getopt.h>
# Line 77  Line 78 
78  #define ALIGN_VB        0x20  #define ALIGN_VB        0x20
79  #define ALIGN_VX        0xf0  #define ALIGN_VX        0xf0
80    
81    #ifndef M_PI    /* math.h should have defined this */
82    # define M_PI 3.14159265358979323846
83    #endif
84    #define ROUND(f)        ((f >= 0.0)?((int)(f + 0.5)):((int)(f - 0.5)))
85    
86    #define ARROW_LENGTH    12      /* Default arrow dimensions */
87    #define ARROW_WIDTH     3
88    
89  /*  /*
90   **************************************************************************   **************************************************************************
91   * Globals   * Globals
# Line 749  Line 758 
758                                                  if(n == i || nt->rev->isbranch || !nt->logrev)                                                  if(n == i || nt->rev->isbranch || !nt->logrev)
759                                                          continue;                                                          continue;
760    
761                                                  if(!regexec(reto, nt->tag, 0, NULL, REG_NOSUB))                                                  if(!regexec(reto, nt->tag, 0, NULL, 0))
762                                                  {                                                  {
763                                                          /* Tag matches */                                                          /* Tag matches */
764                                                          rcs->merges = xrealloc(rcs->merges,                                                          rcs->merges = xrealloc(rcs->merges,
# Line 958  Line 967 
967          tm.tm_mon--;          tm.tm_mon--;
968          if(tm.tm_year > 1900)          if(tm.tm_year > 1900)
969                  tm.tm_year -= 1900;                  tm.tm_year -= 1900;
970          t = mktime(&tm);          t = mktime(&tm) - timezone;
971          if(n != 6 || t == (time_t)(-1))          if(n != 6 || t == (time_t)(-1))
972          {          {
973                  add_string_str("<invalid date>");                  add_string_str("<invalid date>");
# Line 992  Line 1001 
1001                                  if(maxlen < 0)                                  if(maxlen < 0)
1002                                          *cptr++ = ' ';                                          *cptr++ = ' ';
1003                                  else                                  else
1004                                          cptr += sprintf(cptr, "<br>");                                          cptr += sprintf(cptr, "<br%s>", conf.html_level == HTMLLEVEL_X ? " /" : "");
1005                          }                          }
1006                  }                  }
1007                  else if(*s >= 0x7f || *s == '"')                  else if(*s >= 0x7f || *s == '"')
# Line 1001  Line 1010 
1010                          cptr += sprintf(cptr, "&lt;");                          cptr += sprintf(cptr, "&lt;");
1011                  else if(*s == '>')                  else if(*s == '>')
1012                          cptr += sprintf(cptr, "&gt;");                          cptr += sprintf(cptr, "&gt;");
1013                    else if(*s == '&')
1014                            cptr += sprintf(cptr, "&amp;");
1015                    else if(*s == '"')
1016                            cptr += sprintf(cptr, "&quot;");
1017                  else                  else
1018                          *cptr++ = *s;                          *cptr++ = *s;
1019                  l++;                  l++;
# Line 1660  Line 1673 
1673                          y1 = fr->y + rcs->merges[i].from->yofs;                          y1 = fr->y + rcs->merges[i].from->yofs;
1674                          y2 = tr->y + rcs->merges[i].to->yofs;                          y2 = tr->y + rcs->merges[i].to->yofs;
1675                  }                  }
1676                  if(dot)                  if(dot && !conf.merge_arrows)
1677                  {                  {
1678                          int o = conf.left_right ? 1 : 0;                          int o = conf.left_right ? 1 : 0;
1679                          gdImageArc(im, x2, y2+o, 8, 8, 0, 360, conf.merge_color.id);                          gdImageArc(im, x2, y2+o, 8, 8, 0, 360, conf.merge_color.id);
1680                          gdImageFillToBorder(im, x2+1, y2+o+1, conf.merge_color.id, conf.merge_color.id);                          gdImageFillToBorder(im, x2+1, y2+o+1, conf.merge_color.id, conf.merge_color.id);
1681                  }                  }
1682                    else if(dot && conf.merge_arrows)
1683                    {
1684                            /*
1685                             * Arrow patch from Haroon Rafique <haroon.rafique@utoronto.ca>
1686                             * Slightly adapted to be more configurable.
1687                             */
1688                            int sx, sy;     /* start point coordinates */
1689                            int ex, ey;     /* end point coordinates */
1690                            double theta;
1691                            double u1, v1, u2, v2;
1692                            gdPoint p[3];
1693    
1694                            sx = x1; sy = y1;
1695                            ex = x2; ey = y2;
1696                            if(conf.left_right)
1697                            {
1698                                    if(fr->branch == tr->branch)
1699                                    {
1700                                            int yy = (y1 < y2 ? y1 : y2) - 5;
1701                                            /* line from (x1,yy) to (x2,yy) */
1702                                            sy = ey = yy;
1703                                    }
1704                                    else
1705                                    {
1706                                            if(y1 > y2)
1707                                            {
1708                                                    /* line from (x1,y1-3) to (x2,y2+3+1) */
1709                                                    sy = y1-3;
1710                                                    ey = y2+3+1;
1711                                            }
1712                                            else
1713                                            {
1714                                                    /* line from (x1,y1+3+1) to (x2,y2-3) */
1715                                                    sy = y1+3+1;
1716                                                    ey = y2-3;
1717                                            }
1718                                    }
1719                            }
1720                            else
1721                            {
1722                                    if(fr->branch == tr->branch)
1723                                    {
1724                                            int xx = (x1 < x2 ? x1 : x2) - 5;
1725                                            /* line from (xx,y1) to (xx,y2) */
1726                                            sx = ex = xx;
1727                                    }
1728                                    else
1729                                    {
1730                                            if(x1 > x2)
1731                                            {
1732                                                    /* line from (x1-3,y1) to (x2+3,y2) */
1733                                                    sx = x1-3;
1734                                                    ex = x2+3;
1735                                            }
1736                                            else
1737                                            {
1738                                                    /* line from (x1+3,y1) to (x2-3,y2) */
1739                                                    sx = x1+3;
1740                                                    ex = x2-3;
1741                                            }
1742                                    }
1743                            }
1744                            /*
1745                             * inspiration for arrow code comes from arrows.c in the
1746                             * graphviz package. Thank you, AT&T
1747                             */
1748                            /* theta in radians */
1749                            theta = atan2((double)(sy-ey), (double)(sx-ex));
1750                            u1 = (double)conf.arrow_length * cos(theta);
1751                            v1 = (double)conf.arrow_length * sin(theta);
1752                            u2 = (double)conf.arrow_width  * cos(theta + M_PI/2.0);
1753                            v2 = (double)conf.arrow_width  * sin(theta + M_PI/2.0);
1754                            /* points of polygon (triangle) */
1755                            p[0].x = ROUND(ex + u1 - u2);
1756                            p[0].y = ROUND(ey + v1 - v2);
1757                            p[1].x = ex;
1758                            p[1].y = ey;
1759                            p[2].x = ROUND(ex + u1 + u2);
1760                            p[2].y = ROUND(ey + v1 + v2);
1761                            /* draw the polygon (triangle) */
1762                            gdImageFilledPolygon(im, p, 3, conf.merge_color.id);
1763                    }
1764                  else                  else
1765                  {                  {
1766                          if(conf.left_right)                          if(conf.left_right)
# Line 3115  Line 3210 
3210          conf.rev_text           = xstrdup("%d");          conf.rev_text           = xstrdup("%d");
3211          conf.merge_from         = xstrdup("");          conf.merge_from         = xstrdup("");
3212          conf.merge_to           = xstrdup("");          conf.merge_to           = xstrdup("");
3213            conf.merge_arrows       = 1;
3214            conf.arrow_width        = ARROW_WIDTH;
3215            conf.arrow_length       = ARROW_LENGTH;
3216    
3217          conf.color_bg           = white_color;          conf.color_bg           = white_color;
3218          conf.branch_bgcolor     = white_color;          conf.branch_bgcolor     = white_color;

Legend:
Removed from v.1.34  
changed lines
  Added in v.1.38

  ViewVC Help
Powered by ViewVC 1.1.0 with CvsGraph 1.7.0