Use compound keys in CFX_FontMgr::m_FaceMap and m_TTCFaceMap
Avoid cobbling together key strings.
Change-Id: I6226768bacd933520f66939ab7898ddb67e0b13b
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/92991
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fxge/cfx_fontmgr.cpp b/core/fxge/cfx_fontmgr.cpp
index 435c851..9b2b6f5 100644
--- a/core/fxge/cfx_fontmgr.cpp
+++ b/core/fxge/cfx_fontmgr.cpp
@@ -47,20 +47,6 @@
constexpr BuiltinFont kGenericSansFont = {kFoxitSansMMFontData, 66919};
constexpr BuiltinFont kGenericSerifFont = {kFoxitSerifMMFontData, 113417};
-ByteString KeyNameFromFace(const ByteString& face_name,
- int weight,
- bool bItalic) {
- ByteString key(face_name);
- key += ',';
- key += ByteString::FormatInteger(weight);
- key += bItalic ? 'I' : 'N';
- return key;
-}
-
-ByteString KeyNameFromSize(size_t ttc_size, uint32_t checksum) {
- return ByteString::Format("%zu:%u", ttc_size, checksum);
-}
-
FXFT_LibraryRec* FTLibraryInitHelper() {
FXFT_LibraryRec* pLibrary = nullptr;
FT_Init_FreeType(&pLibrary);
@@ -97,7 +83,7 @@
const ByteString& face_name,
int weight,
bool bItalic) {
- auto it = m_FaceMap.find(KeyNameFromFace(face_name, weight, bItalic));
+ auto it = m_FaceMap.find({face_name, weight, bItalic});
return it != m_FaceMap.end() ? pdfium::WrapRetain(it->second.Get()) : nullptr;
}
@@ -108,14 +94,14 @@
std::unique_ptr<uint8_t, FxFreeDeleter> pData,
size_t size) {
auto pFontDesc = pdfium::MakeRetain<FontDesc>(std::move(pData), size);
- m_FaceMap[KeyNameFromFace(face_name, weight, bItalic)].Reset(pFontDesc.Get());
+ m_FaceMap[{face_name, weight, bItalic}].Reset(pFontDesc.Get());
return pFontDesc;
}
RetainPtr<CFX_FontMgr::FontDesc> CFX_FontMgr::GetCachedTTCFontDesc(
size_t ttc_size,
uint32_t checksum) {
- auto it = m_TTCFaceMap.find(KeyNameFromSize(ttc_size, checksum));
+ auto it = m_TTCFaceMap.find({ttc_size, checksum});
return it != m_TTCFaceMap.end() ? pdfium::WrapRetain(it->second.Get())
: nullptr;
}
@@ -126,7 +112,7 @@
std::unique_ptr<uint8_t, FxFreeDeleter> pData,
size_t size) {
auto pNewDesc = pdfium::MakeRetain<FontDesc>(std::move(pData), size);
- m_TTCFaceMap[KeyNameFromSize(ttc_size, checksum)].Reset(pNewDesc.Get());
+ m_TTCFaceMap[{ttc_size, checksum}].Reset(pNewDesc.Get());
return pNewDesc;
}
diff --git a/core/fxge/cfx_fontmgr.h b/core/fxge/cfx_fontmgr.h
index 50cbc5b..5cedf73 100644
--- a/core/fxge/cfx_fontmgr.h
+++ b/core/fxge/cfx_fontmgr.h
@@ -12,6 +12,7 @@
#include <map>
#include <memory>
+#include <tuple>
#include "core/fxcrt/bytestring.h"
#include "core/fxcrt/fx_memory_wrappers.h"
@@ -86,8 +87,8 @@
// Must come before |m_pBuiltinMapper| and |m_FaceMap|.
ScopedFXFTLibraryRec const m_FTLibrary;
std::unique_ptr<CFX_FontMapper> m_pBuiltinMapper;
- std::map<ByteString, ObservedPtr<FontDesc>> m_FaceMap;
- std::map<ByteString, ObservedPtr<FontDesc>> m_TTCFaceMap;
+ std::map<std::tuple<ByteString, int, bool>, ObservedPtr<FontDesc>> m_FaceMap;
+ std::map<std::tuple<size_t, uint32_t>, ObservedPtr<FontDesc>> m_TTCFaceMap;
const bool m_FTLibrarySupportsHinting;
};