summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2014-05-07 09:58:26 -0700
committerKeith Packard <keithp@keithp.com>2014-05-22 18:35:14 -0700
commit141691ee3d4e3350e087683085a13589fa44ad2f (patch)
tree86bd85999498bc546e4dfc45be0a25f92daaae6c
parentafe8d637dbb1c0e35c10c41ca08b02c8be8f9b1d (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.h5
-rw-r--r--mi/miarc.c11
-rw-r--r--mi/mizerarc.c2
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);