Files
core/ASCOfficePDFReader/ImageOutputDev.h

197 lines
7.4 KiB
C++

#ifndef _SIMAGE_OUTPUTDEV_H
#define _SIMAGE_OUTPUTDEV_H
#include "STypes.h"
#include "OutputDevice.h"
#include "GState.h"
class Gr8BitFont;
class SBitmap;
class SImage;
class SPath;
class SPattern;
class SFontEngine;
class SFont;
class T3FontCache;
struct T3FontCacheTag;
struct T3GlyphStack;
struct TransparencyGroup;
//-------------------------------------------------------------------------------------------------------------------------------
// ěŕęńčěŕëüíűé đŕçěĺđ ęýřŕ äë˙ őđŕíĺíč˙ Type3-řđčôňîâ
#define T3FontCacheSize 8
//-------------------------------------------------------------------------------------------------------------------------------
// SImageOutputDev
//-------------------------------------------------------------------------------------------------------------------------------
class SImageOutputDev: public OutputDev
{
public:
SImageOutputDev(GlobalParams *pGlobalaParams, SColorMode eColorMode, int nBitmapRowPad, BOOL bReverseVideo, SColorPointer pPaperColor, BOOL nBitmapTopDown = TRUE, BOOL bAllowAA = TRUE);
virtual ~SImageOutputDev();
virtual BOOL UpSideDown()
{
return TRUE;
}
virtual BOOL UseDrawChar()
{
return TRUE;
}
virtual BOOL InterpretType3Chars()
{
return TRUE;
}
//---------------------------------------------------------------------------------------------------------------------------
virtual void StartPage(int nPageIndex, GrState *pGState);
virtual void EndPage();
//----- Save/Restore GState
virtual void SaveGState(GrState *pGState);
virtual void RestoreGState(GrState *pGState);
//----- Čçěĺíĺíčĺ ďŕđŕěĺňđîâ â GState
virtual void UpdateAll(GrState *pGState);
virtual void UpdateCTM(GrState *pGState, double dMatrix11, double dMatrix12, double dMatrix21, double dMatrix22, double dMatrix31, double dMatrix32);
virtual void UpdateLineDash(GrState *pGState);
virtual void UpdateFlatness(GrState *pGState);
virtual void UpdateLineJoin(GrState *pGState);
virtual void UpdateLineCap(GrState *pGState);
virtual void UpdateMiterLimit(GrState *pGState);
virtual void UpdateLineWidth(GrState *pGState);
virtual void UpdateStrokeAdjust(GrState *pGState);
virtual void UpdateFillColor(GrState *pGState);
virtual void UpdateStrokeColor(GrState *pGState);
virtual void UpdateBlendMode(GrState *pGState);
virtual void UpdateFillOpacity(GrState *pGState);
virtual void UpdateStrokeOpacity(GrState *pGState);
//----- Čçěĺíĺíčĺ ňĺęńňîâűő ďŕđŕěĺňđîâ
virtual void UpdateFont(GrState *pGState);
//----- Đčńîâŕíčĺ Path
virtual void Stroke(GrState *pGState);
virtual void Fill(GrState *pGState);
virtual void EoFill(GrState *pGState);
//----- Path clipping
virtual void Clip(GrState *pGState);
virtual void EoClip(GrState *pGState);
virtual void ClipToStrokePath(GrState *pGState);
//----- Âűâîä ňĺęńňŕ
virtual void DrawChar(GrState *pGState, double dX, double dY, double dDx, double dDy, double dOriginX, double dOriginY, CharCode nCode, int nBytesCount, Unicode *pUnicode, int nUnicodeLen);
virtual BOOL BeginType3Char(GrState *pGState, double dX, double dY, double dDx, double dDy, CharCode nCode, Unicode *pUnicode, int nUnicodeLen);
virtual void EndType3Char(GrState *pGState);
virtual void EndTextObject(GrState *pGState);
//----- Îďĺđŕňîđű Type 3 - řđčôňîâ
virtual void Type3D0(GrState *pGState, double dWx, double dWy);
virtual void Type3D1(GrState *pGState, double dWx, double dWy, double dBLx, double dBLy, double dTRx, double dTRy);
//----- Âűâîä ęŕđňčíîę
virtual void DrawImageMask(GrState *pGState, Object *pRef, Stream *pStream, int nWidth, int nHeight, BOOL bInvert, BOOL bInlineImage);
virtual void DrawImage(GrState *pGState, Object *pRef, Stream *pStream, int nWidth, int nHeight, GrImageColorMap *pColorMap, int *pMaskColors, BOOL inlineImg);
virtual void DrawMaskedImage(GrState *pGState, Object *pRef, Stream *pStream, int nWidth, int nHeight, GrImageColorMap *pColorMap, Stream *pMaskStream, int nMaskWidth, int nMaskHeight, BOOL bMaskInvert);
virtual void DrawSoftMaskedImage(GrState *pGState, Object *pRef, Stream *pStream, int nWidth, int nHeight, GrImageColorMap *pColorMap, Stream *pMaskStream, int nMaskWidth, int nMaskHeight, GrImageColorMap *pMaskColorMap);
//----- Transparency groups č SMasks
virtual void BeginTransparencyGroup(GrState *pGState, double *pBBox, GrColorSpace *pBlendingColorSpace, BOOL bIsolated, BOOL bKnockout, BOOL bForSoftMask);
virtual void EndTransparencyGroup(GrState *pGState);
virtual void PaintTransparencyGroup(GrState *pGState, double *pBBox);
virtual void SetSoftMask(GrState *pGState, double *pBBox, BOOL bAlpha, Function *pTransferFunc, GrColor *pBackdropColor);
virtual void ClearSoftMask(GrState *pGState);
//----- Äîďîëíčňĺëüíűĺ ôóíęöčč äë˙ äŕííîăî óńňđîéńňâŕ
// Ýňó ôóíęöčţ íóćíî âűçâŕňü, ÷ňîáű îáîçíŕ÷čňü, ÷ňî áűë îňęđűň íîâűé PDF-äîęóěĺíň.
void NewPDF(XRef *pXref);
void SetPaperColor(SColorPointer pPaperColor);
BOOL IsReverseVideo()
{
return m_bReverseVideo;
}
void SetReverseVideo(BOOL bReverseVideo)
{
m_bReverseVideo = bReverseVideo;
}
SBitmap *GetBitmap()
{
return m_pBitmap;
}
int GetBitmapWidth();
int GetBitmapHeight();
SBitmap *TakeBitmap();
SImage *GetSImage()
{
return m_pSImage;
}
void GetModRegion(int *pnMinX, int *pnMinY, int *pnMaxX, int *pnMaxY);
void ClearModRegion();
void SetFillColor(int nR, int nG, int nB);
SFont *GetFont(StringExt *seName, double *pTextMatrix);
SFont *GetCurrentFont()
{
return m_pFont;
}
virtual BOOL GetVectorAntialias();
virtual void SetVectorAntialias(BOOL bVectorAA);
private:
void SetupScreenParams(double dHorDPI, double dVerDPI);
SPattern *GetColor(GrGray oGray, GrRGB *pRGB);
SPath *ConvertPath(GrState *pGState, GrPath *pPath);
void DoUpdateFont(GrState *pGState);
void DrawType3Glyph(T3FontCache *pT3Font, T3FontCacheTag *pT3Tag, unsigned char *pData);
static BOOL ImageMaskSrc (void *pData, SColorPointer pColorLine);
static BOOL ImageSrc (void *pData, SColorPointer pColorLine, unsigned char *pAlphaLine);
static BOOL AlphaImageSrc (void *pData, SColorPointer pColorLine, unsigned char *pAlphaLine);
static BOOL MaskedImageSrc(void *pData, SColorPointer pColorLine, unsigned char *pAlphaLine);
private:
SColorMode m_eColorMode; // Îńíîâíŕ˙ öâĺňîâŕ˙ ěîäĺëü
int m_nBitmapRowPad; //
BOOL m_bBitmapTopDown; // Ęŕđňčíęŕ čäĺň ńâĺđőó âíčç?
BOOL m_bAllowAA; //
BOOL m_bVectorAA; //
BOOL m_bReverseVideo; // Reverse video mode
SColor m_pPaperColor; // Öâĺň áóěŕăč(ďîäëîćęč/çŕäíĺăî ôîíŕ)
SScreenParams m_pScreenParams; // Ďŕđŕěĺňđű ýęđŕíŕ (đŕçěĺđ ďčęńĺë˙, ďîđîă áĺëîăî/÷ĺđíîăî öâĺňîâ č ň.ä.)
XRef *m_pXref; // Ňŕáëčöŕ Xref äë˙ äŕííîăî PDF-äîęóěĺíňŕ
SBitmap *m_pBitmap; // Îńíîâíîé Áčňěŕď, íŕ ęîňîđîě ěű âńĺ đčńóĺňń˙
SImage *m_pSImage; // Îńíîâíîé îáúĺęň äë˙ đčńîâŕíč˙
SFontEngine *m_pFontEngine; // Îáúĺęň äë˙ đŕçáîđŕ ôîíňîâ
T3FontCache *m_pT3FontCache[T3FontCacheSize]; // Ęýř ńî řđčôňŕěč ňčďŕ Type 3
int m_nT3FontsCount; // Ęîëč÷ĺńňâî äîńňóďíűő řđčôňîâ čç m_pT3FontCache
T3GlyphStack *m_pT3GlyphStack; // Ńňĺę ń ńčěâîëŕěč äë˙ Type3-řđčôňŕ
SFont *m_pFont; // Ňĺęóůčé řđčôň
BOOL m_bNeedFontUpdate; // Ĺńëč True, ňîăäŕ ňĺęóůčé řđčôň íóćíî îáíîâčňü
SPath *m_pTextClipPath; // Clipping path ( ďîńňđîĺííűé ďî ňĺęńňó )
TransparencyGroup *m_pTranspGroupStack; // Ńňĺę Transparency group
};
#endif /* _SIMAGE_OUTPUTDEV_H */