| // Copyright 2026 The PDFium Authors | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #ifndef CORE_FPDFAPI_FONT_CPDF_FACEBASEDSIMPLEFONT_H_ | |
| #define CORE_FPDFAPI_FONT_CPDF_FACEBASEDSIMPLEFONT_H_ | |
| #include <stdint.h> | |
| #include <array> | |
| #include "core/fpdfapi/font/cpdf_fontencoding.h" | |
| #include "core/fpdfapi/font/cpdf_simplefont.h" | |
| #include "core/fxcrt/fx_coordinates.h" | |
| #include "core/fxcrt/retain_ptr.h" | |
| class CPDF_Document; | |
| class CPDF_Dictionary; | |
| // Base class for simple fonts backed by a font face (e.g. Type1, TrueType). | |
| // Note that Type3 fonts are the only non-face based simple font. | |
| class CPDF_FaceBasedSimpleFont : public CPDF_SimpleFont { | |
| public: | |
| ~CPDF_FaceBasedSimpleFont() override; | |
| // CPDF_Font: | |
| int GetCharWidth(uint32_t charcode) override; | |
| FX_RECT GetCharBBox(uint32_t charcode) override; | |
| int GlyphFromCharCode(uint32_t charcode, bool* pVertGlyph) override; | |
| bool HasFontWidths() const override; | |
| protected: | |
| CPDF_FaceBasedSimpleFont(CPDF_Document* document, | |
| RetainPtr<CPDF_Dictionary> font_dict); | |
| virtual void LoadGlyphMap() = 0; | |
| bool LoadCommon(); | |
| void LoadSubstFont(); | |
| void LoadCharMetrics(int charcode); | |
| void LoadCharWidths(const CPDF_Dictionary* font_desc); | |
| bool use_font_width_ = false; | |
| std::array<uint16_t, kInternalTableSize> glyph_index_; | |
| std::array<uint16_t, kInternalTableSize> char_width_; | |
| std::array<FX_RECT, kInternalTableSize> char_bbox_; | |
| }; | |
| #endif // CORE_FPDFAPI_FONT_CPDF_FACEBASEDSIMPLEFONT_H_ |