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++;
 | 
			
		||||
	    y++;
 | 
			
		||||
 | 
			
		||||
	    MIPOLYSTEPLEFT
 | 
			
		||||
	    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)
 | 
			
		||||
| 
						 | 
				
			
			@ -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