Blame 0004-Make-rasterizer_outline_aa-ignore-close_polygon-when.patch

bf231a2
From b9c4b1c72b4ad6b24c37f402d3eec39ef393b0eb Mon Sep 17 00:00:00 2001
599c4ed
From: Tom Hughes <tom@compton.nu>
599c4ed
Date: Sun, 19 May 2013 14:17:43 +0100
bf231a2
Subject: [PATCH 04/15] Make rasterizer_outline_aa ignore close_polygon when
599c4ed
 vertex count < 3
599c4ed
599c4ed
---
599c4ed
 include/agg_rasterizer_outline_aa.h | 107 ++++++++++++++++++------------------
599c4ed
 1 file changed, 52 insertions(+), 55 deletions(-)
599c4ed
599c4ed
diff --git a/include/agg_rasterizer_outline_aa.h b/include/agg_rasterizer_outline_aa.h
599c4ed
index 4d6dd57..24301d5 100644
599c4ed
--- a/include/agg_rasterizer_outline_aa.h
599c4ed
+++ b/include/agg_rasterizer_outline_aa.h
599c4ed
@@ -333,68 +333,65 @@ namespace agg
599c4ed
         int y2;
599c4ed
         int lprev;
599c4ed
 
599c4ed
-        if(close_polygon)
599c4ed
+        if(close_polygon && (m_src_vertices.size() >= 3))
599c4ed
         {
599c4ed
-            if(m_src_vertices.size() >= 3)
599c4ed
+            dv.idx = 2;
599c4ed
+
599c4ed
+            v     = &m_src_vertices[m_src_vertices.size() - 1];
599c4ed
+            x1    = v->x;
599c4ed
+            y1    = v->y;
599c4ed
+            lprev = v->len;
599c4ed
+
599c4ed
+            v  = &m_src_vertices[0];
599c4ed
+            x2 = v->x;
599c4ed
+            y2 = v->y;
599c4ed
+            dv.lcurr = v->len;
599c4ed
+            line_parameters prev(x1, y1, x2, y2, lprev);
599c4ed
+
599c4ed
+            v = &m_src_vertices[1];
599c4ed
+            dv.x1    = v->x;
599c4ed
+            dv.y1    = v->y;
599c4ed
+            dv.lnext = v->len;
599c4ed
+            dv.curr = line_parameters(x2, y2, dv.x1, dv.y1, dv.lcurr);
599c4ed
+
599c4ed
+            v = &m_src_vertices[dv.idx];
599c4ed
+            dv.x2 = v->x;
599c4ed
+            dv.y2 = v->y;
599c4ed
+            dv.next = line_parameters(dv.x1, dv.y1, dv.x2, dv.y2, dv.lnext);
599c4ed
+
599c4ed
+            dv.xb1 = 0;
599c4ed
+            dv.yb1 = 0;
599c4ed
+            dv.xb2 = 0;
599c4ed
+            dv.yb2 = 0;
599c4ed
+
599c4ed
+            switch(m_line_join)
599c4ed
             {
599c4ed
-                dv.idx = 2;
599c4ed
-
599c4ed
-                v     = &m_src_vertices[m_src_vertices.size() - 1];
599c4ed
-                x1    = v->x;
599c4ed
-                y1    = v->y;
599c4ed
-                lprev = v->len;
599c4ed
-
599c4ed
-                v  = &m_src_vertices[0];
599c4ed
-                x2 = v->x;
599c4ed
-                y2 = v->y;
599c4ed
-                dv.lcurr = v->len;
599c4ed
-                line_parameters prev(x1, y1, x2, y2, lprev);
599c4ed
-
599c4ed
-                v = &m_src_vertices[1];
599c4ed
-                dv.x1    = v->x;
599c4ed
-                dv.y1    = v->y;
599c4ed
-                dv.lnext = v->len;
599c4ed
-                dv.curr = line_parameters(x2, y2, dv.x1, dv.y1, dv.lcurr);
599c4ed
-
599c4ed
-                v = &m_src_vertices[dv.idx];
599c4ed
-                dv.x2 = v->x;
599c4ed
-                dv.y2 = v->y;
599c4ed
-                dv.next = line_parameters(dv.x1, dv.y1, dv.x2, dv.y2, dv.lnext);
599c4ed
-
599c4ed
-                dv.xb1 = 0;
599c4ed
-                dv.yb1 = 0;
599c4ed
-                dv.xb2 = 0;
599c4ed
-                dv.yb2 = 0;
599c4ed
-
599c4ed
-                switch(m_line_join)
599c4ed
-                {
599c4ed
-                case outline_no_join:
599c4ed
-                    dv.flags = 3;
599c4ed
-                    break;
599c4ed
+            case outline_no_join:
599c4ed
+                dv.flags = 3;
599c4ed
+                break;
599c4ed
 
599c4ed
-                case outline_miter_join:
599c4ed
-                case outline_round_join:
599c4ed
-                    dv.flags = 
599c4ed
-                            (prev.diagonal_quadrant() == dv.curr.diagonal_quadrant()) |
599c4ed
-                        ((dv.curr.diagonal_quadrant() == dv.next.diagonal_quadrant()) << 1);
599c4ed
-                    break;
599c4ed
+            case outline_miter_join:
599c4ed
+            case outline_round_join:
599c4ed
+                dv.flags = 
599c4ed
+                        (prev.diagonal_quadrant() == dv.curr.diagonal_quadrant()) |
599c4ed
+                    ((dv.curr.diagonal_quadrant() == dv.next.diagonal_quadrant()) << 1);
599c4ed
+                break;
599c4ed
 
599c4ed
-                case outline_miter_accurate_join:
599c4ed
-                    dv.flags = 0;
599c4ed
-                    break;
599c4ed
-                }
599c4ed
+            case outline_miter_accurate_join:
599c4ed
+                dv.flags = 0;
599c4ed
+                break;
599c4ed
+            }
599c4ed
 
599c4ed
-                if((dv.flags & 1) == 0 && m_line_join != outline_round_join)
599c4ed
-                {
599c4ed
-                    bisectrix(prev, dv.curr, &dv.xb1, &dv.yb1);
599c4ed
-                }
599c4ed
+            if((dv.flags & 1) == 0 && m_line_join != outline_round_join)
599c4ed
+            {
599c4ed
+                bisectrix(prev, dv.curr, &dv.xb1, &dv.yb1);
599c4ed
+            }
599c4ed
 
599c4ed
-                if((dv.flags & 2) == 0 && m_line_join != outline_round_join)
599c4ed
-                {
599c4ed
-                    bisectrix(dv.curr, dv.next, &dv.xb2, &dv.yb2);
599c4ed
-                }
599c4ed
-                draw(dv, 0, m_src_vertices.size());
599c4ed
+            if((dv.flags & 2) == 0 && m_line_join != outline_round_join)
599c4ed
+            {
599c4ed
+                bisectrix(dv.curr, dv.next, &dv.xb2, &dv.yb2);
599c4ed
             }
599c4ed
+            draw(dv, 0, m_src_vertices.size());
599c4ed
         }
599c4ed
         else
599c4ed
         {
599c4ed
-- 
599c4ed
1.8.1.4
599c4ed