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:
parent
bf1429b203
commit
a7fce36aff
5
mi/mi.h
5
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 */ ,
|
||||
|
|
11
mi/miarc.c
11
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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue
Block a user