Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(327)

Side by Side Diff: xfa/fwl/theme/cfwl_widgettp.cpp

Issue 2609423003: Properly ref-count CFGAS_GEFont with CFX_RetainPtr. (Closed)
Patch Set: comments Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 PDFium Authors. All rights reserved. 1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 6
7 #include "xfa/fwl/theme/cfwl_widgettp.h" 7 #include "xfa/fwl/theme/cfwl_widgettp.h"
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <utility> 10 #include <utility>
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after
291 m_dwStyles = dwFontStyles; 291 m_dwStyles = dwFontStyles;
292 m_dwCodePage = dwCodePage; 292 m_dwCodePage = dwCodePage;
293 if (!m_pFontMgr) { 293 if (!m_pFontMgr) {
294 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ 294 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
295 m_pFontMgr = CFGAS_FontMgr::Create(FX_GetDefFontEnumerator()); 295 m_pFontMgr = CFGAS_FontMgr::Create(FX_GetDefFontEnumerator());
296 #else 296 #else
297 m_pFontSource = pdfium::MakeUnique<CFX_FontSourceEnum_File>(); 297 m_pFontSource = pdfium::MakeUnique<CFX_FontSourceEnum_File>();
298 m_pFontMgr = CFGAS_FontMgr::Create(m_pFontSource.get()); 298 m_pFontMgr = CFGAS_FontMgr::Create(m_pFontSource.get());
299 #endif 299 #endif
300 } 300 }
301 m_pFont.reset(CFGAS_GEFont::LoadFont(wsFontFamily.c_str(), dwFontStyles, 301 m_pFont = CFGAS_GEFont::LoadFont(wsFontFamily.c_str(), dwFontStyles,
302 dwCodePage, m_pFontMgr.get())); 302 dwCodePage, m_pFontMgr.get());
303 return !!m_pFont; 303 return !!m_pFont;
304 } 304 }
305 305
306 CFWL_FontManager* CFWL_FontManager::s_FontManager = nullptr; 306 CFWL_FontManager* CFWL_FontManager::s_FontManager = nullptr;
307 CFWL_FontManager* CFWL_FontManager::GetInstance() { 307 CFWL_FontManager* CFWL_FontManager::GetInstance() {
308 if (!s_FontManager) 308 if (!s_FontManager)
309 s_FontManager = new CFWL_FontManager; 309 s_FontManager = new CFWL_FontManager;
310 return s_FontManager; 310 return s_FontManager;
311 } 311 }
312 312
313 void CFWL_FontManager::DestroyInstance() { 313 void CFWL_FontManager::DestroyInstance() {
314 delete s_FontManager; 314 delete s_FontManager;
315 s_FontManager = nullptr; 315 s_FontManager = nullptr;
316 } 316 }
317 317
318 CFWL_FontManager::CFWL_FontManager() {} 318 CFWL_FontManager::CFWL_FontManager() {}
319 319
320 CFWL_FontManager::~CFWL_FontManager() {} 320 CFWL_FontManager::~CFWL_FontManager() {}
321 321
322 CFGAS_GEFont* CFWL_FontManager::FindFont(const CFX_WideStringC& wsFontFamily, 322 CFX_RetainPtr<CFGAS_GEFont> CFWL_FontManager::FindFont(
323 uint32_t dwFontStyles, 323 const CFX_WideStringC& wsFontFamily,
324 uint16_t wCodePage) { 324 uint32_t dwFontStyles,
325 uint16_t wCodePage) {
325 for (const auto& pData : m_FontsArray) { 326 for (const auto& pData : m_FontsArray) {
326 if (pData->Equal(wsFontFamily, dwFontStyles, wCodePage)) 327 if (pData->Equal(wsFontFamily, dwFontStyles, wCodePage))
327 return pData->GetFont(); 328 return pData->GetFont();
328 } 329 }
329 std::unique_ptr<CFWL_FontData> pFontData(new CFWL_FontData); 330 auto pFontData = pdfium::MakeUnique<CFWL_FontData>();
330 if (!pFontData->LoadFont(wsFontFamily, dwFontStyles, wCodePage)) 331 if (!pFontData->LoadFont(wsFontFamily, dwFontStyles, wCodePage))
331 return nullptr; 332 return nullptr;
333
332 m_FontsArray.push_back(std::move(pFontData)); 334 m_FontsArray.push_back(std::move(pFontData));
333 return m_FontsArray.back()->GetFont(); 335 return m_FontsArray.back()->GetFont();
334 } 336 }
335 337
336 void FWLTHEME_Release() { 338 void FWLTHEME_Release() {
337 CFWL_FontManager::DestroyInstance(); 339 CFWL_FontManager::DestroyInstance();
338 } 340 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698