summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2015-04-08 07:45:28 -0700
committerAdam Jackson <ajax@redhat.com>2015-06-03 09:05:37 -0400
commit2c818e7b5db92598962f50e42b8367d7724459fb (patch)
tree8009d9cd845ae864d10d977ed26969d3808ac3db
parent72b66d508acb1d5f0361b06f426ee6fc0d6ad575 (diff)
mi: Partial pie-slice filled arcs may need more space for spans
The mi filled arc code estimates that a filled arc will produce no more spans than the arc is tall. This is true for most arcs except for pie-slice arcs strictly between 180 and 360 degrees where the missing portion of the arc faces up or down such that we get two spans on some scanlines. For those, we need to reserve room for another height/2 spans. This patch just does it for all partial pie-sliced arcs to make the test easier to understand; it's just over-allocating a bit of memory, so that's safe. Signed-off-by: Keith Packard <keithp@keithp.com> Reviewed-by: Adam Jackson <ajax@redhat.com> (cherry picked from commit 41932dfbc841a1adc6512d41085ea3f8ebecb42c)
-rw-r--r--mi/mifillarc.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/mi/mifillarc.c b/mi/mifillarc.c
index 246d70ff4..888519edf 100644
--- a/mi/mifillarc.c
+++ b/mi/mifillarc.c
@@ -660,6 +660,11 @@ miPolyFillArc(DrawablePtr pDraw, GCPtr pGC, int narcs_all, xArc * parcs)
if (narcs && nspans + arc->height > MAX_SPANS_PER_LOOP)
break;
nspans += arc->height;
+
+ /* A pie-slice arc may add another pile of spans */
+ if (pGC->arcMode == ArcPieSlice &&
+ (-FULLCIRCLE < arc->angle2 && arc->angle2 < FULLCIRCLE))
+ nspans += (arc->height + 1) >> 1;
}
pts = points = malloc (sizeof (DDXPointRec) * nspans +