diff options
author | Keith Packard <keithp@keithp.com> | 2014-05-07 09:58:26 -0700 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2014-05-22 18:35:14 -0700 |
commit | 141691ee3d4e3350e087683085a13589fa44ad2f (patch) | |
tree | 86bd85999498bc546e4dfc45be0a25f92daaae6c | |
parent | afe8d637dbb1c0e35c10c41ca08b02c8be8f9b1d (diff) |
mi: Make miPolyArc draw fast zero-width when possible
Instead of forcing drivers to figure out when to call miZeroPolyArc,
have miPolyArc call that when possible.
This involved renaming the existing miPolyArc call to miWideArc and
creating a new miPolyArc wrapper function as miZeroPolyArc falls back
to miWideArc when the arc is too large to be drawn with the zero-width
code (ellipses larger than 800x800).
Signed-off-by: Keith Packard <keithp@keithp.com>
-rw-r--r-- | mi/mi.h | 5 | ||||
-rw-r--r-- | mi/miarc.c | 11 | ||||
-rw-r--r-- | mi/mizerarc.c | 2 |
3 files changed, 16 insertions, 2 deletions
@@ -67,6 +67,11 @@ typedef struct _miDash *miDashPtr; /* miarc.c */ +extern _X_EXPORT void miWideArc(DrawablePtr pDraw, + GCPtr pGC, + int narcs, + xArc * parcs); + extern _X_EXPORT void miPolyArc(DrawablePtr /*pDraw */ , GCPtr /*pGC */ , int /*narcs */ , diff --git a/mi/miarc.c b/mi/miarc.c index 0f56c7db3..e55108a44 100644 --- a/mi/miarc.c +++ b/mi/miarc.c @@ -886,7 +886,7 @@ miFillWideEllipse(DrawablePtr pDraw, GCPtr pGC, xArc * parc) */ void -miPolyArc(DrawablePtr pDraw, GCPtr pGC, int narcs, xArc * parcs) +miWideArc(DrawablePtr pDraw, GCPtr pGC, int narcs, xArc * parcs) { int i; xArc *parc; @@ -3396,3 +3396,12 @@ drawQuadrant(struct arc_def *def, y--; } } + +void +miPolyArc(DrawablePtr pDraw, GCPtr pGC, int narcs, xArc * parcs) +{ + if (pGC->lineWidth == 0) + miZeroPolyArc(pDraw, pGC, narcs, parcs); + else + miWideArc(pDraw, pGC, narcs, parcs); +} diff --git a/mi/mizerarc.c b/mi/mizerarc.c index 9dac180d1..b216cf43d 100644 --- a/mi/mizerarc.c +++ b/mi/mizerarc.c @@ -656,7 +656,7 @@ miZeroPolyArc(DrawablePtr pDraw, GCPtr pGC, int narcs, xArc * parcs) for (arc = parcs, i = narcs; --i >= 0; arc++) { if (!miCanZeroArc(arc)) - miPolyArc(pDraw, pGC, 1, arc); + miWideArc(pDraw, pGC, 1, arc); else { if (arc->width > arc->height) n = arc->width + (arc->height >> 1); |