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;
|
break;
|
||||||
}
|
}
|
||||||
case GCTile:
|
case GCTile:
|
||||||
{
|
|
||||||
XID newpix = 0;
|
|
||||||
if (pUnion)
|
if (pUnion)
|
||||||
{
|
{
|
||||||
NEXT_PTR(PixmapPtr, pPixmap);
|
NEXT_PTR(PixmapPtr, pPixmap);
|
||||||
rc = Success;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
XID newpix;
|
||||||
NEXTVAL(XID, newpix);
|
NEXTVAL(XID, newpix);
|
||||||
rc = dixLookupResourceByType((pointer *)&pPixmap, newpix,
|
rc = dixLookupResourceByType((pointer *)&pPixmap, newpix,
|
||||||
RT_PIXMAP, client, DixReadAccess);
|
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) ||
|
error = BadMatch;
|
||||||
(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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
clientErrorValue = newpix;
|
pPixmap->refcnt++;
|
||||||
error = (rc == BadValue) ? BadPixmap : rc;
|
if (!pGC->tileIsPixel)
|
||||||
|
(* pGC->pScreen->DestroyPixmap)(pGC->tile.pixmap);
|
||||||
|
pGC->tileIsPixel = FALSE;
|
||||||
|
pGC->tile.pixmap = pPixmap;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
case GCStipple:
|
case GCStipple:
|
||||||
{
|
|
||||||
XID newstipple = 0;
|
|
||||||
if (pUnion)
|
if (pUnion)
|
||||||
{
|
{
|
||||||
NEXT_PTR(PixmapPtr, pPixmap);
|
NEXT_PTR(PixmapPtr, pPixmap);
|
||||||
rc = Success;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
XID newstipple;
|
||||||
NEXTVAL(XID, newstipple)
|
NEXTVAL(XID, newstipple)
|
||||||
rc = dixLookupResourceByType((pointer *)&pPixmap, newstipple,
|
rc = dixLookupResourceByType((pointer *)&pPixmap, newstipple,
|
||||||
RT_PIXMAP, client, DixReadAccess);
|
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) ||
|
error = BadMatch;
|
||||||
(pPixmap->drawable.pScreen != pGC->pScreen))
|
|
||||||
{
|
|
||||||
error = BadMatch;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
pPixmap->refcnt++;
|
|
||||||
if (pGC->stipple)
|
|
||||||
(* pGC->pScreen->DestroyPixmap)(pGC->stipple);
|
|
||||||
pGC->stipple = pPixmap;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
clientErrorValue = newstipple;
|
pPixmap->refcnt++;
|
||||||
error = (rc == BadValue) ? BadPixmap : rc;
|
if (pGC->stipple)
|
||||||
|
(* pGC->pScreen->DestroyPixmap)(pGC->stipple);
|
||||||
|
pGC->stipple = pPixmap;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
case GCTileStipXOrigin:
|
case GCTileStipXOrigin:
|
||||||
NEXTVAL(INT16, pGC->patOrg.x);
|
NEXTVAL(INT16, pGC->patOrg.x);
|
||||||
break;
|
break;
|
||||||
|
@ -344,30 +334,27 @@ dixChangeGC(ClientPtr client, GC *pGC, BITS32 mask, CARD32 *pC32, ChangeGCValPtr
|
||||||
case GCFont:
|
case GCFont:
|
||||||
{
|
{
|
||||||
FontPtr pFont;
|
FontPtr pFont;
|
||||||
XID newfont = 0;
|
|
||||||
if (pUnion)
|
if (pUnion)
|
||||||
{
|
{
|
||||||
NEXT_PTR(FontPtr, pFont);
|
NEXT_PTR(FontPtr, pFont);
|
||||||
rc = Success;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
XID newfont;
|
||||||
NEXTVAL(XID, newfont)
|
NEXTVAL(XID, newfont)
|
||||||
rc = dixLookupResourceByType((pointer *)&pFont, newfont,
|
rc = dixLookupResourceByType((pointer *)&pFont, newfont,
|
||||||
RT_FONT, client, DixUseAccess);
|
RT_FONT, client, DixUseAccess);
|
||||||
|
if (rc != Success)
|
||||||
|
{
|
||||||
|
clientErrorValue = newfont;
|
||||||
|
error = (rc == BadValue) ? BadFont : rc;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (rc == Success)
|
pFont->refcnt++;
|
||||||
{
|
if (pGC->font)
|
||||||
pFont->refcnt++;
|
CloseFont(pGC->font, (Font)0);
|
||||||
if (pGC->font)
|
pGC->font = pFont;
|
||||||
CloseFont(pGC->font, (Font)0);
|
|
||||||
pGC->font = pFont;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
clientErrorValue = newfont;
|
|
||||||
error = (rc == BadValue) ? BadFont : rc;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GCSubwindowMode:
|
case GCSubwindowMode:
|
||||||
|
@ -403,22 +390,16 @@ dixChangeGC(ClientPtr client, GC *pGC, BITS32 mask, CARD32 *pC32, ChangeGCValPtr
|
||||||
NEXTVAL(INT16, pGC->clipOrg.y);
|
NEXTVAL(INT16, pGC->clipOrg.y);
|
||||||
break;
|
break;
|
||||||
case GCClipMask:
|
case GCClipMask:
|
||||||
{
|
|
||||||
Pixmap pid = 0;
|
|
||||||
int clipType = 0;
|
|
||||||
|
|
||||||
if (pUnion)
|
if (pUnion)
|
||||||
{
|
{
|
||||||
NEXT_PTR(PixmapPtr, pPixmap);
|
NEXT_PTR(PixmapPtr, pPixmap);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
Pixmap pid;
|
||||||
NEXTVAL(Pixmap, pid)
|
NEXTVAL(Pixmap, pid)
|
||||||
if (pid == None)
|
if (pid == None)
|
||||||
{
|
|
||||||
clipType = CT_NONE;
|
|
||||||
pPixmap = NullPixmap;
|
pPixmap = NullPixmap;
|
||||||
}
|
|
||||||
else {
|
else {
|
||||||
rc = dixLookupResourceByType((pointer *)&pPixmap, pid,
|
rc = dixLookupResourceByType((pointer *)&pPixmap, pid,
|
||||||
RT_PIXMAP, client,
|
RT_PIXMAP, client,
|
||||||
|
@ -426,6 +407,7 @@ dixChangeGC(ClientPtr client, GC *pGC, BITS32 mask, CARD32 *pC32, ChangeGCValPtr
|
||||||
if (rc != Success) {
|
if (rc != Success) {
|
||||||
clientErrorValue = pid;
|
clientErrorValue = pid;
|
||||||
error = (rc == BadValue) ? BadPixmap : rc;
|
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))
|
(pPixmap->drawable.pScreen != pGC->pScreen))
|
||||||
{
|
{
|
||||||
error = BadMatch;
|
error = BadMatch;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
else
|
pPixmap->refcnt++;
|
||||||
{
|
|
||||||
clipType = CT_PIXMAP;
|
|
||||||
pPixmap->refcnt++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(error == Success)
|
|
||||||
{
|
|
||||||
(*pGC->funcs->ChangeClip)(pGC, clipType,
|
|
||||||
(pointer)pPixmap, 0);
|
|
||||||
}
|
}
|
||||||
|
(*pGC->funcs->ChangeClip)(pGC, pPixmap ? CT_PIXMAP : CT_NONE,
|
||||||
|
(pointer)pPixmap, 0);
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
case GCDashOffset:
|
case GCDashOffset:
|
||||||
NEXTVAL(INT16, pGC->dashOffset);
|
NEXTVAL(INT16, pGC->dashOffset);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -73,6 +73,9 @@ miPolyPoint(
|
||||||
int i;
|
int i;
|
||||||
xPoint *ppt;
|
xPoint *ppt;
|
||||||
|
|
||||||
|
if(!(pwidthInit = xalloc(npt * sizeof(int))))
|
||||||
|
return;
|
||||||
|
|
||||||
/* make pointlist origin relative */
|
/* make pointlist origin relative */
|
||||||
if (mode == CoordModePrevious)
|
if (mode == CoordModePrevious)
|
||||||
{
|
{
|
||||||
|
@ -107,8 +110,6 @@ miPolyPoint(
|
||||||
DoChangeGC(pGC, GCFillStyle, &fsNew, 0);
|
DoChangeGC(pGC, GCFillStyle, &fsNew, 0);
|
||||||
ValidateGC(pDrawable, pGC);
|
ValidateGC(pDrawable, pGC);
|
||||||
}
|
}
|
||||||
if(!(pwidthInit = xalloc(npt * sizeof(int))))
|
|
||||||
return;
|
|
||||||
pwidth = pwidthInit;
|
pwidth = pwidthInit;
|
||||||
for(i = 0; i < npt; i++)
|
for(i = 0; i < npt; i++)
|
||||||
*pwidth++ = 1;
|
*pwidth++ = 1;
|
||||||
|
|
|
@ -52,6 +52,33 @@ from The Open Group.
|
||||||
#include "miwideline.h"
|
#include "miwideline.h"
|
||||||
#include "mi.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,
|
static void miLineArc(DrawablePtr pDraw, GCPtr pGC,
|
||||||
unsigned long pixel, SpanDataPtr spanData,
|
unsigned long pixel, SpanDataPtr spanData,
|
||||||
LineFacePtr leftFace,
|
LineFacePtr leftFace,
|
||||||
|
@ -138,8 +165,31 @@ miFillPolyHelper (DrawablePtr pDrawable, GCPtr pGC, unsigned long pixel,
|
||||||
while ((left_count || left_height) &&
|
while ((left_count || left_height) &&
|
||||||
(right_count || right_height))
|
(right_count || right_height))
|
||||||
{
|
{
|
||||||
MIPOLYRELOADLEFT
|
if (!left_height && left_count)
|
||||||
MIPOLYRELOADRIGHT
|
{
|
||||||
|
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;
|
height = left_height;
|
||||||
if (height > right_height)
|
if (height > right_height)
|
||||||
|
@ -157,11 +207,23 @@ miFillPolyHelper (DrawablePtr pDrawable, GCPtr pGC, unsigned long pixel,
|
||||||
ppt++;
|
ppt++;
|
||||||
*pwidth++ = right_x - left_x + 1;
|
*pwidth++ = right_x - left_x + 1;
|
||||||
}
|
}
|
||||||
y++;
|
y++;
|
||||||
|
|
||||||
MIPOLYSTEPLEFT
|
|
||||||
|
|
||||||
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)
|
if (!spanData)
|
||||||
|
@ -178,7 +240,7 @@ miFillPolyHelper (DrawablePtr pDrawable, GCPtr pGC, unsigned long pixel,
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
spanRec.count = ppt - spanRec.points;
|
spanRec.count = ppt - spanRec.points;
|
||||||
AppendSpanGroup (pGC, pixel, &spanRec, spanData)
|
AppendSpanGroup (pGC, pixel, &spanRec, spanData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -247,7 +309,7 @@ miFillRectPolyHelper (
|
||||||
y++;
|
y++;
|
||||||
}
|
}
|
||||||
spanRec.count = ppt - spanRec.points;
|
spanRec.count = ppt - spanRec.points;
|
||||||
AppendSpanGroup (pGC, pixel, &spanRec, spanData)
|
AppendSpanGroup (pGC, pixel, &spanRec, spanData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1097,7 +1159,7 @@ miLineArc (
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
spanRec.count = n;
|
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 "mispans.h"
|
||||||
#include "mifpoly.h" /* for ICEIL */
|
#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
|
* Polygon edge description for integer wide-line routines
|
||||||
*/
|
*/
|
||||||
|
@ -99,46 +75,6 @@ typedef struct _LineFace {
|
||||||
* macros for polygon fillers
|
* 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) { \
|
#define MILINESETPIXEL(pDrawable, pGC, pixel, oldPixel) { \
|
||||||
oldPixel = pGC->fgPixel; \
|
oldPixel = pGC->fgPixel; \
|
||||||
if (pixel != oldPixel) { \
|
if (pixel != oldPixel) { \
|
||||||
|
|
Loading…
Reference in New Issue
Block a user