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.
 
 
 
 
 
 

646 lines
13 KiB

/*++
Copyright (c) 2000 Microsoft Corporation
Module Name:
xloutput.h
Abstract:
PCL XL low level output
Environment:
Windows Whistler
Revision History:
03/23/00
Created it.
--*/
#ifndef _XLOUTPUT_H_
#define _XLOUTPUT_H_
#define RECT_WIDTH(pRect) ((pRect)->right - (pRect)->left)
#define RECT_HEIGHT(pRect) ((pRect)->bottom - (pRect)->top)
#define GET_FOREGROUND_ROP3(rop4) ((rop4) & 0xFF)
#define GET_BACKGROUND_ROP3(rop4) (((rop4) >> 8) & 0xFF)
#define ROP3_NEED_PATTERN(rop3) (((rop3 >> 4) & 0x0F) != (rop3 & 0x0F))
#define ROP3_NEED_SOURCE(rop3) (((rop3 >> 2) & 0x33) != (rop3 & 0x33))
#define ROP3_NEED_DEST(rop3) (((rop3 >> 1) & 0x55) != (rop3 & 0x55))
//
// PCLXL number type
//
typedef BYTE ubyte;
typedef WORD uint16;
typedef SHORT sint16;
typedef DWORD uint32;
typedef LONG sint32;
typedef DWORD real32;
class XLWrite
#if DBG
: public XLDebug
#endif
{
SIGNATURE( 'xlwr' )
public:
XLWrite::
XLWrite();
XLWrite::
~XLWrite();
inline
HRESULT
WriteByte(BYTE ubData);
inline
HRESULT
Write(PBYTE pData, DWORD dwSize);
inline
HRESULT
XLWrite::
WriteFloat(
real32 real32_value);
HRESULT
Flush(PDEVOBJ pdevobj);
HRESULT
Delete(VOID);
#if DBG
VOID
SetDbgLevel(DWORD dwLevel);
#endif
private:
HRESULT
IncreaseBuffer(DWORD dwAdditionalDataSize);
#define XLWrite_INITSIZE 2048
#define XLWrite_ADDSIZE 2048
PBYTE m_pBuffer;
PBYTE m_pCurrentPoint;
DWORD m_dwBufferSize;
DWORD m_dwCurrentDataSize;
};
typedef enum XLCmd {
eBeginSession = 0x41,
eEndSession = 0x42,
eBeginPage = 0x43,
eEndPage = 0x44,
eComment = 0x47,
eOpenDataSource = 0x48,
eCloseDataSource = 0x49,
eBeginFontHeader = 0x4f,
eReadFontHeader = 0x50,
eEndFontHeader = 0x51,
eBeginChar = 0x52,
eReadChar = 0x53,
eEndChar = 0x54,
eRemoveFont = 0x55,
eSetCharAttributes= 0x56,
eBeginStream = 0x5b,
eReadStream = 0x5c,
eEndStream = 0x5d,
eExecStream = 0x5e,
ePopGS = 0x60,
ePushGS = 0x61,
eSetClipReplace = 0x62,
eSetBrushSource = 0x63,
eSetCharAngle = 0x64,
eSetCharScale = 0x65,
eSetCharShear = 0x66,
eSetClipIntersect = 0x67,
eSetClipRectangle = 0x68,
eSetClipToPage = 0x69,
eSetColorSpace = 0x6a,
eSetCursor = 0x6b,
eSetCursorRel = 0x6c,
eSetHalftoneMethod = 0x6d,
eSetFillMode = 0x6e,
eSetFont = 0x6f,
eSetLineDash = 0x70,
eSetLineCap = 0x71,
eSetLineJoin = 0x72,
eSetMiterLimit = 0x73,
eSetPageDefaultCTM = 0x74,
eSetPageOrigin = 0x75,
eSetPageRotation = 0x76,
eSetPageScale = 0x77,
eSetPatternTxMode = 0x78,
eSetPenSource = 0x79,
eSetPenWidth = 0x7a,
eSetROP = 0x7b,
eSetSourceTxMode = 0x7c,
eSetCharBoldValue = 0x7d,
eSetClipMode = 0x7f,
eSetPathToClip = 0x80,
eSetCharSubMode = 0x81,
eCloseSubPath = 0x84,
eNewPath = 0x85,
ePaintPath = 0x86,
eArcPath = 0x91,
eBezierPath = 0x93,
eBezierRelPath = 0x95,
eChord = 0x96,
eChordPath = 0x97,
eEllipse = 0x98,
eEllipsePath = 0x99,
eLinePath = 0x9b,
eLineRelPath = 0x9d,
ePie = 0x9e,
ePiePath = 0x9f,
eRectangle = 0xa0,
eRectanglePath = 0xa1,
eRoundRectangle = 0xa2,
eRoundRectanglePath = 0xa3,
eText = 0xa8,
eTextPath = 0xa9,
eBeginImage = 0xb0,
eReadImage = 0xb1,
eEndImage = 0xb2,
eBeginRastPattern = 0xb3,
eReadRastPattern = 0xb4,
eEndRastPattern = 0xb5,
eBeginScan = 0xb6,
eEndScan = 0xb8,
eScanLineRel = 0xb9
};
//
// Note: It is necessary to initialize HatchBrushAvailability when creating
// XLOutput.
//
// BUGBUG: Brush management object has to be implemented
//
class XLGState;
class XLOutput: public XLWrite,
public XLGState
{
SIGNATURE( 'tolx' )
public:
XLOutput::
XLOutput(VOID);
XLOutput::
~XLOutput(VOID);
//
// Set scaling factor
//
DWORD
GetResolutionForBrush();
VOID
SetResolutionForBrush(DWORD dwRes);
//
// Set device color depth (color/monochrome)
//
HRESULT
SetDeviceColorDepth(ColorDepth DeviceColorDepth);
ColorDepth
GetDeviceColorDepth(VOID);
//
// HatchBrushAvailability set/get functions
//
VOID
SetHatchBrushAvailability(
DWORD dwHatchBrushAvailability);
DWORD
GetHatchBrushAvailability(
VOID);
//
// Command
//
HRESULT
Send_cmd(XLCmd Cmd);
HRESULT
Send_attr_ubyte(Attribute Attr);
HRESULT
Send_attr_uint16(Attribute Attr);
//
// Number
//
HRESULT
Send_ubyte(ubyte ubyte_data);
HRESULT
Send_ubyte_xy(ubyte ubyte_x, ubyte ubyte_y);
HRESULT
Send_ubyte_box(ubyte ubyte_left, ubyte ubyte_top, ubyte ubyte_right, ubyte ubyte_bottom);
HRESULT
Send_ubyte_array_header(DWORD dwArrayNum);
HRESULT
Send_uint16(uint16 uint16_data);
HRESULT
Send_uint16_xy(uint16 uint16_x, uint16 uint16_y);
HRESULT
Send_uint16_box(uint16 uint16_left, uint16 uint16_top, uint16 uint16_right, uint16 uint16_bottom);
HRESULT
Send_uint16_array_header(DWORD dwArrayNum);
HRESULT
Send_uint32(uint32 uint32_data);
HRESULT
Send_uint32_xy(uint32 uint32_x, uint32 uint32_y);
HRESULT
Send_uint32_box(uint32 uint32_left, uint32 uint32_top, uint32 uint32_right, uint32 uint32_bottom);
HRESULT
Send_uint32_array_header(DWORD dwArrayNum);
HRESULT
Send_sint16(sint16 sint16_data);
HRESULT
Send_sint16_xy(sint16 sint16_x, sint16 sint16_y);
HRESULT
Send_sint16_box(sint16 sint16_left, sint16 sint16_top, sint16 sint16_right, sint16 sint16_bottom);
HRESULT
Send_sint16_array_header(DWORD dwArrayNum);
HRESULT
Send_sint32(sint32 sint32_data);
HRESULT
Send_sint32_xy(sint32 sint32_x, sint32 sint32_y);
HRESULT
Send_sint32_box(sint32 sint32_left, sint32 sint32_top, sint32 sint32_right, sint32 sint32_bottom);
HRESULT
Send_sint32_array_header(DWORD dwArrayNum);
HRESULT
Send_real32(real32 real32_data);
HRESULT
Send_real32_xy(real32 real32_x, real32 real32_y);
HRESULT
Send_real32_box(real32 real32_left, real32 real32_top, real32 real32_right, real32 real32_bottom);
HRESULT
Send_real32_array_header(DWORD dwArrayNum);
//
// Attribute
//
HRESULT
SetArcDirection(ArcDirection value);
HRESULT
SetCharSubModeArray(CharSubModeArray value);
HRESULT
SetClipMode(ClipMode value);
HRESULT
SetClipRegion(ClipRegion value);
HRESULT
SetColorDepth(ColorDepth value);
HRESULT
SetColorimetricColorSpace(ColorimetricColorSpace value);
HRESULT
SetColorMapping(ColorMapping value);
HRESULT
SetColorSpace(ColorSpace value);
HRESULT
SetCompressMode(CompressMode value);
HRESULT
SetDataOrg(DataOrg value);
#if 0
HRESULT
SetDataSource(DataSource value);
#endif
#if 0
HRESULT
SetDataType(DataType value);
#endif
#if 0
HRESULT
SetDitherMatrix(DitherMatrix value);
#endif
HRESULT
SetDuplexPageMode(DuplexPageMode value);
HRESULT
SetDuplexPageSide(DuplexPageSide value);
HRESULT
SetErrorReport(ErrorReport value);
HRESULT
SetFillMode(FillMode value);
HRESULT
SetLineCap(LineCap value);
HRESULT
SetLineJoin(LineJoin value);
HRESULT
SetMiterLimit(uint16 uint16_miter);
HRESULT
SetMeasure(Measure value);
HRESULT
SetMediaSize(MediaSize value);
HRESULT
SetMediaSource(MediaSource value);
HRESULT
SetMediaDestination(MediaDestination value);
HRESULT
SetOrientation(Orientation value);
HRESULT
SetPatternPersistence(PatternPersistence value);
HRESULT
SetSimplexPageMode(SimplexPageMode value);
HRESULT
SetTxMode(TxMode value);
#if 0
HRESULT
SetWritingMode(WritingMode value);
#endif
//
// Number/value set function
//
HRESULT
XLOutput::
SetSourceWidth(
uint16 srcwidth);
HRESULT
XLOutput::
SetSourceHeight(
uint16 srcheight);
HRESULT
XLOutput::
SetDestinationSize(
uint16 dstwidth,
uint16 dstheight);
HRESULT
SetBoundingBox(
sint16 left,
sint16 top,
sint16 right,
sint16 bottom);
HRESULT
SetBoundingBox(
uint16 left,
uint16 top,
uint16 right,
uint16 bottom);
HRESULT
SetROP3(ROP3 rop3);
HRESULT
SetGrayLevel(ubyte ubyte_gray);
HRESULT
SetRGBColor(uint32 uint32_RGB);
HRESULT
SetPatternDefineID(
sint16 sint16_patternid);
HRESULT
SetPaletteDepth(
ColorDepth value);
HRESULT
SetPaletteData(
ColorDepth value,
DWORD dwPaletteNum,
DWORD *pdwColorTable);
HRESULT
SetPenWidth(
uint16 uint16_penwidth);
HRESULT
SetPageOrigin(
uint16 uint16_x,
uint16 uint16_y);
HRESULT
SetPageAngle(
sint16 suint16_Angle);
HRESULT
SetPageScale(
real32 real32_x,
real32 real32_y);
//
// High level function
//
HRESULT
BeginImage(
ColorMapping CMapping,
ULONG ulOutputBPP,
ULONG ulSrcWidth,
ULONG ulSrcHeight,
ULONG ulDestWidth,
ULONG ulDestHeight);
HRESULT
XLOutput::
SetOutputBPP(
ColorMapping CMapping,
ULONG ulOutputBPP);
HRESULT
XLOutput::
SetPalette(
ULONG ulOutputBPP,
DWORD dwCEntries,
DWORD *pdwColor);
HRESULT
SetClip(
CLIPOBJ *pco);
HRESULT
RoundRectanglePath(
RECTL *prclBounds);
HRESULT
SetCursor(
LONG lX,
LONG lY);
HRESULT
ReadImage(
DWORD dwBlockHeight,
CompressMode CMode);
HRESULT
ReadImage(
DWORD dwStartBlock,
DWORD dwBlockHeight,
CompressMode CMode);
HRESULT
ReadRasterPattern(
DWORD dwBlockHeight,
CompressMode CMode);
HRESULT
RectanglePath(RECTL *prclRect);
HRESULT
BezierPath(POINTFIX *pptfx, LONG lPoints);
HRESULT
LinePath(POINTFIX *pptfx, LONG lPoints);
HRESULT
Path(PATHOBJ *ppo);
HRESULT
Paint(VOID);
HRESULT
SetBrush(BRUSHOBJ *pbo,
POINTL *pptlBrushOrg);
HRESULT
SetPen(
LINEATTRS *plineattrs,
XFORMOBJ *pxo);
HRESULT
SetPenColor(
BRUSHOBJ *pbo,
POINTL *pptlBrushOrg);
inline
VOID
SetupBrush(
BRUSHOBJ *pbo,
POINTL *pptlBrushOrg,
CMNBRUSH *pcmnbrush);
HRESULT
SetFont(
FontType fonttype,
PBYTE pFontName,
DWORD dwFontHeight,
DWORD dwFontWidth,
DWORD dwSymbolSet,
DWORD dwSimulation);
#define XLOUTPUT_FONTSIM_BOLD 0x00000001
#define XLOUTPUT_FONTSIM_ITALIC 0x00000002
#define XLOUTPUT_FONTSIM_VERTICAL 0x00000004
HRESULT
SetSourceTxMode(TxMode SrcTxMode);
HRESULT
SetPaintTxMode(TxMode PaintTxMode);
//
// Helper function
//
HRESULT
GetCursorPos(
PLONG plx,
PLONG ply);
//
// Set cursor offset value
//
HRESULT
SetCursorOffset(
LONG lX,
LONG lY);
#if DBG
VOID SetOutputDbgLevel(DWORD dwLevel);
VOID SetGStateDbgLevel(DWORD dwLevel);
#endif
private:
#define HORIZONTAL_AVAILABLE 0x00000001
#define VERTICAL_AVAILABLE 0x00000002
#define BDIAGONAL_AVAILABLE 0x00000004
#define FDIAGONAL_AVAILABLE 0x00000008
#define CROSS_AVAILABLE 0x00000010
#define DIAGCROSS_AVAILABLE 0x00000020
DWORD m_dwHatchBrushAvailability;
DWORD m_dwResolution;
ColorDepth m_DeviceColorDepth;
ULONG m_lX;
ULONG m_lY;
ULONG m_lOffsetX;
ULONG m_lOffsetY;
#if DBG
DWORD m_dbglevel;
DWORD m_dwNumber;
#endif
};
#endif // _XLOUTPUT_H_