diff options
-rw-r--r-- | core/fxge/android/cfpf_skiafont.cpp | 2 | ||||
-rw-r--r-- | core/fxge/android/cfpf_skiafont.h | 4 | ||||
-rw-r--r-- | core/fxge/android/cfpf_skiafontmgr.cpp | 30 | ||||
-rw-r--r-- | core/fxge/android/cfpf_skiafontmgr.h | 6 |
4 files changed, 22 insertions, 20 deletions
diff --git a/core/fxge/android/cfpf_skiafont.cpp b/core/fxge/android/cfpf_skiafont.cpp index 24984e8d9f..0118f9512e 100644 --- a/core/fxge/android/cfpf_skiafont.cpp +++ b/core/fxge/android/cfpf_skiafont.cpp @@ -171,7 +171,7 @@ uint32_t CFPF_SkiaFont::GetFontData(uint32_t dwTable, } bool CFPF_SkiaFont::InitFont(CFPF_SkiaFontMgr* pFontMgr, - CFPF_SkiaPathFont* pFont, + const CFPF_SkiaPathFont* pFont, const ByteStringView& bsFamily, uint32_t dwStyle, uint8_t uCharset) { diff --git a/core/fxge/android/cfpf_skiafont.h b/core/fxge/android/cfpf_skiafont.h index 260e4222a5..d80378ec75 100644 --- a/core/fxge/android/cfpf_skiafont.h +++ b/core/fxge/android/cfpf_skiafont.h @@ -37,14 +37,14 @@ class CFPF_SkiaFont { uint32_t GetFontData(uint32_t dwTable, uint8_t* pBuffer, uint32_t dwSize); bool InitFont(CFPF_SkiaFontMgr* pFontMgr, - CFPF_SkiaPathFont* pFont, + const CFPF_SkiaPathFont* pFont, const ByteStringView& bsFamily, uint32_t dwStyle, uint8_t uCharset); private: UnownedPtr<CFPF_SkiaFontMgr> m_pFontMgr; - UnownedPtr<CFPF_SkiaPathFont> m_pFont; + UnownedPtr<const CFPF_SkiaPathFont> m_pFont; FXFT_Face m_Face = nullptr; uint32_t m_dwStyle = 0; uint8_t m_uCharset = 0; diff --git a/core/fxge/android/cfpf_skiafontmgr.cpp b/core/fxge/android/cfpf_skiafontmgr.cpp index b091ae9fd7..6edc334a9d 100644 --- a/core/fxge/android/cfpf_skiafontmgr.cpp +++ b/core/fxge/android/cfpf_skiafontmgr.cpp @@ -21,6 +21,7 @@ #include "core/fxge/android/cfpf_skiafont.h" #include "core/fxge/android/cfpf_skiapathfont.h" #include "core/fxge/fx_freetype.h" +#include "third_party/base/ptr_util.h" namespace { @@ -232,8 +233,6 @@ CFPF_SkiaFontMgr::~CFPF_SkiaFontMgr() { pair.second->Release(); } m_FamilyFonts.clear(); - for (auto it = m_FontFaces.begin(); it != m_FontFaces.end(); ++it) - delete *it; m_FontFaces.clear(); if (m_FTLibrary) FXFT_Done_FreeType(m_FTLibrary); @@ -276,11 +275,11 @@ CFPF_SkiaFont* CFPF_SkiaFontMgr::CreateFont(const ByteStringView& bsFamilyname, } int32_t nExpectVal = FPF_SKIAMATCHWEIGHT_NAME1 + FPF_SKIAMATCHWEIGHT_1 * 3 + FPF_SKIAMATCHWEIGHT_2 * 2; - CFPF_SkiaPathFont* pBestFont = nullptr; + const CFPF_SkiaPathFont* pBestFont = nullptr; int32_t nMax = -1; int32_t nGlyphNum = 0; for (auto it = m_FontFaces.rbegin(); it != m_FontFaces.rend(); ++it) { - CFPF_SkiaPathFont* pFont = *it; + const CFPF_SkiaPathFont* pFont = it->get(); if (!(pFont->m_dwCharsets & FPF_SkiaGetCharset(uCharset))) continue; int32_t nFind = 0; @@ -307,19 +306,19 @@ CFPF_SkiaFont* CFPF_SkiaFontMgr::CreateFont(const ByteStringView& bsFamilyname, if (uCharset == FX_CHARSET_Default || bMaybeSymbol) { if (nFind > nMax && bMatchedName) { nMax = nFind; - pBestFont = *it; + pBestFont = it->get(); } } else if (FPF_SkiaIsCJK(uCharset)) { if (bMatchedName || pFont->m_iGlyphNum > nGlyphNum) { - pBestFont = *it; + pBestFont = it->get(); nGlyphNum = pFont->m_iGlyphNum; } } else if (nFind > nMax) { nMax = nFind; - pBestFont = *it; + pBestFont = it->get(); } if (nExpectVal <= nFind) { - pBestFont = *it; + pBestFont = it->get(); break; } } @@ -381,16 +380,16 @@ void CFPF_SkiaFontMgr::ScanFile(const ByteString& file) { FXFT_Face face = GetFontFace(file.AsStringView(), 0); if (!face) return; - CFPF_SkiaPathFont* pFont = new CFPF_SkiaPathFont; - pFont->SetPath(file.c_str()); - ReportFace(face, pFont); - m_FontFaces.push_back(pFont); + + m_FontFaces.push_back(ReportFace(face, file)); FXFT_Done_Face(face); } -void CFPF_SkiaFontMgr::ReportFace(FXFT_Face face, CFPF_SkiaPathFont* pFont) { - if (!face || !pFont) - return; +std::unique_ptr<CFPF_SkiaPathFont> CFPF_SkiaFontMgr::ReportFace( + FXFT_Face face, + const ByteString& file) { + auto pFont = pdfium::MakeUnique<CFPF_SkiaPathFont>(); + pFont->SetPath(file.c_str()); pFont->SetFamily(FXFT_Get_Face_Family_Name(face)); if (FXFT_Is_Face_Bold(face)) pFont->m_dwStyle |= FXFONT_BOLD; @@ -413,4 +412,5 @@ void CFPF_SkiaFontMgr::ReportFace(FXFT_Face face, CFPF_SkiaPathFont* pFont) { pFont->m_dwCharsets = FPF_SkiaGetFaceCharset(pOS2); pFont->m_iFaceIndex = face->face_index; pFont->m_iGlyphNum = face->num_glyphs; + return pFont; } diff --git a/core/fxge/android/cfpf_skiafontmgr.h b/core/fxge/android/cfpf_skiafontmgr.h index af2d3acfc8..99aafd7bd2 100644 --- a/core/fxge/android/cfpf_skiafontmgr.h +++ b/core/fxge/android/cfpf_skiafontmgr.h @@ -8,6 +8,7 @@ #define CORE_FXGE_ANDROID_CFPF_SKIAFONTMGR_H_ #include <map> +#include <memory> #include <vector> #include "core/fxcrt/fx_string.h" @@ -35,11 +36,12 @@ class CFPF_SkiaFontMgr { private: void ScanPath(const ByteString& path); void ScanFile(const ByteString& file); - void ReportFace(FXFT_Face face, CFPF_SkiaPathFont* pFont); + std::unique_ptr<CFPF_SkiaPathFont> ReportFace(FXFT_Face face, + const ByteString& file); bool m_bLoaded = false; FXFT_Library m_FTLibrary = nullptr; - std::vector<CFPF_SkiaPathFont*> m_FontFaces; + std::vector<std::unique_ptr<CFPF_SkiaPathFont>> m_FontFaces; std::map<uint32_t, CFPF_SkiaFont*> m_FamilyFonts; }; |