Home | History | Annotate | Download | only in font
      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_FONT_CPDF_TYPE3FONT_H_
      8 #define CORE_FPDFAPI_FONT_CPDF_TYPE3FONT_H_
      9 
     10 #include <map>
     11 #include <memory>
     12 
     13 #include "core/fpdfapi/font/cpdf_simplefont.h"
     14 #include "core/fxcrt/fx_coordinates.h"
     15 #include "core/fxcrt/fx_system.h"
     16 
     17 class CPDF_Dictionary;
     18 class CPDF_Type3Char;
     19 
     20 class CPDF_Type3Font : public CPDF_SimpleFont {
     21  public:
     22   CPDF_Type3Font();
     23   ~CPDF_Type3Font() override;
     24 
     25   // CPDF_Font:
     26   bool IsType3Font() const override;
     27   const CPDF_Type3Font* AsType3Font() const override;
     28   CPDF_Type3Font* AsType3Font() override;
     29   int GetCharWidthF(uint32_t charcode) override;
     30   FX_RECT GetCharBBox(uint32_t charcode) override;
     31 
     32   void SetPageResources(CPDF_Dictionary* pResources) {
     33     m_pPageResources = pResources;
     34   }
     35   CPDF_Type3Char* LoadChar(uint32_t charcode);
     36   void CheckType3FontMetrics();
     37 
     38   CFX_Matrix& GetFontMatrix() { return m_FontMatrix; }
     39 
     40  protected:
     41   CFX_Matrix m_FontMatrix;
     42 
     43  private:
     44   // CPDF_Font:
     45   bool Load() override;
     46 
     47   // CPDF_SimpleFont:
     48   void LoadGlyphMap() override;
     49 
     50   int m_CharWidthL[256];
     51   UnownedPtr<CPDF_Dictionary> m_pCharProcs;
     52   UnownedPtr<CPDF_Dictionary> m_pPageResources;
     53   UnownedPtr<CPDF_Dictionary> m_pFontResources;
     54   std::map<uint32_t, std::unique_ptr<CPDF_Type3Char>> m_CacheMap;
     55   // The depth char loading is in, to avoid recurive calling LoadChar().
     56   int m_CharLoadingDepth = 0;
     57 };
     58 
     59 #endif  // CORE_FPDFAPI_FONT_CPDF_TYPE3FONT_H_
     60