1ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Copyright 2014 PDFium Authors. All rights reserved.
2ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Use of this source code is governed by a BSD-style license that can be
3ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// found in the LICENSE file.
4ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
5ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
7ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifndef _FDE_RENDERDEVICE
8ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define _FDE_RENDERDEVICE
9ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass IFDE_Pen;
10ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass IFDE_Brush;
11ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass IFDE_Image;
12ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CFX_DIBitmap;
13ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CFX_DIBSource;
14ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
15ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmanntypedef struct _FDE_HDEVICESTATE { void* pData; } * FDE_HDEVICESTATE;
16ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
17ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass IFDE_RenderDevice {
18ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public:
19ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static IFDE_RenderDevice* Create(CFX_DIBitmap* pBitmap,
20ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                   FX_BOOL bRgbByteOrder = FALSE);
21ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static IFDE_RenderDevice* Create(CFX_RenderDevice* pDevice);
22ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual ~IFDE_RenderDevice() {}
23ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual void Release() = 0;
24ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
25ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual int32_t GetWidth() const = 0;
26ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual int32_t GetHeight() const = 0;
27ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FDE_HDEVICESTATE SaveState() = 0;
28ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual void RestoreState(FDE_HDEVICESTATE hState) = 0;
29ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_BOOL SetClipPath(const IFDE_Path* pClip) = 0;
30ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual IFDE_Path* GetClipPath() const = 0;
31ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_BOOL SetClipRect(const CFX_RectF& rtClip) = 0;
32ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual const CFX_RectF& GetClipRect() = 0;
33ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
34ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_FLOAT GetDpiX() const = 0;
35ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_FLOAT GetDpiY() const = 0;
36ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
37ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_BOOL DrawImage(CFX_DIBSource* pDib,
38ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                            const CFX_RectF* pSrcRect,
39ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                            const CFX_RectF& dstRect,
40ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                            const CFX_Matrix* pImgMatrix = NULL,
41ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                            const CFX_Matrix* pDevMatrix = NULL) = 0;
42ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_BOOL DrawString(IFDE_Brush* pBrush,
43ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                             IFX_Font* pFont,
44ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                             const FXTEXT_CHARPOS* pCharPos,
45ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                             int32_t iCount,
46ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                             FX_FLOAT fFontSize,
47ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                             const CFX_Matrix* pMatrix = NULL) = 0;
48ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_BOOL DrawBezier(IFDE_Pen* pPen,
49ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                             FX_FLOAT fPenWidth,
50ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                             const CFX_PointF& pt1,
51ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                             const CFX_PointF& pt2,
52ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                             const CFX_PointF& pt3,
53ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                             const CFX_PointF& pt4,
54ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                             const CFX_Matrix* pMatrix = NULL) = 0;
55ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_BOOL DrawCurve(IFDE_Pen* pPen,
56ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                            FX_FLOAT fPenWidth,
57ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                            const CFX_PointsF& points,
58ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                            FX_BOOL bClosed,
59ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                            FX_FLOAT fTension = 0.5f,
60ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                            const CFX_Matrix* pMatrix = NULL) = 0;
61ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_BOOL DrawEllipse(IFDE_Pen* pPen,
62ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                              FX_FLOAT fPenWidth,
63ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                              const CFX_RectF& rect,
64ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                              const CFX_Matrix* pMatrix = NULL) = 0;
65ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_BOOL DrawLines(IFDE_Pen* pPen,
66ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                            FX_FLOAT fPenWidth,
67ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                            const CFX_PointsF& points,
68ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                            const CFX_Matrix* pMatrix = NULL) = 0;
69ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_BOOL DrawLine(IFDE_Pen* pPen,
70ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                           FX_FLOAT fPenWidth,
71ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                           const CFX_PointF& pt1,
72ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                           const CFX_PointF& pt2,
73ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                           const CFX_Matrix* pMatrix = NULL) = 0;
74ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_BOOL DrawPath(IFDE_Pen* pPen,
75ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                           FX_FLOAT fPenWidth,
76ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                           const IFDE_Path* pPath,
77ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                           const CFX_Matrix* pMatrix = NULL) = 0;
78ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_BOOL DrawPolygon(IFDE_Pen* pPen,
79ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                              FX_FLOAT fPenWidth,
80ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                              const CFX_PointsF& points,
81ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                              const CFX_Matrix* pMatrix = NULL) = 0;
82ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_BOOL DrawRectangle(IFDE_Pen* pPen,
83ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                FX_FLOAT fPenWidth,
84ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                const CFX_RectF& rect,
85ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                const CFX_Matrix* pMatrix = NULL) = 0;
86ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_BOOL FillClosedCurve(IFDE_Brush* pBrush,
87ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                  const CFX_PointsF& points,
88ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                  FX_FLOAT fTension = 0.5f,
89ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                  const CFX_Matrix* pMatrix = NULL) = 0;
90ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_BOOL FillEllipse(IFDE_Brush* pBrush,
91ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                              const CFX_RectF& rect,
92ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                              const CFX_Matrix* pMatrix = NULL) = 0;
93ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_BOOL FillPath(IFDE_Brush* pBrush,
94ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                           const IFDE_Path* pPath,
95ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                           const CFX_Matrix* pMatrix = NULL) = 0;
96ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_BOOL FillPolygon(IFDE_Brush* pBrush,
97ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                              const CFX_PointsF& points,
98ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                              const CFX_Matrix* pMatrix = NULL) = 0;
99ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_BOOL FillRectangle(IFDE_Brush* pBrush,
100ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                const CFX_RectF& rect,
101ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                const CFX_Matrix* pMatrix = NULL) = 0;
102ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann};
103ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif
104