Home | History | Annotate | Download | only in page
      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_FPDFAPI_PAGE_CPDF_SHADINGPATTERN_H_
      8 #define CORE_FPDFAPI_PAGE_CPDF_SHADINGPATTERN_H_
      9 
     10 #include <memory>
     11 #include <vector>
     12 
     13 #include "core/fpdfapi/page/cpdf_countedobject.h"
     14 #include "core/fpdfapi/page/cpdf_pattern.h"
     15 #include "core/fxcrt/fx_system.h"
     16 
     17 enum ShadingType {
     18   kInvalidShading = 0,
     19   kFunctionBasedShading = 1,
     20   kAxialShading = 2,
     21   kRadialShading = 3,
     22   kFreeFormGouraudTriangleMeshShading = 4,
     23   kLatticeFormGouraudTriangleMeshShading = 5,
     24   kCoonsPatchMeshShading = 6,
     25   kTensorProductPatchMeshShading = 7,
     26   kMaxShading = 8
     27 };
     28 
     29 class CFX_Matrix;
     30 class CPDF_ColorSpace;
     31 class CPDF_Document;
     32 class CPDF_Function;
     33 class CPDF_Object;
     34 
     35 class CPDF_ShadingPattern : public CPDF_Pattern {
     36  public:
     37   CPDF_ShadingPattern(CPDF_Document* pDoc,
     38                       CPDF_Object* pPatternObj,
     39                       bool bShading,
     40                       const CFX_Matrix& parentMatrix);
     41   ~CPDF_ShadingPattern() override;
     42 
     43   CPDF_TilingPattern* AsTilingPattern() override;
     44   CPDF_ShadingPattern* AsShadingPattern() override;
     45 
     46   bool IsMeshShading() const {
     47     return m_ShadingType == kFreeFormGouraudTriangleMeshShading ||
     48            m_ShadingType == kLatticeFormGouraudTriangleMeshShading ||
     49            m_ShadingType == kCoonsPatchMeshShading ||
     50            m_ShadingType == kTensorProductPatchMeshShading;
     51   }
     52   bool Load();
     53 
     54   ShadingType GetShadingType() const { return m_ShadingType; }
     55   bool IsShadingObject() const { return m_bShadingObj; }
     56   CPDF_Object* GetShadingObject() const { return m_pShadingObj; }
     57   CPDF_ColorSpace* GetCS() const { return m_pCS; }
     58   const std::vector<std::unique_ptr<CPDF_Function>>& GetFuncs() const {
     59     return m_pFunctions;
     60   }
     61 
     62  private:
     63   ShadingType m_ShadingType;
     64   bool m_bShadingObj;
     65   CPDF_Object* m_pShadingObj;
     66 
     67   // Still keep |m_pCS| as some CPDF_ColorSpace (name object) are not managed
     68   // as counted objects. Refer to CPDF_DocPageData::GetColorSpace.
     69   CPDF_ColorSpace* m_pCS;
     70 
     71   CPDF_CountedColorSpace* m_pCountedCS;
     72   std::vector<std::unique_ptr<CPDF_Function>> m_pFunctions;
     73 };
     74 
     75 #endif  // CORE_FPDFAPI_PAGE_CPDF_SHADINGPATTERN_H_
     76