aboutsummaryrefslogtreecommitdiff
path: root/xorg-server/mi
diff options
context:
space:
mode:
Diffstat (limited to 'xorg-server/mi')
-rw-r--r--xorg-server/mi/mipolypnt.c5
-rw-r--r--xorg-server/mi/miwideline.c80
-rw-r--r--xorg-server/mi/miwideline.h64
3 files changed, 74 insertions, 75 deletions
diff --git a/xorg-server/mi/mipolypnt.c b/xorg-server/mi/mipolypnt.c
index 5d6243ab0..12771ee4e 100644
--- a/xorg-server/mi/mipolypnt.c
+++ b/xorg-server/mi/mipolypnt.c
@@ -73,6 +73,9 @@ miPolyPoint(
int i;
xPoint *ppt;
+ if(!(pwidthInit = xalloc(npt * sizeof(int))))
+ return;
+
/* make pointlist origin relative */
if (mode == CoordModePrevious)
{
@@ -107,8 +110,6 @@ miPolyPoint(
DoChangeGC(pGC, GCFillStyle, &fsNew, 0);
ValidateGC(pDrawable, pGC);
}
- if(!(pwidthInit = xalloc(npt * sizeof(int))))
- return;
pwidth = pwidthInit;
for(i = 0; i < npt; i++)
*pwidth++ = 1;
diff --git a/xorg-server/mi/miwideline.c b/xorg-server/mi/miwideline.c
index 838b06c68..e726d4260 100644
--- a/xorg-server/mi/miwideline.c
+++ b/xorg-server/mi/miwideline.c
@@ -56,6 +56,33 @@ from The Open Group.
#include "miwideline.h"
#include "mi.h"
+/*
+ * interface data to span-merging polygon filler
+ */
+
+typedef struct _SpanData {
+ SpanGroup fgGroup, bgGroup;
+} SpanDataRec, *SpanDataPtr;
+
+static void
+AppendSpanGroup(GCPtr pGC, unsigned long pixel, Spans *spanPtr, SpanDataPtr spanData)
+{
+ SpanGroup *group, *othergroup = NULL;
+ if (pixel == pGC->fgPixel)
+ {
+ group = &spanData->fgGroup;
+ if (pGC->lineStyle == LineDoubleDash)
+ othergroup = &spanData->bgGroup;
+ }
+ else
+ {
+ group = &spanData->bgGroup;
+ othergroup = &spanData->fgGroup;
+ }
+ miAppendSpans (group, othergroup, spanPtr);
+}
+
+
static void miLineArc(DrawablePtr pDraw, GCPtr pGC,
unsigned long pixel, SpanDataPtr spanData,
LineFacePtr leftFace,
@@ -142,8 +169,31 @@ miFillPolyHelper (DrawablePtr pDrawable, GCPtr pGC, unsigned long pixel,
while ((left_count || left_height) &&
(right_count || right_height))
{
- MIPOLYRELOADLEFT
- MIPOLYRELOADRIGHT
+ if (!left_height && left_count)
+ {
+ left_height = left->height;
+ left_x = left->x;
+ left_stepx = left->stepx;
+ left_signdx = left->signdx;
+ left_e = left->e;
+ left_dy = left->dy;
+ left_dx = left->dx;
+ --left_count;
+ ++left;
+ }
+
+ if (!right_height && right_count)
+ {
+ right_height = right->height;
+ right_x = right->x;
+ right_stepx = right->stepx;
+ right_signdx = right->signdx;
+ right_e = right->e;
+ right_dy = right->dy;
+ right_dx = right->dx;
+ --right_count;
+ ++right;
+ }
height = left_height;
if (height > right_height)
@@ -161,11 +211,23 @@ miFillPolyHelper (DrawablePtr pDrawable, GCPtr pGC, unsigned long pixel,
ppt++;
*pwidth++ = right_x - left_x + 1;
}
- y++;
-
- MIPOLYSTEPLEFT
+ y++;
+
+ left_x += left_stepx;
+ left_e += left_dx;
+ if (left_e > 0)
+ {
+ left_x += left_signdx;
+ left_e -= left_dy;
+ }
- MIPOLYSTEPRIGHT
+ right_x += right_stepx;
+ right_e += right_dx;
+ if (right_e > 0)
+ {
+ right_x += right_signdx;
+ right_e -= right_dy;
+ }
}
}
if (!spanData)
@@ -182,7 +244,7 @@ miFillPolyHelper (DrawablePtr pDrawable, GCPtr pGC, unsigned long pixel,
else
{
spanRec.count = ppt - spanRec.points;
- AppendSpanGroup (pGC, pixel, &spanRec, spanData)
+ AppendSpanGroup (pGC, pixel, &spanRec, spanData);
}
}
@@ -251,7 +313,7 @@ miFillRectPolyHelper (
y++;
}
spanRec.count = ppt - spanRec.points;
- AppendSpanGroup (pGC, pixel, &spanRec, spanData)
+ AppendSpanGroup (pGC, pixel, &spanRec, spanData);
}
}
@@ -1101,7 +1163,7 @@ miLineArc (
else
{
spanRec.count = n;
- AppendSpanGroup (pGC, pixel, &spanRec, spanData)
+ AppendSpanGroup (pGC, pixel, &spanRec, spanData);
}
}
diff --git a/xorg-server/mi/miwideline.h b/xorg-server/mi/miwideline.h
index 1f615d689..1665ebfb1 100644
--- a/xorg-server/mi/miwideline.h
+++ b/xorg-server/mi/miwideline.h
@@ -31,30 +31,6 @@ from The Open Group.
#include "mispans.h"
#include "mifpoly.h" /* for ICEIL */
-/*
- * interface data to span-merging polygon filler
- */
-
-typedef struct _SpanData {
- SpanGroup fgGroup, bgGroup;
-} SpanDataRec, *SpanDataPtr;
-
-#define AppendSpanGroup(pGC, pixel, spanPtr, spanData) { \
- SpanGroup *group, *othergroup = NULL; \
- if (pixel == pGC->fgPixel) \
- { \
- group = &spanData->fgGroup; \
- if (pGC->lineStyle == LineDoubleDash) \
- othergroup = &spanData->bgGroup; \
- } \
- else \
- { \
- group = &spanData->bgGroup; \
- othergroup = &spanData->fgGroup; \
- } \
- miAppendSpans (group, othergroup, spanPtr); \
-}
-
/*
* Polygon edge description for integer wide-line routines
*/
@@ -99,46 +75,6 @@ typedef struct _LineFace {
* macros for polygon fillers
*/
-#define MIPOLYRELOADLEFT if (!left_height && left_count) { \
- left_height = left->height; \
- left_x = left->x; \
- left_stepx = left->stepx; \
- left_signdx = left->signdx; \
- left_e = left->e; \
- left_dy = left->dy; \
- left_dx = left->dx; \
- --left_count; \
- ++left; \
- }
-
-#define MIPOLYRELOADRIGHT if (!right_height && right_count) { \
- right_height = right->height; \
- right_x = right->x; \
- right_stepx = right->stepx; \
- right_signdx = right->signdx; \
- right_e = right->e; \
- right_dy = right->dy; \
- right_dx = right->dx; \
- --right_count; \
- ++right; \
- }
-
-#define MIPOLYSTEPLEFT left_x += left_stepx; \
- left_e += left_dx; \
- if (left_e > 0) \
- { \
- left_x += left_signdx; \
- left_e -= left_dy; \
- }
-
-#define MIPOLYSTEPRIGHT right_x += right_stepx; \
- right_e += right_dx; \
- if (right_e > 0) \
- { \
- right_x += right_signdx; \
- right_e -= right_dy; \
- }
-
#define MILINESETPIXEL(pDrawable, pGC, pixel, oldPixel) { \
oldPixel = pGC->fgPixel; \
if (pixel != oldPixel) { \