blob: 4c160a25ec26a2583c2a1f13f1133e674ce1d1d6 [file]
// 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_