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