void XAAValidateImageGlyphBlt( GCPtr pGC, unsigned long changes, DrawablePtr pDraw ) { XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC); Bool BigFont = FALSE; pGC->ops->ImageText8 = XAAFallbackOps.ImageText8; pGC->ops->ImageText16 = XAAFallbackOps.ImageText16; pGC->ops->ImageGlyphBlt = XAAFallbackOps.ImageGlyphBlt; if(!pGC->font) return; if((FONTMAXBOUNDS(pGC->font, rightSideBearing) - FONTMINBOUNDS(pGC->font, leftSideBearing) > 32)) BigFont = TRUE; /* no funny business */ if((FONTMINBOUNDS(pGC->font, characterWidth) <= 0) || ((FONTASCENT(pGC->font) + FONTDESCENT(pGC->font)) <= 0)) return; /* Check for TE Fonts */ if(!TERMINALFONT(pGC->font) || BigFont || (pGC->depth == 32)) { if(infoRec->ImageGlyphBltNonTE && CHECK_PLANEMASK(pGC,infoRec->ImageGlyphBltNonTEFlags) && CHECK_FG(pGC,infoRec->ImageGlyphBltNonTEFlags) && infoRec->SetupForSolidFill && CHECK_PLANEMASK(pGC,infoRec->SolidFillFlags) && CHECK_BG(pGC,infoRec->SolidFillFlags)) { pGC->ops->ImageText8 = infoRec->ImageText8NonTE; pGC->ops->ImageText16 = infoRec->ImageText16NonTE; pGC->ops->ImageGlyphBlt = infoRec->ImageGlyphBltNonTE; } } else if(infoRec->ImageGlyphBltTE && CHECK_PLANEMASK(pGC,infoRec->ImageGlyphBltTEFlags)){ if(!(infoRec->ImageGlyphBltTEFlags & TRANSPARENCY_ONLY) && CHECK_COLORS(pGC,infoRec->ImageGlyphBltTEFlags)) { pGC->ops->ImageText8 = infoRec->ImageText8TE; pGC->ops->ImageText16 = infoRec->ImageText16TE; pGC->ops->ImageGlyphBlt = infoRec->ImageGlyphBltTE; } else { if(CHECK_FG(pGC,infoRec->ImageGlyphBltTEFlags) && infoRec->SetupForSolidFill && CHECK_PLANEMASK(pGC,infoRec->SolidFillFlags) && CHECK_BG(pGC,infoRec->SolidFillFlags)) { pGC->ops->ImageText8 = infoRec->ImageText8TE; pGC->ops->ImageText16 = infoRec->ImageText16TE; pGC->ops->ImageGlyphBlt = infoRec->ImageGlyphBltTE; } } } }
void XAAValidateCopyPlane(GCPtr pGC, unsigned long changes, DrawablePtr pDraw) { XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC); if (infoRec->CopyPlane && CHECK_PLANEMASK(pGC, infoRec->CopyPlaneFlags) && CHECK_ROP(pGC, infoRec->CopyPlaneFlags) && CHECK_ROPSRC(pGC, infoRec->CopyPlaneFlags) && CHECK_COLORS(pGC, infoRec->CopyPlaneFlags) ) pGC->ops->CopyPlane = infoRec->CopyPlane; else pGC->ops->CopyPlane = XAAFallbackOps.CopyPlane; }
void XAAValidatePolylines(GCPtr pGC, unsigned long changes, DrawablePtr pDraw) { XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC); XAAGCPtr pGCPriv = (XAAGCPtr) dixLookupPrivate(&pGC->devPrivates, XAAGetGCKey()); if (pGC->lineStyle == LineSolid) changes &= ~GCDashList; if (!changes) return; pGC->ops->PolySegment = XAAFallbackOps.PolySegment; pGC->ops->Polylines = XAAFallbackOps.Polylines; pGC->ops->PolyRectangle = XAAFallbackOps.PolyRectangle; pGC->ops->PolyArc = XAAFallbackOps.PolyArc; if ((pGC->ops->FillSpans != XAAFallbackOps.FillSpans) && (pGC->lineWidth > 0)) { pGC->ops->PolyArc = miPolyArc; pGC->ops->PolySegment = miPolySegment; pGC->ops->PolyRectangle = miPolyRectangle; if (pGC->lineStyle == LineSolid) pGC->ops->Polylines = miWideLine; else pGC->ops->Polylines = miWideDash; } if ((pGC->lineWidth == 0) && (pGC->fillStyle == FillSolid)) { if (pGC->lineStyle == LineSolid) { if (infoRec->PolyRectangleThinSolid && CHECK_PLANEMASK(pGC, infoRec->PolyRectangleThinSolidFlags) && CHECK_ROP(pGC, infoRec->PolyRectangleThinSolidFlags) && CHECK_ROPSRC(pGC, infoRec->PolyRectangleThinSolidFlags) && CHECK_FG(pGC, infoRec->PolyRectangleThinSolidFlags)) { pGC->ops->PolyRectangle = infoRec->PolyRectangleThinSolid; } if (infoRec->PolySegmentThinSolid && CHECK_PLANEMASK(pGC, infoRec->PolySegmentThinSolidFlags) && CHECK_ROP(pGC, infoRec->PolySegmentThinSolidFlags) && CHECK_ROPSRC(pGC, infoRec->PolySegmentThinSolidFlags) && CHECK_FG(pGC, infoRec->PolySegmentThinSolidFlags)) { pGC->ops->PolySegment = infoRec->PolySegmentThinSolid; } if (infoRec->PolylinesThinSolid && CHECK_PLANEMASK(pGC, infoRec->PolylinesThinSolidFlags) && CHECK_ROP(pGC, infoRec->PolylinesThinSolidFlags) && CHECK_ROPSRC(pGC, infoRec->PolylinesThinSolidFlags) && CHECK_FG(pGC, infoRec->PolylinesThinSolidFlags)) { pGC->ops->Polylines = infoRec->PolylinesThinSolid; } } else if ((pGC->lineStyle == LineOnOffDash) && pGCPriv->DashPattern) { if (infoRec->PolySegmentThinDashed && !(infoRec->PolySegmentThinDashedFlags & NO_TRANSPARENCY) && ((pGC->alu == GXcopy) || !(infoRec->PolySegmentThinDashedFlags & TRANSPARENCY_GXCOPY_ONLY)) && CHECK_PLANEMASK(pGC, infoRec->PolySegmentThinDashedFlags) && CHECK_ROP(pGC, infoRec->PolySegmentThinDashedFlags) && CHECK_ROPSRC(pGC, infoRec->PolySegmentThinDashedFlags) && CHECK_FG(pGC, infoRec->PolySegmentThinDashedFlags)) { pGC->ops->PolySegment = infoRec->PolySegmentThinDashed; } if (infoRec->PolylinesThinDashed && !(infoRec->PolylinesThinDashedFlags & NO_TRANSPARENCY) && ((pGC->alu == GXcopy) || !(infoRec->PolylinesThinDashedFlags & TRANSPARENCY_GXCOPY_ONLY)) && CHECK_PLANEMASK(pGC, infoRec->PolylinesThinDashedFlags) && CHECK_ROP(pGC, infoRec->PolylinesThinDashedFlags) && CHECK_ROPSRC(pGC, infoRec->PolylinesThinDashedFlags) && CHECK_FG(pGC, infoRec->PolylinesThinDashedFlags)) { pGC->ops->Polylines = infoRec->PolylinesThinDashed; } if (pGC->ops->Polylines != XAAFallbackOps.Polylines) pGC->ops->PolyRectangle = miPolyRectangle; } else if (pGCPriv->DashPattern && (pGC->depth != 32)) { /* LineDoubleDash */ if (infoRec->PolySegmentThinDashed && !(infoRec->PolySegmentThinDashedFlags & TRANSPARENCY_ONLY) && CHECK_PLANEMASK(pGC, infoRec->PolySegmentThinDashedFlags) && CHECK_ROP(pGC, infoRec->PolySegmentThinDashedFlags) && CHECK_ROPSRC(pGC, infoRec->PolySegmentThinDashedFlags) && CHECK_COLORS(pGC, infoRec->PolySegmentThinDashedFlags)) { pGC->ops->PolySegment = infoRec->PolySegmentThinDashed; } if (infoRec->PolylinesThinDashed && !(infoRec->PolylinesThinDashedFlags & TRANSPARENCY_ONLY) && CHECK_PLANEMASK(pGC, infoRec->PolylinesThinDashedFlags) && CHECK_ROP(pGC, infoRec->PolylinesThinDashedFlags) && CHECK_ROPSRC(pGC, infoRec->PolylinesThinDashedFlags) && CHECK_COLORS(pGC, infoRec->PolylinesThinDashedFlags)) { pGC->ops->Polylines = infoRec->PolylinesThinDashed; } if (pGC->ops->Polylines != XAAFallbackOps.Polylines) pGC->ops->PolyRectangle = miPolyRectangle; } } if (infoRec->PolylinesWideSolid && (pGC->lineWidth > 0) && (pGC->fillStyle == FillSolid) && (pGC->lineStyle == LineSolid) && CHECK_PLANEMASK(pGC, infoRec->PolylinesWideSolidFlags) && CHECK_ROP(pGC, infoRec->PolylinesWideSolidFlags) && CHECK_ROPSRC(pGC, infoRec->PolylinesWideSolidFlags) && CHECK_FG(pGC, infoRec->PolylinesWideSolidFlags)) { pGC->ops->Polylines = infoRec->PolylinesWideSolid; } }