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.
 
 
 
 
 
 

410 lines
9.4 KiB

/******************************Module*Header*******************************\
* Module Name: drawattr.cxx
*
* Copyright (c) 1990-1999 Microsoft Corporation
\**************************************************************************/
#include "precomp.hxx"
extern DC_ATTR DcAttrDefault;
/******************************Public*Routine******************************\
* GreSetROP2
*
* Set the foreground mix mode. Return the old foreground mode or 0 if
* hdc is invalid.
*
* History:
* Thu 25-Nov-1993 -by- Patrick Haluptzok [patrickh]
* Smaller code.
*
* 28-Nov-1990 -by- Eric Kutter [erick]
* Wrote it.
\**************************************************************************/
ULONG GreSetROP2(HDC hdc,int iROP)
{
ULONG iOldROP = 0;
XDCOBJ dco(hdc);
if (dco.bValid())
{
iOldROP = dco.pdc->jROP2();
dco.pdc->jROP2((BYTE)iROP);
dco.vUnlockFast();
}
return(iOldROP);
}
/******************************Public*Routine******************************\
* GreGetBkColor
*
* Get the back ground color. Return CLR_INVALID if invalid hdc.
*
* History:
* Thu 25-Nov-1993 -by- Patrick Haluptzok [patrickh]
* Smaller code.
*
* 28-Nov-1990 -by- Eric Kutter [erick]
* Wrote it.
\**************************************************************************/
COLORREF GreGetBkColor(HDC hdc)
{
GDITraceHandle(GreGetBkColor, "(%X)\n", (va_list)&hdc, hdc);
COLORREF clrRet = CLR_INVALID;
XDCOBJ dco(hdc);
if (dco.bValid())
{
clrRet = dco.pdc->ulBackClr();
dco.vUnlockFast();
}
return(clrRet);
}
/******************************Public*Routine******************************\
* GreSetBkColor
*
* Set the back ground color.
*
* History:
* Thu 25-Nov-1993 -by- Patrick Haluptzok [patrickh]
* smaller, don't dirty brush unnecesarily.
*
* 28-Nov-1990 -by- Eric Kutter [erick]
* Wrote it.
\**************************************************************************/
COLORREF GreSetBkColor(HDC hdc,COLORREF cr)
{
GDITrace(GreSetBkColor, "(%X, %X)\n", (va_list)&hdc);
COLORREF crOld = CLR_INVALID;
XDCOBJ dco(hdc);
if (dco.bValid())
{
crOld = dco.pdc->ulBackClr();
dco.pdc->ulBackClr(cr);
cr &= 0x13ffffff;
if (cr != crOld)
{
dco.pdc->crBackClr(cr);
dco.pdc->ulDirtyAdd(DIRTY_FILL|DIRTY_LINE|DIRTY_BACKGROUND);
}
dco.vUnlockFast();
}
GDITrace(GreSetBkColor, " returns %X\n", (va_list)&crOld);
return(crOld);
}
/******************************Public*Routine******************************\
* GreSetGraphicsMode
*
* Set graphics mode to default or advanced.
*
* History:
* 3-11-94 -by- Lingyun Wang [lingyunw]
* moved client side attr to server side
*
* Thu 25-Nov-1993 -by- Patrick Haluptzok [patrickh]
* Smaller code.
*
* 19-Oct-1992 -by- Bodin Dresevic [BodinD]
* Wrote it.
\**************************************************************************/
int GreSetGraphicsMode(HDC hdc, int iMode)
{
ULONG ulModeOld = 0;
XDCOBJ dco(hdc);
if (dco.bValid())
{
ulModeOld = dco.pdc->iGraphicsMode();
if ((iMode == GM_COMPATIBLE) || (iMode == GM_ADVANCED))
{
dco.pdc->iGraphicsMode(iMode);
}
else
{
WARNING("GreSetGraphicsMode passed invalid mode");
}
dco.vUnlockFast();
}
return((int)ulModeOld);
}
/******************************Public*Routine******************************\
* GreGetBkMode
*
* Get the background mix mode.
*
* History:
*
* Thu 25-Nov-1993 -by- Patrick Haluptzok [patrickh]
* Smaller code.
*
* 28-Nov-1990 -by- Eric Kutter [erick]
* Wrote it.
\**************************************************************************/
int GreGetBkMode(HDC hdc)
{
ULONG ulRet = 0;
XDCOBJ dco(hdc);
if (dco.bValid())
{
ulRet = dco.pdc->lBkMode();
dco.vUnlockFast();
}
return((int)ulRet);
}
/******************************Public*Routine******************************\
* GreSetBkMode
*
* Set the background mix mode. This must be either OPAQUE or TRANSPARENT.
* If it is not one of these values or the hdc is invalid, return 0.
* If it is a valid mode, return the old mode in the dc.
*
* History:
* 3-Nov-1994 -by- Lingyun Wang [lingyunw]
* Moved client side BkMode to Server side
*
* Thu 25-Nov-1993 -by- Patrick Haluptzok [patrickh]
* Smaller code.
*
* 28-Nov-1990 -by- Eric Kutter [erick]
* Wrote it.
\**************************************************************************/
int GreSetBkMode(HDC hdc,int iBkMode)
{
ULONG ulBkModeOld = 0;
XDCOBJ dco(hdc);
if (dco.bValid())
{
ulBkModeOld = dco.pdc->lBkMode();
dco.pdc->lBkMode(iBkMode);
if ((iBkMode != OPAQUE) && (iBkMode != TRANSPARENT))
{
iBkMode = TRANSPARENT;
WARNING("ulBkModeOld passed bad mode\n");
}
dco.pdc->jBkMode((BYTE)iBkMode);
dco.vUnlockFast();
}
return((int)ulBkModeOld);
}
/******************************Public*Routine******************************\
* GreSetPolyFillMode
*
* Set the polyline fill mode to either ALTERNATE or WINDING. Any other
* value is invalid and causes an error to be returned. An error is also
* returned if hdc is invalid.
* If successful, return the old fill mode.
*
* History:
* Thu 25-Nov-1993 -by- Patrick Haluptzok [patrickh]
* Smaller code.
*
* 28-Nov-1990 -by- Eric Kutter [erick]
* Wrote it.
\**************************************************************************/
ULONG GreSetPolyFillMode(HDC hdc, int iPolyFillMode)
{
ULONG ulPolyFillModeOld = 0;
XDCOBJ dco(hdc);
if (dco.bValid())
{
ulPolyFillModeOld = dco.pdc->lFillMode();
dco.pdc->lFillMode(iPolyFillMode);
if (iPolyFillMode != WINDING)
{
iPolyFillMode = ALTERNATE;
WARNING("GreSetPolyFillMode passed bad mode");
}
dco.pdc->jFillMode((BYTE)iPolyFillMode);
dco.vUnlockFast();
}
return(ulPolyFillModeOld);
}
/******************************Public*Routine******************************\
* GreSetStretchBltMode
*
* Set the current stretch blt mode. iStretchMode must be one of:
* BLACKONWHITE
* COLORONCOLOR
* WHITEONBLACK
* HALFTONE
*
* If hdc is invalid or iStretchMode is not one of the above, 0 is returned.
* Otherwise, the old stretch blt mode value is returned.
*
* History:
* 3-11-94 -by- Lingyun Wang [lingyunw]
* Moved client side attr to server side
*
* Thu 25-Nov-1993 -by- Patrick Haluptzok [patrickh]
* Smaller code.
*
* Tue 28-May-1991 -by- Patrick Haluptzok [patrickh]
* fixed return value bug, rewrote to compile smaller by nesting
*
* 28-Nov-1990 -by- Eric Kutter [erick]
* Wrote it.
\**************************************************************************/
int GreSetStretchBltMode(HDC hdc, int iStretchMode)
{
ULONG ulStretchModeOld = 0;
XDCOBJ dco(hdc);
if (dco.bValid())
{
ulStretchModeOld = dco.pdc->lStretchBltMode();
dco.pdc->lStretchBltMode(iStretchMode);
if (iStretchMode > MAXSTRETCHBLTMODE)
{
iStretchMode = (DWORD) WHITEONBLACK;
WARNING("GreSetStretchBltMode passed bad mode");
}
dco.pdc->jStretchBltMode((BYTE)iStretchMode);
dco.vUnlockFast();
}
return((int)ulStretchModeOld);
}
/******************************Public*Routine******************************\
* GreGetTextColor
*
* Get the current text color.
*
* History:
* Thu 25-Nov-1993 -by- Patrick Haluptzok [patrickh]
* Smaller code.
*
* 28-Nov-1990 -by- Eric Kutter [erick]
* Wrote it.
\**************************************************************************/
COLORREF GreGetTextColor(HDC hdc)
{
COLORREF clr = CLR_INVALID;
XDCOBJ dco(hdc);
if (dco.bValid())
{
clr = dco.pdc->ulTextClr();
dco.vUnlockFast();
}
return(clr);
}
/******************************Public*Routine******************************\
* GreSetTextColor
*
* Set the current text color.
*
* History:
* Thu 25-Nov-1993 -by- Patrick Haluptzok [patrickh]
* Smaller code.
*
* 28-Nov-1990 -by- Eric Kutter [erick]
* Wrote it.
\**************************************************************************/
COLORREF GreSetTextColor(HDC hdc, COLORREF cr)
{
COLORREF crOld = CLR_INVALID;
XDCOBJ dco(hdc);
if (dco.bValid())
{
crOld = dco.pdc->ulTextClr();
dco.pdc->ulTextClr(cr);
cr &= 0x13ffffff;
if (cr != crOld)
{
dco.pdc->crTextClr(cr);
dco.pdc->ulDirtyAdd(DIRTY_FILL|DIRTY_LINE|DIRTY_TEXT);
}
dco.vUnlockFast();
}
return(crOld);
}
/******************************Public*Routine******************************\
* GreGetFillBrush
*
* Return the fill brush of the DC
*
* Arguments:
*
* hdc
*
* Return Value:
*
* hbrush or NULL
*
\**************************************************************************/
extern "C"
HBRUSH
GreGetFillBrush(HDC hdc)
{
HBRUSH hbrRet = NULL;
XDCOBJ dcobj(hdc);
if (dcobj.bValid())
{
hbrRet = (HBRUSH)(dcobj.pdc->pbrushFill())->hGet();
dcobj.vUnlockFast();
}
return(hbrRet);
}