/*+++ Copyright (c) 2000 Microsoft Corporation Module Name: xlgstate.h Abstract: Header file for vector graphics state management. Environment: Windows Whistler Revision History: 03/23/00 Created it. Note: 1. Line Store Windows NT DDI LINEATTRS sturcture information 2. Brush Brush type (pattern/solid/hatch) Hatch brush type Pattern brush ID Solid brush color 3. Clip Tracks the type of clipping (rectangle/complex). Clip rectangle 4. ROP3 or Transparent/Opaque if a printer supports quaternary raster operation, ---*/ #ifndef _XLGSTATE_H_ #define _XLGSTATE_H_ // // LINE // #ifdef __cplusplus typedef enum { kXLLineJoin_Round = JOIN_ROUND, kXLLineJoin_Bevel = JOIN_BEVEL, kXLLineJoin_Miter = JOIN_MITER } XLLineJoin; typedef enum { kXLLineType_LA_GEOMETRIC = LA_GEOMETRIC, kXLLineType_LA_ALTERNATE = LA_ALTERNATE, kXLLineType_LA_STARTGAP = LA_STARTGAP, kXLLineType_LA_STYLED = LA_STYLED } XLLineType; typedef enum { kXLLineEndCapRound = ENDCAP_ROUND, kXLLineEndCapSquare = ENDCAP_SQUARE, kXLLineEndCapButt = ENDCAP_BUTT } XLLineEndCap; class XLLine #if DBG : public XLDebug #endif { SIGNATURE( 'line' ) public: // // Constructure/Destructure // XLLine:: XLLine( VOID ); XLLine:: XLLine( IN LINEATTRS *plineattrs ); XLLine:: ~XLLine( VOID ); // typedef struct { // { // FLONG fl; // ULONG iJoin; // ULONG iEndCap; // FLOAT_LONG elWidth; // FLOATL eMiterLimit; // ULONG cstyle; // PFLOAT_LONG pstyle; // FLOAT_LONG elStyleState; // } LINEATTRS, *PLINEATTRS; #define XLLINE_NONE 0x00000000 #define XLLINE_LINETYPE 0x00000001 #define XLLINE_JOIN 0x00000002 #define XLLINE_ENDCAP 0x00000004 #define XLLINE_WIDTH 0x00000008 #define XLLINE_MITERLIMIT 0x00000010 #define XLLINE_STYLE 0x00000020 DWORD GetDifferentAttribute( IN LINEATTRS* plineattrs ); // // Reset line // VOID ResetLine(VOID); // // Attributes set functions // // // Line type // HRESULT SetLineType(IN XLLineType LineType ); // // Line Join // HRESULT SetLineJoin( IN XLLineJoin LineJoin ); // // Line Join // HRESULT SetLineEndCap( IN XLLineEndCap LineEndCap ); // // Line width // HRESULT SetLineWidth( IN FLOAT_LONG elWidth ); // // Line Miter Limit // HRESULT SetMiterLimit( IN FLOATL eMiterLimit ); // // Line style // HRESULT SetLineStyle( IN ULONG ulCStyle, IN PFLOAT_LONG pStyle, IN FLOAT_LONG elStyleState ); #if DBG VOID SetDbgLevel(DWORD dwLevel); #endif private: DWORD m_dwGenFlags; LINEATTRS m_LineAttrs; }; #endif // // Brush // #define BRUSH_SIGNATURE 0x48425658 // XBRH typedef enum { kNotInitialized, kNoBrush, kBrushTypeSolid, kBrushTypeHatch, kBrushTypePattern } BrushType; typedef struct { DWORD dwSig; // Signature BRUSH_SIGNATURE BrushType BrushType; // Brush type ULONG ulSolidColor; // BRUSHOBJ.iSolidColor ULONG ulHatch; // Hatch pattern ID DWORD dwCEntries; // the number of palette DWORD dwColor; // RGB from BRUSHOBJ_ulGetBrushColor DWORD dwPatternBrushID; // Pattern brush ID } CMNBRUSH, *PCMNBRUSH; #ifdef __cplusplus class Brush #if DBG : public XLDebug #endif { public: Brush:: Brush(VOID); Brush:: ~Brush(VOID); // // Current brush interface // HRESULT CheckCurrentBrush( IN BRUSHOBJ *pbo); // // Reset Brush // VOID ResetBrush(VOID); HRESULT SetBrush( IN CMNBRUSH *pbrush); #if DBG VOID SetDbgLevel(DWORD dwLevel); #endif private: // // Current selected brush // CMNBRUSH m_Brush; }; class XLBrush : public Brush { SIGNATURE( 'brsh' ) public: XLBrush:: XLBrush(VOID){}; XLBrush:: ~XLBrush(VOID){}; }; #endif // // XLPen // #ifdef __cplusplus class XLPen : public Brush { SIGNATURE( 'pen ' ) public: XLPen:: XLPen(VOID){}; XLPen:: ~XLPen(VOID){}; }; #endif // // XLClip // typedef enum { kNoClip = 0, kClipTypeRectangle, kClipTypeComplex } ClipType; #define CLIP_SIGNATURE 0x50494c43 // CLIP typedef struct { DWORD dwSig; // Signature CLIP_SIGNATURE RECTL rclClipRect; ULONG ulUniq; } UNICLIP, *PUNICLIP; #ifdef __cplusplus class XLClip #if DBG : public XLDebug #endif { SIGNATURE( 'clip' ) public: XLClip:: XLClip(VOID); XLClip:: ~XLClip(VOID); HRESULT ClearClip(VOID); HRESULT CheckClip( IN CLIPOBJ *pco ); HRESULT SetClip( IN CLIPOBJ *pco ); #if DBG VOID SetDbgLevel(DWORD dwLevel); #endif private: ClipType m_ClipType; UNICLIP m_XLClip; }; #endif // // XLRop // #ifdef __cplusplus class XLRop #if DBG : public XLDebug #endif { SIGNATURE( 'rop ' ) public: XLRop:: XLRop(VOID); XLRop:: ~XLRop(VOID); HRESULT CheckROP3( IN ROP3 rop3 ); HRESULT SetROP3( IN ROP3 rop3 ); #if DBG VOID SetDbgLevel(DWORD dwLevel); #endif private: ROP3 m_rop3; }; #endif // // XLFont // #ifndef PCLXL_FONTNAME_SIZE #define PCLXL_FONTNAME_SIZE 16 #endif #ifdef __cplusplus typedef enum _FontType { kFontNone, kFontTypeDevice, kFontTypeTTBitmap, kFontTypeTTOutline } FontType; class XLFont #if DBG : public XLDebug #endif { SIGNATURE( 'font' ) public: // // Constructure/Destructure // XLFont:: XLFont( VOID ); XLFont:: ~XLFont( VOID ); // // font interface // HRESULT CheckCurrentFont( FontType XLFontType, PBYTE pPCLXLFontName, DWORD dwFontHeight, DWORD dwFontWidth, DWORD dwFontSymbolSet, DWORD dwFontSimulation); HRESULT SetFont( FontType XLFontType, PBYTE pPCLXLFontName, DWORD dwFontHeight, DWORD dwFontWidth, DWORD dwFontSymbolSet, DWORD dwFontSimulation); VOID ResetFont(VOID); HRESULT GetFontName( PBYTE paubFontName); DWORD GetFontHeight(VOID); DWORD GetFontWidth(VOID); DWORD GetFontSymbolSet(VOID); FontType GetFontType(VOID); DWORD GetFontSimulation(VOID); #if DBG VOID SetDbgLevel(DWORD dwLevel); #endif private: FontType m_XLFontType; BYTE m_aubFontName[PCLXL_FONTNAME_SIZE+1]; // PCL XL font name DWORD m_dwFontHeight; DWORD m_dwFontWidth; DWORD m_dwFontSymbolSet; DWORD m_dwFontSimulation; }; #endif // // XLTxMode // class XLTxMode #if DBG : public XLDebug #endif { SIGNATURE( 'txmd' ) public: // // Constructure/Destructure // XLTxMode:: XLTxMode( VOID ); XLTxMode:: ~XLTxMode( VOID ); // // txmode interface // HRESULT SetSourceTxMode(TxMode SrcTxMode); HRESULT SetPaintTxMode(TxMode SrcTxMode); TxMode GetSourceTxMode(); TxMode GetPaintTxMode(); #if DBG VOID SetDbgLevel(DWORD dwLevel); #endif private: TxMode m_SourceTxMode; TxMode m_PaintTxMode; }; // // XLGState // typedef enum _PenBrush { kPen, kBrush } PenBrush; #ifdef __cplusplus class XLGState : public XLLine, public XLBrush, public XLPen, public XLClip, public XLRop, public XLFont, public XLTxMode { SIGNATURE( 'xlgs' ) public: XLGState:: XLGState( VOID ){}; XLGState:: ~XLGState( VOID ){}; VOID ResetGState(VOID); #if DBG VOID SetAllDbgLevel(DWORD dwLevel); #endif }; #endif #endif // _XLGSTATE_H_