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/fx_basic.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   FX_FLOAT r;
     27   FX_FLOAT g;
     28   FX_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 
     43   bool Load();
     44 
     45   bool CanReadFlag() const;
     46   bool CanReadCoords() const;
     47   bool CanReadColor() const;
     48 
     49   uint32_t ReadFlag();
     50   CFX_PointF ReadCoords();
     51   std::tuple<FX_FLOAT, FX_FLOAT, FX_FLOAT> ReadColor();
     52 
     53   bool ReadVertex(const CFX_Matrix& pObject2Bitmap,
     54                   CPDF_MeshVertex* vertex,
     55                   uint32_t* flag);
     56   bool ReadVertexRow(const CFX_Matrix& pObject2Bitmap,
     57                      int count,
     58                      CPDF_MeshVertex* vertex);
     59 
     60   CFX_BitStream* BitStream() { return &m_BitStream; }
     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   CPDF_Stream* const m_pShadingStream;
     70   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   FX_FLOAT m_xmin;
     78   FX_FLOAT m_xmax;
     79   FX_FLOAT m_ymin;
     80   FX_FLOAT m_ymax;
     81   FX_FLOAT m_ColorMin[kMaxComponents];
     82   FX_FLOAT m_ColorMax[kMaxComponents];
     83   CPDF_StreamAcc m_Stream;
     84   CFX_BitStream m_BitStream;
     85 };
     86 
     87 #endif  // CORE_FPDFAPI_PAGE_CPDF_MESHSTREAM_H_
     88