Files
core/ASCOfficePDFReader/OutputDevice.h

284 lines
10 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef _OUTPUT_DEVICE_H
#define _OUTPUT_DEVICE_H
#include "CharTypes.h"
#include "GlobalParams.h"
class StringExt;
class GrState;
class GrPath;
struct GrColor;
class GrColorSpace;
class GrImageColorMap;
class GrFunctionShading;
class GrAxialShading;
class GrRadialShading;
class Stream;
class Links;
class Link;
class Catalog;
class Page;
class Function;
//-------------------------------------------------------------------------------------------------------------------------------
// OutputDev
//-------------------------------------------------------------------------------------------------------------------------------
class OutputDev
{
public:
OutputDev() {}
virtual ~OutputDev() {}
//------ Информация о выходном устройстве
// True, если точка с координатой (0,0) находится в левом верхнем углу.
virtual BOOL UpSideDown() = 0;
// Вывод текста с помощью функции DrawChar() или DrawString()?
virtual BOOL UseDrawChar() = 0;
// Поддерживает ли данное устройство TilingPatternFill? Если нет, тогда
// TilingPatternFill будет рисоваться с помощью комбинации более простых
// графических примитивов.
virtual BOOL UseTilingPatternFill()
{
return FALSE;
}
// Поддерживает ли данное устройство FunctionShadedFill? Если нет, тогда данные
// Shaded fills будут заменены комбинацией более простых графических примитивов.
virtual BOOL UseFunctionalShadedFills()
{
return FALSE;
}
// Поддерживает ли данное устройство AxialShadedFill? Если нет, тогда данные
// Shaded fills будут заменены комбинацией более простых графических примитивов.
virtual BOOL UseAxialShadedFills()
{
return FALSE;
}
// Поддерживает ли данное устройство RadialShadedFill? Если нет, тогда данные
// Shaded fills будут заменены комбинацией более простых графических примитивов.
virtual BOOL UseRadialShadedFills()
{
return FALSE;
}
// Поддерживается ли DrawForm()?
virtual BOOL UseDrawForm()
{
return FALSE;
}
// Используем команду ClipToPath для клипа или команды Clip, EoClip, ClipToPathStroke
virtual BOOL UseClipTo()
{
return FALSE;
}
// Использует ли данное устройство методы BeginType3Char/EndType3Char?
// В противном случае тект в шрифте Type3 будет выводится с помощью
// функций DrawChar/DrawString.
virtual BOOL InterpretType3Chars() = 0;
// Поддерживается ли данным устройством что-нибудь кроме текста?
virtual BOOL NeedNonText()
{
return TRUE;
}
// Поддерживается ли данным устройствой одновременные обводка и заливка Path
virtual BOOL UseFillAndStroke()
{
return FALSE;
}
// В каком виде мы используем группу прозрачных объектов
virtual BOOL UseSimpleTransparentGroup()
{
return FALSE;
}
//------ Информация о выходном устройстве
// Устанавливаем стандартную матрицу преобразований.
virtual void SetDefaultCTM(double *pCTM);
// Проверяем, должна ли мы показывать данную часть страницы. Если возращаемое
// значение False, показ страницы прерывается. Как правило, OutputDev будет
// использовать дополнительные средства, чтобы показать страницу, прежде чем
// вернет значение False.
virtual BOOL CheckPageSlice(Page *pPage, double dHorDPI, double dVerDPI, int nRotate, BOOL bUseMediaBox, BOOL bCrop, int nSliceX, int nSliceY, int nSliceW, int nSliceH, BOOL bPrinting, Catalog *pCatalog, BOOL (*pAbortCheckCallBack)(void *pData) = NULL, void *pAbortCheckData = NULL)
{
return TRUE;
}
// Новая страница.
virtual void StartPage(int nPageNum, GrState *pGState) {}
// Конец страницы.
virtual void EndPage() {}
// Вывод содержимого страницы.
virtual void Dump() {}
// Остановка вывода
virtual BOOL IsStopped() { return FALSE ;}
//----- Системы координат (пользовательские и устройства)
// Конвертации
virtual void ConvertDeviceToUser(double dDevX, double dDevY, double *pdUserX, double *pdUserY);
virtual void ConvertUserToDevice(double dUserX, double dUserY, int *pnDevX, int *pnDevY);
double *GetDefaultCTM()
{
return m_arrDefaultCTM;
}
double *GetDefaultInvCTM()
{
return m_arrDefaultInvCTM;
}
//----- 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 dM11, double dM12, double dM21, double dM22, double dM31, double dM32) {}
virtual void UpdateLineDash(GrState *pGState) {}
virtual void UpdateFlatness(GrState *pGState) {}
virtual void UpdateLineJoin(GrState *pGState) {}
virtual void UpdateLineCap (GrState *pGtate) {}
virtual void UpdateMiterLimit(GrState *pGState) {}
virtual void UpdateLineWidth(GrState *pGState) {}
virtual void UpdateStrokeAdjust(GrState *pGState) {}
virtual void UpdateFillColorSpace(GrState *pGState) {}
virtual void UpdateStrokeColorSpace(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 UpdateFillOverprint(GrState *pGState) {}
virtual void UpdateStrokeOverprint(GrState *pGState) {}
virtual void UpdateTransfer(GrState *pGState) {}
//----- Изменение текстовых параметров
virtual void UpdateFont(GrState *pGState) {}
virtual void UpdateTextMatrix(GrState *pGState) {}
virtual void UpdateCharSpace(GrState *pGState) {}
virtual void UpdateRender(GrState *pGState) {}
virtual void UpdateRise(GrState *pGState) {}
virtual void UpdateWordSpace(GrState *pGState) {}
virtual void UpdateHorizScaling(GrState *pGState) {}
virtual void UpdateTextPos(GrState *pGState) {}
virtual void UpdateTextShift(GrState *pGState, double dShift) {}
//----- Рисование Path
virtual void Stroke(GrState *pGState) {}
virtual void Fill(GrState *pGState) {}
virtual void EoFill(GrState *pGState) {}
virtual void FillStroke(GrState *pGState) {}
virtual void EoFillStroke(GrState *pGState) {}
virtual void TilingPatternFill(GrState *pGState, Object *pStream, int nPaintType, Dict *pResourcesDict, double *pMatrix, double *pBBox, int nX0, int nY0, int nX1, int nY1, double dXStep, double dYStep) {}
virtual void StartTilingFill (GrState *pGState) {}
virtual void EndTilingFill () {}
virtual BOOL FunctionShadedFill(GrState *pGState, GrFunctionShading *pShading)
{
return FALSE;
}
virtual BOOL AxialShadedFill (GrState *pGState, GrAxialShading *pShading)
{
return FALSE;
}
virtual BOOL RadialShadedFill (GrState *pGState, GrRadialShading *pShading)
{
return FALSE;
}
virtual void StartShadedFill(GrState *pGState) {}
virtual void EndShadedFill () {}
//----- Path clipping
virtual void Clip(GrState *pGState) {}
virtual void ClipAttack(GrState *pGState) {}
virtual void EoClip(GrState *pGState) {}
virtual void ClipToStrokePath(GrState *pGState) {}
virtual void ClipToPath(GrState *pGState, GrPath *pPath, double *pMatrix, BOOL bEO) {}
//----- Вывод текста
virtual void BeginStringOperator(GrState *pGState) {}
virtual void EndStringOperator(GrState *pGState) {}
virtual void BeginString(GrState *pGState, StringExt *seString) {}
virtual void EndString(GrState *pGState) {}
virtual void DrawChar(GrState *pGState, double dX, double dY, double dDx, double dDy, double dOriginX, double dOriginY, CharCode nCode, int nBytesCount, Unicode *pnUnicode, int nUnLen) {}
virtual void DrawString(GrState *pGState, StringExt *seString) {}
virtual BOOL BeginType3Char(GrState *pGState, double dX, double dY, double dDx, double dDy, CharCode nCode, Unicode *pnUnicode, int nUnLen);
virtual void EndType3Char(GrState *pGState) {}
virtual void BegintTextObject(GrState *pGState){}
virtual void EndTextObject(GrState *pGState) {}
// begin/end commands
virtual void BeginCommand(const ULONG& lCommand){}
virtual void EndCommand(const ULONG& lCommand) {}
// detect support futures
virtual bool IsSupportFuture(const CString& sName){ return false; }
virtual void SetAdditionalParam(const CString& sName, VARIANT& var) {}
//----- Вывод картинок
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 *pnMaskColors, BOOL bInlineImage);
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);
#if OPI_SUPPORT
//----- OPI
virtual void OpiBegin(GrState *pGState, Dict *pOpiDict);
virtual void OpiEnd (GrState *pGState, Dict *pOpiDict);
#endif
//----- Операторы Type 3 - шрифтов
virtual void Type3D0(GrState *pGState, double dWx, double dWy) {}
virtual void Type3D1(GrState *pGState, double dWx, double dWy, double dLLx, double dLLy, double dURx, double dURy) {}
//----- Form XObjects
virtual void DrawForm(Ref oID) {}
//----- PostScript XObjects
virtual void PSXObject(Stream *pPSStream, Stream *pLevel1Stream) {}
//----- 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 *pTransferFunction, GrColor *pBackdropColor) {}
virtual void ClearSoftMask(GrState *pGState) {}
//----- Links
virtual void ProcessLink(Link *pLink, Catalog *pCatalog) {}
virtual BOOL GetVectorAntialias()
{
return FALSE;
}
virtual void SetVectorAntialias(BOOL bVectorAntiAlias) {}
private:
double m_arrDefaultCTM[6]; // Матрица преобразования по умолчанию
double m_arrDefaultInvCTM[6]; // Обратная матрица
protected:
GlobalParams *m_pGlobalParams;
};
#endif /* _OUTPUT_DEVICE_H */