#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 */