|
|
1.1 ! root 1: ! 2: /******************************Module*Header*******************************\ ! 3: * Module Name: stretch.c ! 4: * ! 5: * DrvStretchBlt ! 6: * ! 7: * Copyright (c) 1993 Microsoft Corporation ! 8: \**************************************************************************/ ! 9: ! 10: #include "driver.h" ! 11: ! 12: //@@@ This should become a VOID when all cases are handled in the stretching ! 13: //@@@ code, and should go in driver.h ! 14: INT vStretchBlt8bpp(PPDEV ppdev, PBYTE pSrc, LONG lSrcNext, ! 15: PRECTL prclSrc, PRECTL prclDest, PRECTL prclDestClip, ! 16: PULONG pulXlatVector); ! 17: ! 18: BOOL DrvStretchBlt( ! 19: SURFOBJ *psoDest, ! 20: SURFOBJ *psoSrc, ! 21: SURFOBJ *psoMask, ! 22: CLIPOBJ *pco, ! 23: XLATEOBJ *pxlo, ! 24: COLORADJUSTMENT *pca, ! 25: POINTL *pptlBrushOrg, ! 26: RECTL *prclDest, ! 27: RECTL *prclSrc, ! 28: POINTL *pptlMask, ! 29: ULONG iMode) ! 30: { ! 31: PPDEV ppdev = (PPDEV) psoDest->dhpdev; ! 32: PULONG pulXlatVector; ! 33: INT iClipping; ! 34: ! 35: // Handle only cases where the source is a DIB and the destination is ! 36: // the VGA surface (which is always the case here if the source is a ! 37: // DIB). Also, halftoning and masking aren't handled by the special-case ! 38: // code. We only handle the case where a single source pixel is mapped onto ! 39: // each destination pixel ! 40: if ((iMode == COLORONCOLOR) && ! 41: (psoSrc->iType == STYPE_BITMAP) && ! 42: (psoMask == NULL)) { ! 43: ! 44: // We don't special case X or Y inversion for now ! 45: if ((prclDest->left < prclDest->right) && ! 46: (prclDest->top < prclDest->bottom)) { ! 47: ! 48: // We don't special-case cases where the source has to be clipped ! 49: // to the source bitmap extent ! 50: if ((prclSrc->left >= 0) && ! 51: (prclSrc->top >= 0) && ! 52: (prclSrc->right <= psoSrc->sizlBitmap.cx) && ! 53: (prclSrc->bottom <= psoSrc->sizlBitmap.cy)) { ! 54: ! 55: // Set up the clipping type ! 56: if (pco == (CLIPOBJ *) NULL) { ! 57: // No CLIPOBJ provided, so we don't have to worry about ! 58: // clipping ! 59: iClipping = DC_TRIVIAL; ! 60: } else { ! 61: // Use the CLIPOBJ-provided clipping ! 62: iClipping = pco->iDComplexity; ! 63: } ! 64: ! 65: // We don't special-case clipping for now ! 66: if (iClipping != DC_COMPLEX) { ! 67: ! 68: switch(psoSrc->iBitmapFormat) { ! 69: case BMF_1BPP: ! 70: break; ! 71: ! 72: case BMF_4BPP: ! 73: break; ! 74: ! 75: case BMF_8BPP: ! 76: ! 77: // Set up the color translation, if any ! 78: if ((pxlo == NULL) || ! 79: (pxlo->flXlate & XO_TRIVIAL)) { ! 80: pulXlatVector = NULL; ! 81: } else { ! 82: if (pxlo->pulXlate != NULL) { ! 83: pulXlatVector = pxlo->pulXlate; ! 84: } else { ! 85: if ((pulXlatVector = ! 86: XLATEOBJ_piVector(pxlo)) == NULL) { ! 87: return FALSE; ! 88: } ! 89: } ! 90: } ! 91: ! 92: //@@@ won't need to test return code once both ! 93: //@@@ expand cases are also handled in the ! 94: //@@@ stretching code ! 95: if (vStretchBlt8bpp(ppdev, ! 96: psoSrc->pvScan0, ! 97: psoSrc->lDelta, ! 98: prclSrc, ! 99: prclDest, ! 100: (iClipping == DC_TRIVIAL) ? NULL : ! 101: &pco->rclBounds, ! 102: pulXlatVector)) { ! 103: ! 104: return TRUE; ! 105: } ! 106: break; ! 107: ! 108: case BMF_16BPP: ! 109: break; ! 110: ! 111: case BMF_24BPP: ! 112: break; ! 113: ! 114: case BMF_32BPP: ! 115: break; ! 116: ! 117: default: ! 118: break; ! 119: } ! 120: } ! 121: } ! 122: } ! 123: } ! 124: ! 125: return(EngStretchBlt(psoDest, ! 126: psoSrc, ! 127: psoMask, ! 128: pco, ! 129: pxlo, ! 130: pca, ! 131: pptlBrushOrg, ! 132: prclDest, ! 133: prclSrc, ! 134: pptlMask, ! 135: iMode)); ! 136: } ! 137:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.