1 // Copyright 2016 PDFium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6 7 #ifndef CORE_FXGE_IFX_RENDERDEVICEDRIVER_H_ 8 #define CORE_FXGE_IFX_RENDERDEVICEDRIVER_H_ 9 10 #include "core/fxcrt/fx_system.h" 11 12 class CFX_DIBitmap; 13 class CFX_DIBSource; 14 class CFX_Font; 15 class CFX_GraphStateData; 16 class CFX_Matrix; 17 class CFX_PathData; 18 class CPDF_ShadingPattern; 19 class FXTEXT_CHARPOS; 20 class IFX_Pause; 21 struct FX_RECT; 22 23 class IFX_RenderDeviceDriver { 24 public: 25 virtual ~IFX_RenderDeviceDriver(); 26 27 virtual int GetDeviceCaps(int caps_id) const = 0; 28 virtual CFX_Matrix GetCTM() const; 29 30 virtual bool StartRendering(); 31 virtual void EndRendering(); 32 virtual void SaveState() = 0; 33 virtual void RestoreState(bool bKeepSaved) = 0; 34 35 virtual bool SetClip_PathFill(const CFX_PathData* pPathData, 36 const CFX_Matrix* pObject2Device, 37 int fill_mode) = 0; 38 virtual bool SetClip_PathStroke(const CFX_PathData* pPathData, 39 const CFX_Matrix* pObject2Device, 40 const CFX_GraphStateData* pGraphState); 41 virtual bool DrawPath(const CFX_PathData* pPathData, 42 const CFX_Matrix* pObject2Device, 43 const CFX_GraphStateData* pGraphState, 44 uint32_t fill_color, 45 uint32_t stroke_color, 46 int fill_mode, 47 int blend_type) = 0; 48 virtual bool SetPixel(int x, int y, uint32_t color); 49 virtual bool FillRectWithBlend(const FX_RECT* pRect, 50 uint32_t fill_color, 51 int blend_type); 52 virtual bool DrawCosmeticLine(FX_FLOAT x1, 53 FX_FLOAT y1, 54 FX_FLOAT x2, 55 FX_FLOAT y2, 56 uint32_t color, 57 int blend_type); 58 59 virtual bool GetClipBox(FX_RECT* pRect) = 0; 60 virtual bool GetDIBits(CFX_DIBitmap* pBitmap, int left, int top); 61 virtual CFX_DIBitmap* GetBackDrop(); 62 virtual bool SetDIBits(const CFX_DIBSource* pBitmap, 63 uint32_t color, 64 const FX_RECT* pSrcRect, 65 int dest_left, 66 int dest_top, 67 int blend_type) = 0; 68 virtual bool StretchDIBits(const CFX_DIBSource* pBitmap, 69 uint32_t color, 70 int dest_left, 71 int dest_top, 72 int dest_width, 73 int dest_height, 74 const FX_RECT* pClipRect, 75 uint32_t flags, 76 int blend_type) = 0; 77 virtual bool StartDIBits(const CFX_DIBSource* pBitmap, 78 int bitmap_alpha, 79 uint32_t color, 80 const CFX_Matrix* pMatrix, 81 uint32_t flags, 82 void*& handle, 83 int blend_type) = 0; 84 virtual bool ContinueDIBits(void* handle, IFX_Pause* pPause); 85 virtual void CancelDIBits(void* handle); 86 virtual bool DrawDeviceText(int nChars, 87 const FXTEXT_CHARPOS* pCharPos, 88 CFX_Font* pFont, 89 const CFX_Matrix* pObject2Device, 90 FX_FLOAT font_size, 91 uint32_t color); 92 virtual void* GetPlatformSurface() const; 93 virtual int GetDriverType() const; 94 virtual void ClearDriver(); 95 virtual bool DrawShading(const CPDF_ShadingPattern* pPattern, 96 const CFX_Matrix* pMatrix, 97 const FX_RECT& clip_rect, 98 int alpha, 99 bool bAlphaMode); 100 virtual bool SetBitsWithMask(const CFX_DIBSource* pBitmap, 101 const CFX_DIBSource* pMask, 102 int left, 103 int top, 104 int bitmap_alpha, 105 int blend_type); 106 #if defined _SKIA_SUPPORT_ || defined _SKIA_SUPPORT_PATHS_ 107 virtual void Flush(); 108 #endif 109 }; 110 111 #endif // CORE_FXGE_IFX_RENDERDEVICEDRIVER_H_ 112