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 XFA_FXGRAPHICS_CXFA_GESHADING_H_
8 #define XFA_FXGRAPHICS_CXFA_GESHADING_H_
9 
10 #include "core/fxcrt/fx_coordinates.h"
11 #include "core/fxcrt/fx_system.h"
12 #include "core/fxge/fx_dib.h"
13 
14 #define FX_SHADING_Steps 256
15 
16 enum CXFA_GEShading_Type { FX_SHADING_Axial = 1, FX_SHADING_Radial };
17 
18 class CXFA_GEShading final {
19  public:
20   // Axial shading.
21   CXFA_GEShading(const CFX_PointF& beginPoint,
22                  const CFX_PointF& endPoint,
23                  bool isExtendedBegin,
24                  bool isExtendedEnd,
25                  const FX_ARGB beginArgb,
26                  const FX_ARGB endArgb);
27 
28   // Radial shading.
29   CXFA_GEShading(const CFX_PointF& beginPoint,
30                  const CFX_PointF& endPoint,
31                  const float beginRadius,
32                  const float endRadius,
33                  bool isExtendedBegin,
34                  bool isExtendedEnd,
35                  const FX_ARGB beginArgb,
36                  const FX_ARGB endArgb);
37 
38   ~CXFA_GEShading();
39 
40  private:
41   friend class CXFA_Graphics;
42 
43   void InitArgbArray();
44 
45   const CXFA_GEShading_Type m_type;
46   const CFX_PointF m_beginPoint;
47   const CFX_PointF m_endPoint;
48   const float m_beginRadius;
49   const float m_endRadius;
50   const bool m_isExtendedBegin;
51   const bool m_isExtendedEnd;
52   const FX_ARGB m_beginArgb;
53   const FX_ARGB m_endArgb;
54   FX_ARGB m_argbArray[FX_SHADING_Steps];
55 };
56 
57 #endif  // XFA_FXGRAPHICS_CXFA_GESHADING_H_
58