mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-04-07 13:55:33 +08:00
197 lines
7.4 KiB
C++
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 */
|