From a7fce36affb8211990e5b4956adea4d75f0e73c9 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Wed, 7 May 2014 09:58:26 -0700 Subject: [PATCH] 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 Reviewed-by: Eric Anholt --- mi/mi.h | 5 +++++ mi/miarc.c | 11 ++++++++++- mi/mizerarc.c | 2 +- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/mi/mi.h b/mi/mi.h index b8a4f0568..cacb2e076 100644 --- a/mi/mi.h +++ b/mi/mi.h @@ -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);