summaryrefslogtreecommitdiff
path: root/xfa/fde/fde_gedevice.h
blob: 3d14a0f8af2cd993056cd450f40659e68d228d68 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

#ifndef XFA_FDE_FDE_GEDEVICE_H_
#define XFA_FDE_FDE_GEDEVICE_H_

#include "core/fxge/include/fx_ge.h"
#include "xfa/fgas/crt/fgas_memory.h"

typedef struct FDE_HDEVICESTATE_ { void* pData; } * FDE_HDEVICESTATE;

class CFDE_Brush;
class CFDE_Path;
class CFDE_Pen;
class CFX_RenderDevice;
class IFX_Font;

class CFDE_RenderDevice : public CFX_Target {
 public:
  CFDE_RenderDevice(CFX_RenderDevice* pDevice, FX_BOOL bOwnerDevice);
  ~CFDE_RenderDevice();

  void Release() { delete this; }

  int32_t GetWidth() const;
  int32_t GetHeight() const;
  FDE_HDEVICESTATE SaveState();
  void RestoreState(FDE_HDEVICESTATE hState);
  FX_BOOL SetClipPath(const CFDE_Path* pClip);
  CFDE_Path* GetClipPath() const;
  FX_BOOL SetClipRect(const CFX_RectF& rtClip);
  const CFX_RectF& GetClipRect();

  FX_FLOAT GetDpiX() const;
  FX_FLOAT GetDpiY() const;

  FX_BOOL DrawImage(CFX_DIBSource* pDib,
                    const CFX_RectF* pSrcRect,
                    const CFX_RectF& dstRect,
                    const CFX_Matrix* pImgMatrix = NULL,
                    const CFX_Matrix* pDevMatrix = NULL);
  FX_BOOL DrawString(CFDE_Brush* pBrush,
                     IFX_Font* pFont,
                     const FXTEXT_CHARPOS* pCharPos,
                     int32_t iCount,
                     FX_FLOAT fFontSize,
                     const CFX_Matrix* pMatrix = NULL);
  FX_BOOL DrawBezier(CFDE_Pen* pPen,
                     FX_FLOAT fPenWidth,
                     const CFX_PointF& pt1,
                     const CFX_PointF& pt2,
                     const CFX_PointF& pt3,
                     const CFX_PointF& pt4,
                     const CFX_Matrix* pMatrix = NULL);
  FX_BOOL DrawCurve(CFDE_Pen* pPen,
                    FX_FLOAT fPenWidth,
                    const CFX_PointsF& points,
                    FX_BOOL bClosed,
                    FX_FLOAT fTension = 0.5f,
                    const CFX_Matrix* pMatrix = NULL);
  FX_BOOL DrawEllipse(CFDE_Pen* pPen,
                      FX_FLOAT fPenWidth,
                      const CFX_RectF& rect,
                      const CFX_Matrix* pMatrix = NULL);
  FX_BOOL DrawLines(CFDE_Pen* pPen,
                    FX_FLOAT fPenWidth,
                    const CFX_PointsF& points,
                    const CFX_Matrix* pMatrix = NULL);
  FX_BOOL DrawLine(CFDE_Pen* pPen,
                   FX_FLOAT fPenWidth,
                   const CFX_PointF& pt1,
                   const CFX_PointF& pt2,
                   const CFX_Matrix* pMatrix = NULL);
  FX_BOOL DrawPath(CFDE_Pen* pPen,
                   FX_FLOAT fPenWidth,
                   const CFDE_Path* pPath,
                   const CFX_Matrix* pMatrix = NULL);
  FX_BOOL DrawPolygon(CFDE_Pen* pPen,
                      FX_FLOAT fPenWidth,
                      const CFX_PointsF& points,
                      const CFX_Matrix* pMatrix = NULL);
  FX_BOOL DrawRectangle(CFDE_Pen* pPen,
                        FX_FLOAT fPenWidth,
                        const CFX_RectF& rect,
                        const CFX_Matrix* pMatrix = NULL);
  FX_BOOL FillClosedCurve(CFDE_Brush* pBrush,
                          const CFX_PointsF& points,
                          FX_FLOAT fTension = 0.5f,
                          const CFX_Matrix* pMatrix = NULL);
  FX_BOOL FillEllipse(CFDE_Brush* pBrush,
                      const CFX_RectF& rect,
                      const CFX_Matrix* pMatrix = NULL);
  FX_BOOL FillPath(CFDE_Brush* pBrush,
                   const CFDE_Path* pPath,
                   const CFX_Matrix* pMatrix = NULL);
  FX_BOOL FillPolygon(CFDE_Brush* pBrush,
                      const CFX_PointsF& points,
                      const CFX_Matrix* pMatrix = NULL);
  FX_BOOL FillRectangle(CFDE_Brush* pBrush,
                        const CFX_RectF& rect,
                        const CFX_Matrix* pMatrix = NULL);

  FX_BOOL DrawSolidString(CFDE_Brush* pBrush,
                          IFX_Font* pFont,
                          const FXTEXT_CHARPOS* pCharPos,
                          int32_t iCount,
                          FX_FLOAT fFontSize,
                          const CFX_Matrix* pMatrix);
  FX_BOOL DrawStringPath(CFDE_Brush* pBrush,
                         IFX_Font* pFont,
                         const FXTEXT_CHARPOS* pCharPos,
                         int32_t iCount,
                         FX_FLOAT fFontSize,
                         const CFX_Matrix* pMatrix);

 protected:
  FX_BOOL CreatePen(CFDE_Pen* pPen,
                    FX_FLOAT fPenWidth,
                    CFX_GraphStateData& graphState);

  CFX_RenderDevice* m_pDevice;
  CFX_RectF m_rtClip;
  FX_BOOL m_bOwnerDevice;
  FXTEXT_CHARPOS* m_pCharPos;
  int32_t m_iCharCount;
};

#endif  // XFA_FDE_FDE_GEDEVICE_H_