Merge remote branch 'jamey/for-keith'
This commit is contained in:
commit
95074538cc
117
dix/gc.c
117
dix/gc.c
|
@ -263,78 +263,68 @@ dixChangeGC(ClientPtr client, GC *pGC, BITS32 mask, CARD32 *pC32, ChangeGCValPtr
|
|||
break;
|
||||
}
|
||||
case GCTile:
|
||||
{
|
||||
XID newpix = 0;
|
||||
if (pUnion)
|
||||
{
|
||||
NEXT_PTR(PixmapPtr, pPixmap);
|
||||
rc = Success;
|
||||
}
|
||||
else
|
||||
{
|
||||
XID newpix;
|
||||
NEXTVAL(XID, newpix);
|
||||
rc = dixLookupResourceByType((pointer *)&pPixmap, newpix,
|
||||
RT_PIXMAP, client, DixReadAccess);
|
||||
if (rc != Success)
|
||||
{
|
||||
clientErrorValue = newpix;
|
||||
error = (rc == BadValue) ? BadPixmap : rc;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (rc == Success)
|
||||
if ((pPixmap->drawable.depth != pGC->depth) ||
|
||||
(pPixmap->drawable.pScreen != pGC->pScreen))
|
||||
{
|
||||
if ((pPixmap->drawable.depth != pGC->depth) ||
|
||||
(pPixmap->drawable.pScreen != pGC->pScreen))
|
||||
{
|
||||
error = BadMatch;
|
||||
}
|
||||
else
|
||||
{
|
||||
pPixmap->refcnt++;
|
||||
if (!pGC->tileIsPixel)
|
||||
(* pGC->pScreen->DestroyPixmap)(pGC->tile.pixmap);
|
||||
pGC->tileIsPixel = FALSE;
|
||||
pGC->tile.pixmap = pPixmap;
|
||||
}
|
||||
error = BadMatch;
|
||||
}
|
||||
else
|
||||
{
|
||||
clientErrorValue = newpix;
|
||||
error = (rc == BadValue) ? BadPixmap : rc;
|
||||
pPixmap->refcnt++;
|
||||
if (!pGC->tileIsPixel)
|
||||
(* pGC->pScreen->DestroyPixmap)(pGC->tile.pixmap);
|
||||
pGC->tileIsPixel = FALSE;
|
||||
pGC->tile.pixmap = pPixmap;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case GCStipple:
|
||||
{
|
||||
XID newstipple = 0;
|
||||
if (pUnion)
|
||||
{
|
||||
NEXT_PTR(PixmapPtr, pPixmap);
|
||||
rc = Success;
|
||||
}
|
||||
else
|
||||
{
|
||||
XID newstipple;
|
||||
NEXTVAL(XID, newstipple)
|
||||
rc = dixLookupResourceByType((pointer *)&pPixmap, newstipple,
|
||||
RT_PIXMAP, client, DixReadAccess);
|
||||
if (rc != Success)
|
||||
{
|
||||
clientErrorValue = newstipple;
|
||||
error = (rc == BadValue) ? BadPixmap : rc;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (rc == Success)
|
||||
if ((pPixmap->drawable.depth != 1) ||
|
||||
(pPixmap->drawable.pScreen != pGC->pScreen))
|
||||
{
|
||||
if ((pPixmap->drawable.depth != 1) ||
|
||||
(pPixmap->drawable.pScreen != pGC->pScreen))
|
||||
{
|
||||
error = BadMatch;
|
||||
}
|
||||
else
|
||||
{
|
||||
pPixmap->refcnt++;
|
||||
if (pGC->stipple)
|
||||
(* pGC->pScreen->DestroyPixmap)(pGC->stipple);
|
||||
pGC->stipple = pPixmap;
|
||||
}
|
||||
error = BadMatch;
|
||||
}
|
||||
else
|
||||
{
|
||||
clientErrorValue = newstipple;
|
||||
error = (rc == BadValue) ? BadPixmap : rc;
|
||||
pPixmap->refcnt++;
|
||||
if (pGC->stipple)
|
||||
(* pGC->pScreen->DestroyPixmap)(pGC->stipple);
|
||||
pGC->stipple = pPixmap;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case GCTileStipXOrigin:
|
||||
NEXTVAL(INT16, pGC->patOrg.x);
|
||||
break;
|
||||
|
@ -344,30 +334,27 @@ dixChangeGC(ClientPtr client, GC *pGC, BITS32 mask, CARD32 *pC32, ChangeGCValPtr
|
|||
case GCFont:
|
||||
{
|
||||
FontPtr pFont;
|
||||
XID newfont = 0;
|
||||
if (pUnion)
|
||||
{
|
||||
NEXT_PTR(FontPtr, pFont);
|
||||
rc = Success;
|
||||
}
|
||||
else
|
||||
{
|
||||
XID newfont;
|
||||
NEXTVAL(XID, newfont)
|
||||
rc = dixLookupResourceByType((pointer *)&pFont, newfont,
|
||||
RT_FONT, client, DixUseAccess);
|
||||
if (rc != Success)
|
||||
{
|
||||
clientErrorValue = newfont;
|
||||
error = (rc == BadValue) ? BadFont : rc;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (rc == Success)
|
||||
{
|
||||
pFont->refcnt++;
|
||||
if (pGC->font)
|
||||
CloseFont(pGC->font, (Font)0);
|
||||
pGC->font = pFont;
|
||||
}
|
||||
else
|
||||
{
|
||||
clientErrorValue = newfont;
|
||||
error = (rc == BadValue) ? BadFont : rc;
|
||||
}
|
||||
pFont->refcnt++;
|
||||
if (pGC->font)
|
||||
CloseFont(pGC->font, (Font)0);
|
||||
pGC->font = pFont;
|
||||
break;
|
||||
}
|
||||
case GCSubwindowMode:
|
||||
|
@ -403,22 +390,16 @@ dixChangeGC(ClientPtr client, GC *pGC, BITS32 mask, CARD32 *pC32, ChangeGCValPtr
|
|||
NEXTVAL(INT16, pGC->clipOrg.y);
|
||||
break;
|
||||
case GCClipMask:
|
||||
{
|
||||
Pixmap pid = 0;
|
||||
int clipType = 0;
|
||||
|
||||
if (pUnion)
|
||||
{
|
||||
NEXT_PTR(PixmapPtr, pPixmap);
|
||||
}
|
||||
else
|
||||
{
|
||||
Pixmap pid;
|
||||
NEXTVAL(Pixmap, pid)
|
||||
if (pid == None)
|
||||
{
|
||||
clipType = CT_NONE;
|
||||
pPixmap = NullPixmap;
|
||||
}
|
||||
else {
|
||||
rc = dixLookupResourceByType((pointer *)&pPixmap, pid,
|
||||
RT_PIXMAP, client,
|
||||
|
@ -426,6 +407,7 @@ dixChangeGC(ClientPtr client, GC *pGC, BITS32 mask, CARD32 *pC32, ChangeGCValPtr
|
|||
if (rc != Success) {
|
||||
clientErrorValue = pid;
|
||||
error = (rc == BadValue) ? BadPixmap : rc;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -436,20 +418,13 @@ dixChangeGC(ClientPtr client, GC *pGC, BITS32 mask, CARD32 *pC32, ChangeGCValPtr
|
|||
(pPixmap->drawable.pScreen != pGC->pScreen))
|
||||
{
|
||||
error = BadMatch;
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
clipType = CT_PIXMAP;
|
||||
pPixmap->refcnt++;
|
||||
}
|
||||
}
|
||||
if(error == Success)
|
||||
{
|
||||
(*pGC->funcs->ChangeClip)(pGC, clipType,
|
||||
(pointer)pPixmap, 0);
|
||||
pPixmap->refcnt++;
|
||||
}
|
||||
(*pGC->funcs->ChangeClip)(pGC, pPixmap ? CT_PIXMAP : CT_NONE,
|
||||
(pointer)pPixmap, 0);
|
||||
break;
|
||||
}
|
||||
case GCDashOffset:
|
||||
NEXTVAL(INT16, pGC->dashOffset);
|
||||
break;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -52,6 +52,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,
|
||||
|
@ -138,8 +165,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)
|
||||
|
@ -157,11 +207,23 @@ miFillPolyHelper (DrawablePtr pDrawable, GCPtr pGC, unsigned long pixel,
|
|||
ppt++;
|
||||
*pwidth++ = right_x - left_x + 1;
|
||||
}
|
||||
y++;
|
||||
|
||||
MIPOLYSTEPLEFT
|
||||
y++;
|
||||
|
||||
MIPOLYSTEPRIGHT
|
||||
left_x += left_stepx;
|
||||
left_e += left_dx;
|
||||
if (left_e > 0)
|
||||
{
|
||||
left_x += left_signdx;
|
||||
left_e -= left_dy;
|
||||
}
|
||||
|
||||
right_x += right_stepx;
|
||||
right_e += right_dx;
|
||||
if (right_e > 0)
|
||||
{
|
||||
right_x += right_signdx;
|
||||
right_e -= right_dy;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!spanData)
|
||||
|
@ -178,7 +240,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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -247,7 +309,7 @@ miFillRectPolyHelper (
|
|||
y++;
|
||||
}
|
||||
spanRec.count = ppt - spanRec.points;
|
||||
AppendSpanGroup (pGC, pixel, &spanRec, spanData)
|
||||
AppendSpanGroup (pGC, pixel, &spanRec, spanData);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1097,7 +1159,7 @@ miLineArc (
|
|||
else
|
||||
{
|
||||
spanRec.count = n;
|
||||
AppendSpanGroup (pGC, pixel, &spanRec, spanData)
|
||||
AppendSpanGroup (pGC, pixel, &spanRec, spanData);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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) { \
|
||||
|
|
Loading…
Reference in New Issue
Block a user