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