/[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.35, Sun Feb 22 13:00:39 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 1660  Line 1669 
1669                          y1 = fr->y + rcs->merges[i].from->yofs;                          y1 = fr->y + rcs->merges[i].from->yofs;
1670                          y2 = tr->y + rcs->merges[i].to->yofs;                          y2 = tr->y + rcs->merges[i].to->yofs;
1671                  }                  }
1672                  if(dot)                  if(dot && !conf.merge_arrows)
1673                  {                  {
1674                          int o = conf.left_right ? 1 : 0;                          int o = conf.left_right ? 1 : 0;
1675                          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);
1676                          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);
1677                  }                  }
1678                    else if(dot && conf.merge_arrows)
1679                    {
1680                            /*
1681                             * Arrow patch from Haroon Rafique <haroon.rafique@utoronto.ca>
1682                             * Slightly adapted to be more configurable.
1683                             */
1684                            int sx, sy;     /* start point coordinates */
1685                            int ex, ey;     /* end point coordinates */
1686                            double theta;
1687                            double u1, v1, u2, v2;
1688                            gdPoint p[3];
1689    
1690                            sx = x1; sy = y1;
1691                            ex = x2; ey = y2;
1692                            if(conf.left_right)
1693                            {
1694                                    if(fr->branch == tr->branch)
1695                                    {
1696                                            int yy = (y1 < y2 ? y1 : y2) - 5;
1697                                            /* line from (x1,yy) to (x2,yy) */
1698                                            sy = ey = yy;
1699                                    }
1700                                    else
1701                                    {
1702                                            if(y1 > y2)
1703                                            {
1704                                                    /* line from (x1,y1-3) to (x2,y2+3+1) */
1705                                                    sy = y1-3;
1706                                                    ey = y2+3+1;
1707                                            }
1708                                            else
1709                                            {
1710                                                    /* line from (x1,y1+3+1) to (x2,y2-3) */
1711                                                    sy = y1+3+1;
1712                                                    ey = y2-3;
1713                                            }
1714                                    }
1715                            }
1716                            else
1717                            {
1718                                    if(fr->branch == tr->branch)
1719                                    {
1720                                            int xx = (x1 < x2 ? x1 : x2) - 5;
1721                                            /* line from (xx,y1) to (xx,y2) */
1722                                            sx = ex = xx;
1723                                    }
1724                                    else
1725                                    {
1726                                            if(x1 > x2)
1727                                            {
1728                                                    /* line from (x1-3,y1) to (x2+3,y2) */
1729                                                    sx = x1-3;
1730                                                    ex = x2+3;
1731                                            }
1732                                            else
1733                                            {
1734                                                    /* line from (x1+3,y1) to (x2-3,y2) */
1735                                                    sx = x1+3;
1736                                                    ex = x2-3;
1737                                            }
1738                                    }
1739                            }
1740                            /*
1741                             * inspiration for arrow code comes from arrows.c in the
1742                             * graphviz package. Thank you, AT&T
1743                             */
1744                            /* theta in radians */
1745                            theta = atan2((double)(sy-ey), (double)(sx-ex));
1746                            u1 = (double)conf.arrow_length * cos(theta);
1747                            v1 = (double)conf.arrow_length * sin(theta);
1748                            u2 = (double)conf.arrow_width  * cos(theta + M_PI/2.0);
1749                            v2 = (double)conf.arrow_width  * sin(theta + M_PI/2.0);
1750                            /* points of polygon (triangle) */
1751                            p[0].x = ROUND(ex + u1 - u2);
1752                            p[0].y = ROUND(ey + v1 - v2);
1753                            p[1].x = ex;
1754                            p[1].y = ey;
1755                            p[2].x = ROUND(ex + u1 + u2);
1756                            p[2].y = ROUND(ey + v1 + v2);
1757                            /* draw the polygon (triangle) */
1758                            gdImageFilledPolygon(im, p, 3, conf.merge_color.id);
1759                    }
1760                  else                  else
1761                  {                  {
1762                          if(conf.left_right)                          if(conf.left_right)
# Line 3115  Line 3206 
3206          conf.rev_text           = xstrdup("%d");          conf.rev_text           = xstrdup("%d");
3207          conf.merge_from         = xstrdup("");          conf.merge_from         = xstrdup("");
3208          conf.merge_to           = xstrdup("");          conf.merge_to           = xstrdup("");
3209            conf.merge_arrows       = 1;
3210            conf.arrow_width        = ARROW_WIDTH;
3211            conf.arrow_length       = ARROW_LENGTH;
3212    
3213          conf.color_bg           = white_color;          conf.color_bg           = white_color;
3214          conf.branch_bgcolor     = white_color;          conf.branch_bgcolor     = white_color;

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

  ViewVC Help
Powered by ViewVC 1.1.0 with CvsGraph 1.7.0