Encapsulate SystemFontInfoIface operations behind CFX_FontMapper.
- fix IWYU exposed by removing header.
Change-Id: I364d4eb6b1a4510e8b3eee08abdc11714fda7ba6
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/65572
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fxge/cfx_fontmapper.cpp b/core/fxge/cfx_fontmapper.cpp
index f16b9be..04fb77d 100644
--- a/core/fxge/cfx_fontmapper.cpp
+++ b/core/fxge/cfx_fontmapper.cpp
@@ -667,6 +667,30 @@
return pdfium::CollectionSize<int>(m_FaceArray);
}
+#ifdef PDF_ENABLE_XFA
+std::unique_ptr<uint8_t, FxFreeDeleter> CFX_FontMapper::RawBytesForIndex(
+ uint32_t index,
+ size_t* returned_length) {
+ if (!m_pFontInfo)
+ return nullptr;
+
+ void* hFont = m_pFontInfo->MapFont(0, 0, FX_CHARSET_Default, 0,
+ GetFaceName(index).c_str());
+ if (!hFont)
+ return nullptr;
+
+ uint32_t required_size = m_pFontInfo->GetFontData(hFont, 0, {});
+ if (required_size == 0)
+ return nullptr;
+
+ std::unique_ptr<uint8_t, FxFreeDeleter> pBuffer(
+ FX_Alloc(uint8_t, required_size + 1));
+ *returned_length =
+ m_pFontInfo->GetFontData(hFont, 0, {pBuffer.get(), required_size});
+ return pBuffer;
+}
+#endif // PDF_ENABLE_XFA
+
bool CFX_FontMapper::IsBuiltinFace(const RetainPtr<CFX_Face>& face) const {
for (size_t i = 0; i < MM_FACE_COUNT; ++i) {
if (m_MMFaces[i] == face)
diff --git a/core/fxge/cfx_fontmapper.h b/core/fxge/cfx_fontmapper.h
index 3ce0c29..c21c6cb 100644
--- a/core/fxge/cfx_fontmapper.h
+++ b/core/fxge/cfx_fontmapper.h
@@ -11,6 +11,7 @@
#include <utility>
#include <vector>
+#include "core/fxcrt/fx_memory_wrappers.h"
#include "core/fxcrt/fx_string.h"
#include "core/fxge/cfx_face.h"
#include "third_party/base/optional.h"
@@ -50,7 +51,6 @@
}
void SetSystemFontInfo(std::unique_ptr<SystemFontInfoIface> pFontInfo);
- SystemFontInfoIface* GetSystemFontInfo() { return m_pFontInfo.get(); }
void AddInstalledFont(const ByteString& name, int charset);
void LoadInstalledFonts();
@@ -66,6 +66,12 @@
int GetFaceSize() const;
ByteString GetFaceName(int index) const { return m_FaceArray[index].name; }
+#ifdef PDF_ENABLE_XFA
+ std::unique_ptr<uint8_t, FxFreeDeleter> RawBytesForIndex(
+ uint32_t index,
+ size_t* returned_length);
+#endif // PDF_ENABLE_XFA
+
std::vector<ByteString> m_InstalledTTFonts;
std::vector<std::pair<ByteString, ByteString>> m_LocalizedTTFonts;