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_MESHSTREAM_H_
      8 #define CORE_FPDFAPI_PAGE_CPDF_MESHSTREAM_H_
      9 
     10 #include <memory>
     11 #include <tuple>
     12 #include <vector>
     13 
     14 #include "core/fpdfapi/page/cpdf_shadingpattern.h"
     15 #include "core/fpdfapi/parser/cpdf_stream_acc.h"
     16 #include "core/fxcrt/cfx_bitstream.h"
     17 #include "core/fxcrt/fx_system.h"
     18 
     19 class CPDF_MeshVertex {
     20  public:
     21   CPDF_MeshVertex();
     22   CPDF_MeshVertex(const CPDF_MeshVertex&);
     23   ~CPDF_MeshVertex();
     24 
     25   CFX_PointF position;
     26   float r;
     27   float g;
     28   float b;
     29 };
     30 
     31 class CFX_Matrix;
     32 class CPDF_ColorSpace;
     33 class CPDF_Function;
     34 class CPDF_Stream;
     35 
     36 class CPDF_MeshStream {
     37  public:
     38   CPDF_MeshStream(ShadingType type,
     39                   const std::vector<std::unique_ptr<CPDF_Function>>& funcs,
     40                   CPDF_Stream* pShadingStream,
     41                   CPDF_ColorSpace* pCS);
     42   ~CPDF_MeshStream();
     43 
     44   bool Load();
     45 
     46   bool CanReadFlag() const;
     47   bool CanReadCoords() const;
     48   bool CanReadColor() const;
     49 
     50   uint32_t ReadFlag();
     51   CFX_PointF ReadCoords();
     52   std::tuple<float, float, float> ReadColor();
     53 
     54   bool ReadVertex(const CFX_Matrix& pObject2Bitmap,
     55                   CPDF_MeshVertex* vertex,
     56                   uint32_t* flag);
     57   std::vector<CPDF_MeshVertex> ReadVertexRow(const CFX_Matrix& pObject2Bitmap,
     58                                              int count);
     59 
     60   CFX_BitStream* BitStream() { return m_BitStream.get(); }
     61   uint32_t ComponentBits() const { return m_nComponentBits; }
     62   uint32_t Components() const { return m_nComponents; }
     63 
     64  private:
     65   static const uint32_t kMaxComponents = 8;
     66 
     67   const ShadingType m_type;
     68   const std::vector<std::unique_ptr<CPDF_Function>>& m_funcs;
     69   UnownedPtr<CPDF_Stream> const m_pShadingStream;
     70   UnownedPtr<CPDF_ColorSpace> const m_pCS;
     71   uint32_t m_nCoordBits;
     72   uint32_t m_nComponentBits;
     73   uint32_t m_nFlagBits;
     74   uint32_t m_nComponents;
     75   uint32_t m_CoordMax;
     76   uint32_t m_ComponentMax;
     77   float m_xmin;
     78   float m_xmax;
     79   float m_ymin;
     80   float m_ymax;
     81   float m_ColorMin[kMaxComponents];
     82   float m_ColorMax[kMaxComponents];
     83   RetainPtr<CPDF_StreamAcc> m_pStream;
     84   std::unique_ptr<CFX_BitStream> m_BitStream;
     85 };
     86 
     87 #endif  // CORE_FPDFAPI_PAGE_CPDF_MESHSTREAM_H_
     88