Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

92 lines
2.8 KiB

/******************************Module*Header**********************************\
*
* *******************
* * GDI SAMPLE CODE *
* *******************
*
* Module Name: paint.c
*
* Content: DrvPaint support
*
* Copyright (c) 1994-1999 3Dlabs Inc. Ltd. All rights reserved.
* Copyright (c) 1995-2003 Microsoft Corporation. All rights reserved.
\*****************************************************************************/
#include "precomp.h"
/******************************Public*Data*********************************\
* MIX translation table
*
* Translates a mix 1-16, into an old style Rop 0-255.
*
\**************************************************************************/
BYTE gaMix[] =
{
0xFF, // R2_WHITE - Allow rop = gaMix[mix & 0x0F]
0x00, // R2_BLACK
0x05, // R2_NOTMERGEPEN
0x0A, // R2_MASKNOTPEN
0x0F, // R2_NOTCOPYPEN
0x50, // R2_MASKPENNOT
0x55, // R2_NOT
0x5A, // R2_XORPEN
0x5F, // R2_NOTMASKPEN
0xA0, // R2_MASKPEN
0xA5, // R2_NOTXORPEN
0xAA, // R2_NOP
0xAF, // R2_MERGENOTPEN
0xF0, // R2_COPYPEN
0xF5, // R2_MERGEPENNOT
0xFA, // R2_MERGEPEN
0xFF // R2_WHITE - Allow rop = gaMix[mix & 0xFF]
};
/******************************Public*Routine******************************\
* BOOL DrvPaint
*
\**************************************************************************/
BOOL DrvPaint(
SURFOBJ* pso,
CLIPOBJ* pco,
BRUSHOBJ* pbo,
POINTL* pptlBrush,
MIX mix)
{
BOOL bRet;
ROP4 rop4;
rop4 = ((MIX) gaMix[mix >> 8] << 8) | gaMix[mix & 0xf];
// Since our DrvFillPath routine handles almost all fills, DrvPaint
// won't get called all that much (mainly via PaintRgn, FillRgn, or
// complex clipped polygons). As such, we save some code and simply
// punt to DrvBitBlt:
DISPDBG((DBGLVL, "DrvPaint: calling DrvBitBlt"));
if (rop4 == 0x5555)
{
// special processing for Invert
bRet = DrvBitBlt(pso, // Dst
pso, // Src
NULL, // Mask
pco, // Clip
NULL, // pxlo
&pco->rclBounds, // Bounding Dest rect
(POINTL*)(&pco->rclBounds), // Source point
NULL, // Mask point
NULL, // Brush
NULL, // brush origin
0x3333); // not src
}
else
{
bRet = DrvBitBlt(pso, NULL, NULL, pco, NULL, &pco->rclBounds, NULL,
NULL, pbo, pptlBrush, rop4);
}
return(bRet);
}