Files
core/ASCOfficePDFReader/Graphics.h

293 lines
12 KiB
C++

#ifndef _GRAPHICS_H
#define _GRAPHICS_H
#include "GlobalParams.h"
class StringExt;
class XRef;
class Array;
class Stream;
class Parser;
class Dict;
class Function;
class OutputDev;
class GrFontDict;
class GrFont;
class GrPattern;
class GrTilingPattern;
class GrShadingPattern;
class GrShading;
class GrFunctionShading;
class GrAxialShading;
class GrRadialShading;
class GrGouraudTriangleShading;
class GrPatchMeshShading;
struct GrPatch;
class GrState;
struct GrColor;
class GrColorSpace;
class Graphics;
class PDFRectangle;
class AnnotBorderStyle;
//-------------------------------------------------------------------------------------------------------------------------------
enum GrClipType
{
clipNone,
clipNormal,
clipEO
};
enum ArgType
{
argBool, // Boolean
argInt, // Integer
argNum, // Number (integer or real)
argString, // String
argName, // Name
argArray, // Array
argProps, // Properties (Dictionary èëè Name)
argSCN, // scn/SCN
argNone // èñïîëüçóåòñÿ, ÷òîáû èçáåæàòü ïóñòûõ ïîëåé ïðè èíèöèàëèçàöèè
};
#define maxArgs 33
struct Operator
{
char sName[4];
int nArgumentsCount;
ArgType arrArguments[maxArgs];
void (Graphics::*pFunction)(Object pArgs[], int nArgsCount);
};
//-------------------------------------------------------------------------------------------------------------------------------
// GrResources
//-------------------------------------------------------------------------------------------------------------------------------
class GrResources
{
public:
GrResources(XRef *pXref, Dict *pResourcesDict, GrResources *pNext, GlobalParams *pGlobalParams);
~GrResources();
GrFont *LookupFont (char *sName);
BOOL LookupXObject (char *sName, Object *pObject);
BOOL LookupAndCopyXObject(char *sName, Object *pObject);
void LookupColorSpace (char *sName, Object *pObject);
GrPattern *LookupPattern (char *sName);
GrShading *LookupShading (char *sName);
BOOL LookupExtGState (char *sName, Object *pObject);
GrResources *GetNext()
{
return m_pNext;
}
private:
GrFontDict *m_pFonts;
Object m_oXObjectDict;
Object m_oColorSpaceDict;
Object m_oPatternDict;
Object m_oShadingDict;
Object m_oExtGStateDict;
GrResources *m_pNext;
GlobalParams *m_pGlobalParams;
};
//-------------------------------------------------------------------------------------------------------------------------------
// Graphics
//-------------------------------------------------------------------------------------------------------------------------------
class Graphics
{
public:
Graphics(GlobalParams *pGlobalParams, XRef *pXref, OutputDev *pOut, int nPageNumber, Dict *pResourcesDict, double dHorDPI, double dVerDPI, PDFRectangle *pBox, PDFRectangle *pCropBox, int nRotate, BOOL (*pAbortCheckCallBack)(void *pData) = NULL, void *pAbortCheckData = NULL);
Graphics(GlobalParams *pGlobalParams, XRef *pXref, OutputDev *pOut, Dict *pResourcesDict, PDFRectangle *pBox, PDFRectangle *pCropBox, BOOL (*pAbortCheckCallBack)(void *pData) = NULL, void *pAbortCheckData = NULL);
~Graphics();
// Èíèöèàëèçèðóåì Ïàðñåð ïî pObject, ïðåäâàðèòåëüíî ïðîâîäèì ïðîâåðêó: ßâëÿåòñÿ ëè pObject ïîòîêîì èëè ìàññèâîì ïîòîêîâ.
void Display(Object *pObject, BOOL bTopLevel = TRUE);
// Ðèñóåì annotation
void DrawAnnotation(Object *pStream, AnnotBorderStyle *pBorderStyle, double dMinX, double dMinY, double dMaxX, double dMaxY);
// Ñîõðàíÿåì GState.
void SaveGState();
// Âîññòàíàâëèâàåì ïðåäûäóùèé GState.
void RestoreGState();
// Ñ÷èòûâàåì òåêóùèé GState.
GrState *GetGState()
{
return m_pGState;
}
private:
void StartParse(BOOL bTopLevel);
void ExecuteOperator(Object *pCommand, Object arrArguments[], int nArgumentsCount);
Operator *FindOperator(char *sName);
BOOL CheckArgumentType(Object *pArgument, ArgType eType);
int GetPos();
// Graphics state
void OperatorSave (Object arrArguments[], int nArgumentsCount);
void OperatorRestore (Object arrArguments[], int nArgumentsCount);
void OperatorConcat (Object arrArguments[], int nArgumentsCount);
void OperatorSetDash (Object arrArguments[], int nArgumentsCount);
void OperatorSetFlat (Object arrArguments[], int nArgumentsCount);
void OperatorSetLineJoin (Object arrArguments[], int nArgumentsCount);
void OperatorSetLineCap (Object arrArguments[], int nArgumentsCount);
void OperatorSetMiterLimit (Object arrArguments[], int nArgumentsCount);
void OperatorSetLineWidth (Object arrArguments[], int nArgumentsCount);
void OperatorSetRenderingIntent(Object arrArguments[], int nArgumentsCount);
void OperatorSetExtGState (Object arrArguments[], int nArgumentsCount);
void MakeSoftMask(Object *pStream, BOOL bAlpha, GrColorSpace *pBlendingColorSpace, BOOL bIsolated, BOOL bKnockout, Function *pTransferFunc, GrColor *pBackdropColor);
// Colour spaces
void OperatorSetFillGray (Object arrArguments[], int nArgumentsCount);
void OperatorSetStrokeGray (Object arrArguments[], int nArgumentsCount);
void OperatorSetFillCMYKColor (Object arrArguments[], int nArgumentsCount);
void OperatorSetStrokeCMYKColor (Object arrArguments[], int nArgumentsCount);
void OperatorSetFillRGBColor (Object arrArguments[], int nArgumentsCount);
void OperatorSetStrokeRGBColor (Object arrArguments[], int nArgumentsCount);
void OperatorSetFillColorSpace (Object arrArguments[], int nArgumentsCount);
void OperatorSetStrokeColorSpace(Object arrArguments[], int nArgumentsCount);
void OperatorSetFillColor (Object arrArguments[], int nArgumentsCount);
void OperatorSetStrokeColor (Object arrArguments[], int nArgumentsCount);
void OperatorSetFillColorN (Object arrArguments[], int nArgumentsCount);
void OperatorSetStrokeColorN (Object arrArguments[], int nArgumentsCount);
// Path construction
void OperatorMoveTo (Object arrArguments[], int nArgumentsCount);
void OperatorLineTo (Object arrArguments[], int nArgumentsCount);
void OperatorCurveTo (Object arrArguments[], int nArgumentsCount);
void OperatorCurveTo1 (Object arrArguments[], int nArgumentsCount);
void OperatorCurveTo2 (Object arrArguments[], int nArgumentsCount);
void OperatorRectangle(Object arrArguments[], int nArgumentsCount);
void OperatorClosePath(Object arrArguments[], int nArgumentsCount);
// Path-painting
void OperatorEndPath (Object arrArguments[], int nArgumentsCount);
void OperatorStroke (Object arrArguments[], int nArgumentsCount);
void OperatorCloseStroke (Object arrArguments[], int nArgumentsCount);
void OperatorFill (Object arrArguments[], int nArgumentsCount);
void OperatorEOFill (Object arrArguments[], int nArgumentsCount);
void OperatorFillStroke (Object arrArguments[], int nArgumentsCount);
void OperatorCloseFillStroke (Object arrArguments[], int nArgumentsCount);
void OperatorEOFillStroke (Object arrArguments[], int nArgumentsCount);
void OperatorCloseEOFillStroke(Object arrArguments[], int nArgumentsCount);
void OperatorShadingFill (Object arrArguments[], int nArgumentsCount);
void DoPatternFill(BOOL bEOFill);
void DoPatternStroke();
void DoTilingPatternFill (GrTilingPattern *pPattern, BOOL bStroke, BOOL bEOFill);
void DoShadingPatternFill(GrShadingPattern *pPattern, BOOL bStroke, BOOL bEOFill);
void DoFunctionShadingFill(GrFunctionShading *pShading);
void DoFunctionShadingFill(GrFunctionShading *pShading, double dMinX, double dMinY, double dMaxX, double dMaxY, GrColor *pColors, int nDepth);
void DoAxialShadingFill (GrAxialShading *pShading);
void DoRadialShadingFill (GrRadialShading *pShading);
void DoGouraudTriangleShadingFill(GrGouraudTriangleShading *pShading);
void GouraudFillTriangle(double dAx, double dAy, GrColor *pColorA, double dBx, double dBy, GrColor *pColorB, double dCx, double dCy, GrColor *pColorC, int nComponentsCount, int nDepth);
void DoPatchMeshShadingFill(GrPatchMeshShading *pShading);
void MeshFillPatch(GrPatch *pPatch, int nComponentsCount, int nDepth);
void DoEndPath();
// Clipping paths
void OperatorClip (Object arrArguments[], int nArgumentsCount);
void OperatorEOClip(Object arrArguments[], int nArgumentsCount);
// Text objects
void OperatorBeginText(Object arrArguments[], int nArgumentsCount);
void OperatorEndText (Object arrArguments[], int nArgumentsCount);
// Text state
void OperatorSetCharSpacing (Object arrArguments[], int nArgumentsCount);
void OperatorSetFont (Object arrArguments[], int nArgumentsCount);
void OperatorSetTextLeading (Object arrArguments[], int nArgumentsCount);
void OperatorSetTextRender (Object arrArguments[], int nArgumentsCount);
void OperatorSetTextRise (Object arrArguments[], int nArgumentsCount);
void OperatorSetWordSpacing (Object arrArguments[], int nArgumentsCount);
void OperatorSetHorizScaling(Object arrArguments[], int nArgumentsCount);
// Text positioning
void OperatorTextMove (Object arrArguments[], int nArgumentsCount);
void OperatorTextMoveSet (Object arrArguments[], int nArgumentsCount);
void OperatorSetTextMatrix(Object arrArguments[], int nArgumentsCount);
void OperatorTextNextLine (Object arrArguments[], int nArgumentsCount);
// Text showing
void OperatorShowText (Object arrArguments[], int nArgumentsCount);
void OperatorMoveShowText (Object arrArguments[], int nArgumentsCount);
void OperatorMoveSetShowText(Object arrArguments[], int nArgumentsCount);
void OperatorShowSpaceText (Object arrArguments[], int nArgumentsCount);
void DoShowText(StringExt *seString);
// XObjects
void OperatorXObject(Object arrArguments[], int nArgumentsCount);
void DoImage(Object *pRef, Stream *pStream, BOOL bInlineImage);
void DoForm(Object *pStream);
void DoForm(Object *pStream, Dict *pResourcesDict, double *pMatrix, double *pBBox, BOOL bTranspGroup = FALSE, BOOL bSoftMask = FALSE, GrColorSpace *pBlendingColorSpace = NULL, BOOL bIsolated = FALSE, BOOL bKnockout = FALSE, BOOL bAlpha = FALSE, Function *pTransferFunctions = NULL, GrColor *pBackdropColor = NULL);
// Inline images
void OperatorBeginImage(Object arrArguments[], int nArgumentsCount);
void OperatorImageData (Object arrArguments[], int nArgumentsCount);
void OperatorEndImage (Object arrArguments[], int nArgumentsCount);
Stream *BuildImageStream();
// Type 3 fonts
void OperatorSetCharWidth (Object arrArguments[], int nArgumentsCount);
void OperatorSetCacheDevice(Object arrArguments[], int nArgumentsCount);
// Compatibility
void OperatorBeginIgnoreUndef(Object arrArguments[], int nArgumentsCount);
void OperatorEndIgnoreUndef (Object arrArguments[], int nArgumentsCount);
// Marked content
void OperatorBeginMarkedContent(Object arrArguments[], int nArgumentsCount);
void OperatorEndMarkedContent (Object arrArguments[], int nArgumentsCount);
void OperatorMarkPoint (Object arrArguments[], int nArgumentsCount);
void PushResources(Dict *pResourcesDict);
void PopResources();
private:
XRef *m_pXref; // Òàáëèöà Xref äëÿ äàííîãî PDF - äîêóìåíòà
OutputDev *m_pOut; // Output device
BOOL m_bSubPage; // Sub-page object?
BOOL m_bPrintCommands; // print the drawing commands (for debugging)
GrResources *m_pResources; // Resources
int m_nUpdateLevel;
GrState *m_pGState; // Òåêóùèé GState
BOOL m_bFontChanged; // True, åñëè øðèôò èëè òåêñòîâàÿ ìàòðèöà èçìåíèëèñü
GrClipType m_eClip; // Clip type
int m_nIgnoreUndef; // Òåêóùèé óðîâåíü âëîæåííîñòè äëÿ BX/EX
double m_arrBaseMatrix[6]; // Ñòàíäàðòíàÿ ìàòðèöà äëÿ ïîñëåäíèõ îáúåêòîâ Page/Form/Pattern
int m_nFormDepth;
Parser *m_pParser; // Ïàðñåð äëÿ ñîäåðæèìîãî ñòðàíèöû
BOOL (*m_pAbortCheckCallBack)(void *pData); // Ïðîâåðêà íà îòìåíó
void *m_pAbortCheckData;
static Operator OperatorsTable[]; // Òàáëèöà ãðàôè÷åñêèõ îïåðàòîðîâ
#ifdef _DEBUG
FILE *m_pDumpFile; // Ôàéë äëÿ ðàñïå÷àòêè êîìàíä, çàïèñàííûõ â PDF
#endif
GlobalParams *m_pGlobalParams;
};
#endif /* _GRAPHICS_H */