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>
Reviewed-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
Keith Packard 2014-05-07 09:58:26 -07:00 committed by Eric Anholt
parent bf1429b203
commit a7fce36aff
3 changed files with 16 additions and 2 deletions

View File

@ -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 */ ,

View File

@ -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);
}

View File

@ -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);