|
|
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.