7#include "core/fxge/cfx_fontmgr.h"
14#include "core/fxcrt/check_op.h"
15#include "core/fxcrt/fixed_size_data_vector.h"
16#include "core/fxge/cfx_fontmapper.h"
17#include "core/fxge/cfx_substfont.h"
18#include "core/fxge/fontdata/chromefontdata/chromefontdata.h"
19#include "core/fxge/fx_font.h"
20#include "core/fxge/systemfontinfo_iface.h"
24const std::array<pdfium::span<
const uint8_t>,
25 CFX_FontMapper::kNumStandardFonts>
48 FT_Init_FreeType(&pLibrary);
54CFX_FontMgr::FontDesc::FontDesc(FixedSizeDataVector<uint8_t> data)
55 : m_pFontData(std::move(data)) {}
60 CHECK_LT(index, std::size(m_TTCFaces));
61 m_TTCFaces[index].Reset(face);
65 CHECK_LT(index, std::size(m_TTCFaces));
66 return m_TTCFaces[index].Get();
72 m_FTLibrarySupportsHinting(SetLcdFilterMode() ||
73 FreeTypeVersionSupportsHinting()) {}
81 auto it = m_FaceMap.find({face_name, weight, bItalic});
82 return it != m_FaceMap.end() ? pdfium::WrapRetain(it->second.Get()) :
nullptr;
89 FixedSizeDataVector<uint8_t> data) {
90 auto pFontDesc =
pdfium::MakeRetain<FontDesc>(
std::move(data));
91 m_FaceMap[{face_name, weight, bItalic}].Reset(pFontDesc.Get());
98 auto it = m_TTCFaceMap.find({ttc_size, checksum});
99 return it != m_TTCFaceMap.end() ? pdfium::WrapRetain(it->second.Get())
106 FixedSizeDataVector<uint8_t> data) {
107 auto pNewDesc =
pdfium::MakeRetain<FontDesc>(
std::move(data));
108 m_TTCFaceMap[{ttc_size, checksum}].Reset(pNewDesc.Get());
113 pdfium::span<
const uint8_t> span,
116 CFX_Face::New(m_FTLibrary.get(), std::move(pDesc), span,
117 static_cast<FT_Long>(face_index));
118 if (!face || !face->SetPixelSize(64, 64)) {
126pdfium::span<
const uint8_t>
CFX_FontMgr::GetStandardFont(size_t index) {
127 return kFoxitFonts[index];
132 return kGenericSansFont;
137 return kGenericSerifFont;
140bool CFX_FontMgr::FreeTypeVersionSupportsHinting()
const {
144 FT_Library_Version(m_FTLibrary.get(), &major, &minor, &patch);
147 return major > 2 || (major == 2 && minor > 8) ||
148 (major == 2 && minor == 8 && patch >= 1);
152 return FT_Library_SetLcdFilter(m_FTLibrary.get(), FT_LCD_FILTER_DEFAULT) !=
153 FT_Err_Unimplemented_Feature;
fxcrt::ByteString ByteString
const std::array< uint8_t, 66919 > kFoxitSansMMFontData
const std::array< uint8_t, 18746 > kFoxitFixedItalicFontData
const std::array< uint8_t, 21227 > kFoxitSerifItalicFontData
const std::array< uint8_t, 17597 > kFoxitFixedFontData
const std::array< uint8_t, 16729 > kFoxitSymbolFontData
const std::array< uint8_t, 18055 > kFoxitFixedBoldFontData
const std::array< uint8_t, 16418 > kFoxitSansBoldItalicFontData
const std::array< uint8_t, 20733 > kFoxitSerifBoldItalicFontData
const std::array< uint8_t, 19395 > kFoxitSerifBoldFontData
const std::array< uint8_t, 113417 > kFoxitSerifMMFontData
const std::array< uint8_t, 29513 > kFoxitDingbatsFontData
const std::array< uint8_t, 15025 > kFoxitSansFontData
const std::array< uint8_t, 19469 > kFoxitSerifFontData
const std::array< uint8_t, 16339 > kFoxitSansItalicFontData
const std::array< uint8_t, 16344 > kFoxitSansBoldFontData
const std::array< uint8_t, 19151 > kFoxitFixedBoldItalicFontData
CFX_Face * GetFace(size_t index) const
void SetFace(size_t index, CFX_Face *face)
RetainPtr< FontDesc > AddCachedFontDesc(const ByteString &face_name, int weight, bool bItalic, FixedSizeDataVector< uint8_t > data)
RetainPtr< FontDesc > GetCachedFontDesc(const ByteString &face_name, int weight, bool bItalic)
RetainPtr< FontDesc > AddCachedTTCFontDesc(size_t ttc_size, uint32_t checksum, FixedSizeDataVector< uint8_t > data)
RetainPtr< CFX_Face > NewFixedFace(RetainPtr< FontDesc > pDesc, pdfium::span< const uint8_t > span, size_t face_index)
RetainPtr< FontDesc > GetCachedTTCFontDesc(size_t ttc_size, uint32_t checksum)
struct FT_LibraryRec_ FXFT_LibraryRec