1 // Copyright 2014 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 _FDE_RENDERDEVICE 8 #define _FDE_RENDERDEVICE 9 class IFDE_Pen; 10 class IFDE_Brush; 11 class IFDE_Image; 12 class CFX_DIBitmap; 13 class CFX_DIBSource; 14 15 typedef struct _FDE_HDEVICESTATE { void* pData; } * FDE_HDEVICESTATE; 16 17 class IFDE_RenderDevice { 18 public: 19 static IFDE_RenderDevice* Create(CFX_DIBitmap* pBitmap, 20 FX_BOOL bRgbByteOrder = FALSE); 21 static IFDE_RenderDevice* Create(CFX_RenderDevice* pDevice); ~IFDE_RenderDevice()22 virtual ~IFDE_RenderDevice() {} 23 virtual void Release() = 0; 24 25 virtual int32_t GetWidth() const = 0; 26 virtual int32_t GetHeight() const = 0; 27 virtual FDE_HDEVICESTATE SaveState() = 0; 28 virtual void RestoreState(FDE_HDEVICESTATE hState) = 0; 29 virtual FX_BOOL SetClipPath(const IFDE_Path* pClip) = 0; 30 virtual IFDE_Path* GetClipPath() const = 0; 31 virtual FX_BOOL SetClipRect(const CFX_RectF& rtClip) = 0; 32 virtual const CFX_RectF& GetClipRect() = 0; 33 34 virtual FX_FLOAT GetDpiX() const = 0; 35 virtual FX_FLOAT GetDpiY() const = 0; 36 37 virtual FX_BOOL DrawImage(CFX_DIBSource* pDib, 38 const CFX_RectF* pSrcRect, 39 const CFX_RectF& dstRect, 40 const CFX_Matrix* pImgMatrix = NULL, 41 const CFX_Matrix* pDevMatrix = NULL) = 0; 42 virtual FX_BOOL DrawString(IFDE_Brush* pBrush, 43 IFX_Font* pFont, 44 const FXTEXT_CHARPOS* pCharPos, 45 int32_t iCount, 46 FX_FLOAT fFontSize, 47 const CFX_Matrix* pMatrix = NULL) = 0; 48 virtual FX_BOOL DrawBezier(IFDE_Pen* pPen, 49 FX_FLOAT fPenWidth, 50 const CFX_PointF& pt1, 51 const CFX_PointF& pt2, 52 const CFX_PointF& pt3, 53 const CFX_PointF& pt4, 54 const CFX_Matrix* pMatrix = NULL) = 0; 55 virtual FX_BOOL DrawCurve(IFDE_Pen* pPen, 56 FX_FLOAT fPenWidth, 57 const CFX_PointsF& points, 58 FX_BOOL bClosed, 59 FX_FLOAT fTension = 0.5f, 60 const CFX_Matrix* pMatrix = NULL) = 0; 61 virtual FX_BOOL DrawEllipse(IFDE_Pen* pPen, 62 FX_FLOAT fPenWidth, 63 const CFX_RectF& rect, 64 const CFX_Matrix* pMatrix = NULL) = 0; 65 virtual FX_BOOL DrawLines(IFDE_Pen* pPen, 66 FX_FLOAT fPenWidth, 67 const CFX_PointsF& points, 68 const CFX_Matrix* pMatrix = NULL) = 0; 69 virtual FX_BOOL DrawLine(IFDE_Pen* pPen, 70 FX_FLOAT fPenWidth, 71 const CFX_PointF& pt1, 72 const CFX_PointF& pt2, 73 const CFX_Matrix* pMatrix = NULL) = 0; 74 virtual FX_BOOL DrawPath(IFDE_Pen* pPen, 75 FX_FLOAT fPenWidth, 76 const IFDE_Path* pPath, 77 const CFX_Matrix* pMatrix = NULL) = 0; 78 virtual FX_BOOL DrawPolygon(IFDE_Pen* pPen, 79 FX_FLOAT fPenWidth, 80 const CFX_PointsF& points, 81 const CFX_Matrix* pMatrix = NULL) = 0; 82 virtual FX_BOOL DrawRectangle(IFDE_Pen* pPen, 83 FX_FLOAT fPenWidth, 84 const CFX_RectF& rect, 85 const CFX_Matrix* pMatrix = NULL) = 0; 86 virtual FX_BOOL FillClosedCurve(IFDE_Brush* pBrush, 87 const CFX_PointsF& points, 88 FX_FLOAT fTension = 0.5f, 89 const CFX_Matrix* pMatrix = NULL) = 0; 90 virtual FX_BOOL FillEllipse(IFDE_Brush* pBrush, 91 const CFX_RectF& rect, 92 const CFX_Matrix* pMatrix = NULL) = 0; 93 virtual FX_BOOL FillPath(IFDE_Brush* pBrush, 94 const IFDE_Path* pPath, 95 const CFX_Matrix* pMatrix = NULL) = 0; 96 virtual FX_BOOL FillPolygon(IFDE_Brush* pBrush, 97 const CFX_PointsF& points, 98 const CFX_Matrix* pMatrix = NULL) = 0; 99 virtual FX_BOOL FillRectangle(IFDE_Brush* pBrush, 100 const CFX_RectF& rect, 101 const CFX_Matrix* pMatrix = NULL) = 0; 102 }; 103 #endif 104