summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/fxge/cfx_font.cpp4
-rw-r--r--core/fxge/cfx_fontmapper.cpp28
-rw-r--r--core/fxge/cfx_fontmgr.cpp32
-rw-r--r--core/fxge/cfx_fontmgr.h6
4 files changed, 34 insertions, 36 deletions
diff --git a/core/fxge/cfx_font.cpp b/core/fxge/cfx_font.cpp
index 3c2b48d4a3..4276d834fe 100644
--- a/core/fxge/cfx_font.cpp
+++ b/core/fxge/cfx_font.cpp
@@ -381,8 +381,8 @@ uint32_t CFX_Font::GetGlyphWidth(uint32_t glyph_index) {
bool CFX_Font::LoadEmbedded(pdfium::span<const uint8_t> src_span) {
m_pFontDataAllocation =
std::vector<uint8_t>(src_span.begin(), src_span.end());
- m_Face = CFX_GEModule::Get()->GetFontMgr()->GetFixedFace(
- m_pFontDataAllocation.data(), m_pFontDataAllocation.size(), 0);
+ m_Face =
+ CFX_GEModule::Get()->GetFontMgr()->GetFixedFace(m_pFontDataAllocation, 0);
m_bEmbedded = true;
m_FontData = m_pFontDataAllocation;
return !!m_Face;
diff --git a/core/fxge/cfx_fontmapper.cpp b/core/fxge/cfx_fontmapper.cpp
index 461094d81e..0a38952d61 100644
--- a/core/fxge/cfx_fontmapper.cpp
+++ b/core/fxge/cfx_fontmapper.cpp
@@ -357,10 +357,10 @@ FXFT_Face CFX_FontMapper::UseInternalSubst(CFX_SubstFont* pSubstFont,
if (iBaseFont < kNumStandardFonts) {
if (m_FoxitFaces[iBaseFont])
return m_FoxitFaces[iBaseFont];
- const uint8_t* pFontData = nullptr;
- uint32_t size = 0;
- if (m_pFontMgr->GetBuiltinFont(iBaseFont, &pFontData, &size)) {
- m_FoxitFaces[iBaseFont] = m_pFontMgr->GetFixedFace(pFontData, size, 0);
+ Optional<pdfium::span<const uint8_t>> font_data =
+ m_pFontMgr->GetBuiltinFont(iBaseFont);
+ if (font_data.has_value()) {
+ m_FoxitFaces[iBaseFont] = m_pFontMgr->GetFixedFace(font_data.value(), 0);
return m_FoxitFaces[iBaseFont];
}
}
@@ -371,21 +371,17 @@ FXFT_Face CFX_FontMapper::UseInternalSubst(CFX_SubstFont* pSubstFont,
if (FontFamilyIsRoman(pitch_family)) {
pSubstFont->m_Weight = pSubstFont->m_Weight * 4 / 5;
pSubstFont->m_Family = "Chrome Serif";
- if (m_MMFaces[1])
- return m_MMFaces[1];
- const uint8_t* pFontData = nullptr;
- uint32_t size = 0;
- m_pFontMgr->GetBuiltinFont(14, &pFontData, &size);
- m_MMFaces[1] = m_pFontMgr->GetFixedFace(pFontData, size, 0);
+ if (!m_MMFaces[1]) {
+ m_MMFaces[1] =
+ m_pFontMgr->GetFixedFace(m_pFontMgr->GetBuiltinFont(14).value(), 0);
+ }
return m_MMFaces[1];
}
pSubstFont->m_Family = "Chrome Sans";
- if (m_MMFaces[0])
- return m_MMFaces[0];
- const uint8_t* pFontData = nullptr;
- uint32_t size = 0;
- m_pFontMgr->GetBuiltinFont(15, &pFontData, &size);
- m_MMFaces[0] = m_pFontMgr->GetFixedFace(pFontData, size, 0);
+ if (!m_MMFaces[0]) {
+ m_MMFaces[0] =
+ m_pFontMgr->GetFixedFace(m_pFontMgr->GetBuiltinFont(15).value(), 0);
+ }
return m_MMFaces[0];
}
diff --git a/core/fxge/cfx_fontmgr.cpp b/core/fxge/cfx_fontmgr.cpp
index 85999a1976..0a19156b46 100644
--- a/core/fxge/cfx_fontmgr.cpp
+++ b/core/fxge/cfx_fontmgr.cpp
@@ -167,8 +167,9 @@ FXFT_Face CFX_FontMgr::GetCachedTTCFace(int ttc_size,
*pFontData = pFontDesc->FontData();
int face_index = GetTTCIndex(pFontDesc->FontData(), ttc_size, font_offset);
if (!pFontDesc->GetFace(face_index)) {
- pFontDesc->SetFace(
- face_index, GetFixedFace(pFontDesc->FontData(), ttc_size, face_index));
+ pFontDesc->SetFace(face_index, GetFixedFace({pFontDesc->FontData(),
+ static_cast<size_t>(ttc_size)},
+ face_index));
}
pFontDesc->AddRef();
return pFontDesc->GetFace(face_index);
@@ -181,20 +182,22 @@ FXFT_Face CFX_FontMgr::AddCachedTTCFace(
uint32_t size,
int font_offset) {
int face_index = GetTTCIndex(pData.get(), ttc_size, font_offset);
- FXFT_Face face = GetFixedFace(pData.get(), ttc_size, face_index);
+ FXFT_Face face =
+ GetFixedFace({pData.get(), static_cast<size_t>(ttc_size)}, face_index);
auto pFontDesc = pdfium::MakeUnique<CTTFontDesc>(std::move(pData));
pFontDesc->SetFace(face_index, face);
m_FaceMap[KeyNameFromSize(ttc_size, checksum)] = std::move(pFontDesc);
return face;
}
-FXFT_Face CFX_FontMgr::GetFixedFace(const uint8_t* pData,
- uint32_t size,
+FXFT_Face CFX_FontMgr::GetFixedFace(pdfium::span<const uint8_t> span,
int face_index) {
InitFTLibrary();
FXFT_Face face = nullptr;
- if (FXFT_New_Memory_Face(m_FTLibrary, pData, size, face_index, &face))
+ if (FXFT_New_Memory_Face(m_FTLibrary, span.data(), span.size(), face_index,
+ &face)) {
return nullptr;
+ }
return FXFT_Set_Pixel_Sizes(face, 64, 64) ? nullptr : face;
}
@@ -223,21 +226,18 @@ void CFX_FontMgr::ReleaseFace(FXFT_Face face) {
FXFT_Done_Face(face);
}
-bool CFX_FontMgr::GetBuiltinFont(size_t index,
- const uint8_t** pFontData,
- uint32_t* size) {
+Optional<pdfium::span<const uint8_t>> CFX_FontMgr::GetBuiltinFont(
+ size_t index) {
if (index < FX_ArraySize(g_FoxitFonts)) {
- *pFontData = g_FoxitFonts[index].m_pFontData;
- *size = g_FoxitFonts[index].m_dwSize;
- return true;
+ return pdfium::make_span(g_FoxitFonts[index].m_pFontData,
+ g_FoxitFonts[index].m_dwSize);
}
size_t mm_index = index - FX_ArraySize(g_FoxitFonts);
if (mm_index < FX_ArraySize(g_MMFonts)) {
- *pFontData = g_MMFonts[mm_index].m_pFontData;
- *size = g_MMFonts[mm_index].m_dwSize;
- return true;
+ return pdfium::make_span(g_MMFonts[mm_index].m_pFontData,
+ g_MMFonts[mm_index].m_dwSize);
}
- return false;
+ return {};
}
bool CFX_FontMgr::FreeTypeVersionSupportsHinting() const {
diff --git a/core/fxge/cfx_fontmgr.h b/core/fxge/cfx_fontmgr.h
index 24c5ad3b6f..5ac8305d9a 100644
--- a/core/fxge/cfx_fontmgr.h
+++ b/core/fxge/cfx_fontmgr.h
@@ -12,6 +12,8 @@
#include "core/fxcrt/fx_memory.h"
#include "core/fxge/fx_font.h"
+#include "third_party/base/optional.h"
+#include "third_party/base/span.h"
class CFX_FontMapper;
class CFX_SubstFont;
@@ -45,7 +47,7 @@ class CFX_FontMgr {
uint32_t size,
int font_offset);
FXFT_Face GetFileFace(const char* filename, int face_index);
- FXFT_Face GetFixedFace(const uint8_t* pData, uint32_t size, int face_index);
+ FXFT_Face GetFixedFace(pdfium::span<const uint8_t> span, int face_index);
void ReleaseFace(FXFT_Face face);
void SetSystemFontInfo(std::unique_ptr<SystemFontInfoIface> pFontInfo);
FXFT_Face FindSubstFont(const ByteString& face_name,
@@ -55,7 +57,7 @@ class CFX_FontMgr {
int italic_angle,
int CharsetCP,
CFX_SubstFont* pSubstFont);
- bool GetBuiltinFont(size_t index, const uint8_t** pFontData, uint32_t* size);
+ Optional<pdfium::span<const uint8_t>> GetBuiltinFont(size_t index);
CFX_FontMapper* GetBuiltinMapper() const { return m_pBuiltinMapper.get(); }
FXFT_Library GetFTLibrary() const { return m_FTLibrary; }
bool FTLibrarySupportsHinting() const { return m_FTLibrarySupportsHinting; }