diff options
author | Tom Sepez <tsepez@chromium.org> | 2017-04-21 15:42:49 -0700 |
---|---|---|
committer | Chromium commit bot <commit-bot@chromium.org> | 2017-04-21 23:11:20 +0000 |
commit | 25694831670ef6172b1b9b71359a6c192e26da20 (patch) | |
tree | 871a77ab2298d89dd7e4f897d8ae5e8f60c8e42a /core/fxge/ge | |
parent | 350d2d904a3e6bd1e96542c5e223d301d9bdbe6a (diff) | |
download | pdfium-25694831670ef6172b1b9b71359a6c192e26da20.tar.xz |
Use unique_ptr in CFX_FolderFontInfo::m_FontListchromium/3079
Avoid a string duplication along the way.
Change-Id: I866c34ad1afb20b9578aeb7cabeb8a185674c884
Reviewed-on: https://pdfium-review.googlesource.com/4437
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Diffstat (limited to 'core/fxge/ge')
-rw-r--r-- | core/fxge/ge/cfx_folderfontinfo.cpp | 24 | ||||
-rw-r--r-- | core/fxge/ge/cfx_folderfontinfo.h | 5 | ||||
-rw-r--r-- | core/fxge/ge/fx_ge_linux.cpp | 8 |
3 files changed, 19 insertions, 18 deletions
diff --git a/core/fxge/ge/cfx_folderfontinfo.cpp b/core/fxge/ge/cfx_folderfontinfo.cpp index d46c7b5fef..a13af068e8 100644 --- a/core/fxge/ge/cfx_folderfontinfo.cpp +++ b/core/fxge/ge/cfx_folderfontinfo.cpp @@ -7,11 +7,12 @@ #include "core/fxge/ge/cfx_folderfontinfo.h" #include <limits> +#include <utility> #include "core/fxcrt/fx_codepage.h" #include "core/fxge/cfx_fontmapper.h" #include "core/fxge/fx_font.h" - +#include "third_party/base/ptr_util.h" #include "third_party/base/stl_util.h" namespace { @@ -102,13 +103,10 @@ int32_t GetSimilarValue(int weight, CFX_FolderFontInfo::CFX_FolderFontInfo() {} -CFX_FolderFontInfo::~CFX_FolderFontInfo() { - for (const auto& pair : m_FontList) - delete pair.second; -} +CFX_FolderFontInfo::~CFX_FolderFontInfo() {} -void CFX_FolderFontInfo::AddPath(const CFX_ByteStringC& path) { - m_PathList.push_back(CFX_ByteString(path)); +void CFX_FolderFontInfo::AddPath(const CFX_ByteString& path) { + m_PathList.push_back(path); } bool CFX_FolderFontInfo::EnumFontList(CFX_FontMapper* pMapper) { @@ -222,8 +220,8 @@ void CFX_FolderFontInfo::ReportFace(const CFX_ByteString& path, if (pdfium::ContainsKey(m_FontList, facename)) return; - CFX_FontFaceInfo* pInfo = - new CFX_FontFaceInfo(path, facename, tables, offset, filesize); + auto pInfo = pdfium::MakeUnique<CFX_FontFaceInfo>(path, facename, tables, + offset, filesize); CFX_ByteString os2 = FPDF_LoadTableFromTT(pFile, tables.raw_str(), nTables, 0x4f532f32); if (os2.GetLength() >= 86) { @@ -260,7 +258,7 @@ void CFX_FolderFontInfo::ReportFace(const CFX_ByteString& path, if (facename.Find("Serif") > -1) pInfo->m_Styles |= FXFONT_SERIF; - m_FontList[facename] = pInfo; + m_FontList[facename] = std::move(pInfo); } void* CFX_FolderFontInfo::GetSubstFont(const CFX_ByteString& face) { @@ -281,17 +279,19 @@ void* CFX_FolderFontInfo::FindFont(int weight, CFX_FontFaceInfo* pFind = nullptr; if (charset == FX_CHARSET_ANSI && (pitch_family & FXFONT_FF_FIXEDPITCH)) return GetFont("Courier New"); + uint32_t charset_flag = GetCharset(charset); int32_t iBestSimilar = 0; for (const auto& it : m_FontList) { const CFX_ByteString& bsName = it.first; - CFX_FontFaceInfo* pFont = it.second; + CFX_FontFaceInfo* pFont = it.second.get(); if (!(pFont->m_Charsets & charset_flag) && charset != FX_CHARSET_Default) continue; int32_t index = bsName.Find(family); if (bMatchName && index < 0) continue; + int32_t iSimilarValue = GetSimilarValue(weight, bItalic, pitch_family, pFont->m_Styles); if (iSimilarValue > iBestSimilar) { @@ -322,7 +322,7 @@ void* CFX_FolderFontInfo::MapFontByUnicode(uint32_t dwUnicode, void* CFX_FolderFontInfo::GetFont(const char* face) { auto it = m_FontList.find(face); - return it != m_FontList.end() ? it->second : nullptr; + return it != m_FontList.end() ? it->second.get() : nullptr; } uint32_t CFX_FolderFontInfo::GetFontData(void* hFont, diff --git a/core/fxge/ge/cfx_folderfontinfo.h b/core/fxge/ge/cfx_folderfontinfo.h index ab2468ade0..6aadb1526f 100644 --- a/core/fxge/ge/cfx_folderfontinfo.h +++ b/core/fxge/ge/cfx_folderfontinfo.h @@ -8,6 +8,7 @@ #define CORE_FXGE_GE_CFX_FOLDERFONTINFO_H_ #include <map> +#include <memory> #include <vector> #include "core/fxge/cfx_fontmapper.h" @@ -19,7 +20,7 @@ class CFX_FolderFontInfo : public IFX_SystemFontInfo { CFX_FolderFontInfo(); ~CFX_FolderFontInfo() override; - void AddPath(const CFX_ByteStringC& path); + void AddPath(const CFX_ByteString& path); // IFX_SytemFontInfo: bool EnumFontList(CFX_FontMapper* pMapper) override; @@ -59,7 +60,7 @@ class CFX_FolderFontInfo : public IFX_SystemFontInfo { const char* family, bool bMatchName); - std::map<CFX_ByteString, CFX_FontFaceInfo*> m_FontList; + std::map<CFX_ByteString, std::unique_ptr<CFX_FontFaceInfo>> m_FontList; std::vector<CFX_ByteString> m_PathList; CFX_FontMapper* m_pMapper; }; diff --git a/core/fxge/ge/fx_ge_linux.cpp b/core/fxge/ge/fx_ge_linux.cpp index 8d2c496c19..b216e12127 100644 --- a/core/fxge/ge/fx_ge_linux.cpp +++ b/core/fxge/ge/fx_ge_linux.cpp @@ -97,7 +97,7 @@ void* CFX_LinuxFontInfo::MapFont(int weight, for (size_t i = 0; i < kLinuxGpNameSize; i++) { auto it = m_FontList.find(g_LinuxGpFontList[index][i]); if (it != m_FontList.end()) - return it->second; + return it->second.get(); } break; } @@ -105,7 +105,7 @@ void* CFX_LinuxFontInfo::MapFont(int weight, for (size_t i = 0; i < FX_ArraySize(g_LinuxGbFontList); ++i) { auto it = m_FontList.find(g_LinuxGbFontList[i]); if (it != m_FontList.end()) - return it->second; + return it->second.get(); } break; } @@ -113,7 +113,7 @@ void* CFX_LinuxFontInfo::MapFont(int weight, for (size_t i = 0; i < FX_ArraySize(g_LinuxB5FontList); ++i) { auto it = m_FontList.find(g_LinuxB5FontList[i]); if (it != m_FontList.end()) - return it->second; + return it->second.get(); } break; } @@ -121,7 +121,7 @@ void* CFX_LinuxFontInfo::MapFont(int weight, for (size_t i = 0; i < FX_ArraySize(g_LinuxHGFontList); ++i) { auto it = m_FontList.find(g_LinuxHGFontList[i]); if (it != m_FontList.end()) - return it->second; + return it->second.get(); } break; } |