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.
 
 
 
 
 
 

331 lines
7.5 KiB

/******************************Module*Header*******************************
* Module Name: icmobj.hxx
*
* This file contains the class prototypes for Color Space and ICM
* objects
*
* Created: 23-Mar-1994
* Author: Mark Enstrom (marke)
*
* Copyright (c) 1994-1999 Microsoft Corporation
*
\**************************************************************************/
#ifndef _ICMOBJ_HXX
#define _ICMOBJ_HXX
#if DBG
#define DBG_ICM 1
#else
#define DBG_ICM 0
#endif
/******************************Public*Class*******************************\
* class COLORSPACE
*
* COLORSPACE class
*
* Fields
*
* DWORD _lcsSignature;
* DWORD _lcsVersion;
* DWORD _lcsSize;
* LCSCSTYPE _lcsCSType;
* LCSGAMUTMATCH _lcsIntent;
* CIEXYZTRIPLE _lcsEndpoints;
* DWORD _lcsGammaRed;
* DWORD _lcsGammaGreen;
* DWORD _lcsGammaBlue;
* WCHAR _lcsFilename[MAX_PATH];
* DWORD _lcsExFlags;
*
* 23-Mar-1994
*
* Mark Enstrom (marke)
*
\**************************************************************************/
class COLORSPACE : public OBJECT
{
private:
DWORD _lcsSignature;
DWORD _lcsVersion;
DWORD _lcsSize;
LCSCSTYPE _lcsCSType;
LCSGAMUTMATCH _lcsIntent;
CIEXYZTRIPLE _lcsEndpoints;
DWORD _lcsGammaRed;
DWORD _lcsGammaGreen;
DWORD _lcsGammaBlue;
WCHAR _lcsFilename[MAX_PATH];
DWORD _lcsExFlags;
public:
VOID lcsSignature(DWORD lcsSig) {_lcsSignature = lcsSig;}
DWORD lcsSignature() {return(_lcsSignature);}
VOID lcsVersion(DWORD lcsVer) {_lcsVersion = lcsVer;}
DWORD lcsVersion() {return(_lcsVersion);}
VOID lcsSize(DWORD lcsSize) {_lcsSize = lcsSize;}
DWORD lcsSize() {return(_lcsSize);}
VOID lcsCSType(DWORD lcsCSType) {_lcsCSType = lcsCSType;}
DWORD lcsCSType() {return(_lcsCSType);}
VOID lcsIntent(DWORD lcsIntent) {_lcsIntent = lcsIntent;}
DWORD lcsIntent() {return(_lcsIntent);}
VOID lcsGammaRed(DWORD lcsRed) {_lcsGammaRed = lcsRed;}
DWORD lcsGammaRed() {return(_lcsGammaRed);}
VOID lcsGammaGreen(DWORD lcsGreen) {_lcsGammaGreen = lcsGreen;}
DWORD lcsGammaGreen() {return(_lcsGammaGreen);}
VOID lcsGammaBlue(DWORD lcsBlue) {_lcsGammaBlue = lcsBlue;}
DWORD lcsGammaBlue() {return(_lcsGammaBlue);}
VOID vSETlcsEndpoints(LPCIEXYZTRIPLE pcz) {_lcsEndpoints = *pcz;}
VOID vGETlcsEndpoints(LPCIEXYZTRIPLE pcz) {*pcz = _lcsEndpoints;}
VOID vSETlcsFilename(PWCHAR pwName,ULONG length)
{
memcpy(&_lcsFilename[0],pwName,length);
}
VOID vGETlcsFilename(PWCHAR pwName,ULONG length)
{
memcpy(pwName,&_lcsFilename[0],length);
}
VOID lcsExFlags(DWORD dwFlags)
{
_lcsExFlags = dwFlags;
}
DWORD lcsExFlags() {return(_lcsExFlags);}
//
// common features
//
HCOLORSPACE hColorSpace() { return((HCOLORSPACE) hGet()); }
};
typedef COLORSPACE *PCOLORSPACE;
/******************************Public*Class*******************************\
* class COLORSPACEREF
*
* COLORSPACE reference from pointer or handle
*
* 23-Mar-1994
*
* Mark Enstrom (marke)
*
\**************************************************************************/
class COLORSPACEREF
{
private:
PCOLORSPACE _pColorSpace;
public:
COLORSPACEREF()
{
_pColorSpace = (PCOLORSPACE)NULL;
}
COLORSPACEREF(HCOLORSPACE hColorSpace)
{
_pColorSpace = (PCOLORSPACE)HmgShareCheckLock((HOBJ)hColorSpace, ICMLCS_TYPE);
}
~COLORSPACEREF()
{
if (_pColorSpace != (PCOLORSPACE)NULL)
{
DEC_SHARE_REF_CNT(_pColorSpace);
}
}
BOOL bValid() {return(_pColorSpace != (PCOLORSPACE)NULL);}
PCOLORSPACE pColorSpace() {return(_pColorSpace);}
};
/******************************Public*Class*******************************\
* class COLORTRANSFORM
*
* COLORTRANSFORM class
*
\*************************************************************************/
class COLORTRANSFORM : public OBJECT
{
public:
//
// Color transform handle of driver's realization.
//
HANDLE _hDeviceColorTransform;
public:
//
// common features
//
HANDLE hColorTransform() { return((HANDLE) hGet()); }
};
typedef COLORTRANSFORM *PCOLORTRANSFORM;
/******************************Public*Class*******************************\
* class COLORTRANSFORMOBJ
*
* COLORTRANSFORM reference class
*
\*************************************************************************/
class COLORTRANSFORMOBJ
{
private:
PCOLORTRANSFORM _pColorTransform;
public:
COLORTRANSFORMOBJ()
{
_pColorTransform = (PCOLORTRANSFORM) NULL;
}
COLORTRANSFORMOBJ(HANDLE hColorTransform)
{
_pColorTransform = (PCOLORTRANSFORM) HmgShareCheckLock((HOBJ)hColorTransform, ICMCXF_TYPE);
}
~COLORTRANSFORMOBJ()
{
if (_pColorTransform != (PCOLORTRANSFORM) NULL)
{
DEC_SHARE_REF_CNT(_pColorTransform);
}
}
//
// Validation check
//
BOOL bValid()
{
return(_pColorTransform != (PCOLORTRANSFORM)NULL);
}
HANDLE hGetDeviceColorTransform()
{
return(_pColorTransform->_hDeviceColorTransform);
}
VOID vSetDeviceColorTransform(HANDLE h)
{
_pColorTransform->_hDeviceColorTransform = h;
}
HANDLE hCreate(XDCOBJ& dco, LOGCOLORSPACEW *pLogColorSpaceW,
PVOID pvSource, ULONG cjSource,
PVOID pvDestination, ULONG cjDestination,
PVOID pvTarget, ULONG cjTarget);
BOOL bDelete(XDCOBJ& dco,
BOOL bProcessCleanup = FALSE);
};
//
// Functions in icmapi.cxx
//
extern "C" {
BOOL
APIENTRY
GreSetColorSpace(
HDC hdc,
HCOLORSPACE hColorSpace
);
BOOL
WINAPI
GreGetDeviceGammaRamp(
HDC,
LPVOID
);
BOOL
WINAPI
GreGetDeviceGammaRampInternal(
HDEV,
LPVOID
);
BOOL
WINAPI
GreSetDeviceGammaRamp(
HDC,
LPVOID,
BOOL
);
BOOL
WINAPI
GreSetDeviceGammaRampInternal(
HDEV,
LPVOID,
BOOL
);
}
BOOL bDeleteColorSpace(HCOLORSPACE);
INT cjGetLogicalColorSpace(HANDLE,INT,LPVOID);
BOOL UpdateGammaRampOnDevice(HDEV,BOOL);
ULONG GetColorManagementCaps(PDEVOBJ&);
typedef struct _GAMMARAMP_ARRAY {
WORD Red[256];
WORD Green[256];
WORD Blue[256];
} GAMMARAMP_ARRAY, *PGAMMARAMP_ARRAY;
#if DBG_ICM
extern ULONG IcmDebugLevel;
#define ICMDUMP(s) \
if (IcmDebugLevel & 0x4) \
{ \
DbgPrint ## s; \
}
#define ICMMSG(s) \
if (IcmDebugLevel & 0x2) \
{ \
DbgPrint ## s; \
}
#define ICMAPI(s) \
if (IcmDebugLevel & 0x1) \
{ \
DbgPrint ## s; \
}
#else
#define ICMDUMP(s)
#define ICMMSG(s)
#define ICMAPI(s)
#endif // DBG
#endif