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

Side by Side Diff: xfa/fgas/font/cfgas_gefont.h

Issue 2631703003: Avoid endless loop deleting CFGAS_GEFont. (Closed)
Patch Set: rebase 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
« no previous file with comments | « xfa/fde/cfde_txtedtengine.cpp ('k') | xfa/fgas/font/cfgas_gefont.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 #ifndef XFA_FGAS_FONT_CFGAS_GEFONT_H_ 7 #ifndef XFA_FGAS_FONT_CFGAS_GEFONT_H_
8 #define XFA_FGAS_FONT_CFGAS_GEFONT_H_ 8 #define XFA_FGAS_FONT_CFGAS_GEFONT_H_
9 9
10 #include <map> 10 #include <map>
11 #include <memory> 11 #include <memory>
12 #include <vector> 12 #include <vector>
13 13
14 #include "core/fxcrt/cfx_retain_ptr.h" 14 #include "core/fxcrt/cfx_retain_ptr.h"
15 #include "core/fxcrt/fx_memory.h" 15 #include "core/fxcrt/fx_memory.h"
16 #include "xfa/fgas/crt/fgas_utils.h" 16 #include "xfa/fgas/crt/fgas_utils.h"
17 #include "xfa/fgas/font/cfgas_fontmgr.h" 17 #include "xfa/fgas/font/cfgas_fontmgr.h"
18 18
19 #define FXFONT_SUBST_ITALIC 0x02 19 #define FXFONT_SUBST_ITALIC 0x02
20 20
21 class CFGAS_FontMgr; 21 class CFGAS_FontMgr;
22 class CFX_UnicodeEncoding; 22 class CFX_UnicodeEncoding;
23 class CXFA_PDFFontMgr; 23 class CXFA_PDFFontMgr;
24 24
25 class CFGAS_GEFont : public CFX_Retainable { 25 class CFGAS_GEFont : public CFX_Retainable {
26 public: 26 public:
27 template <typename T>
28 friend class CFX_RetainPtr;
27 template <typename T, typename... Args> 29 template <typename T, typename... Args>
28 friend CFX_RetainPtr<T> pdfium::MakeRetain(Args&&... args); 30 friend CFX_RetainPtr<T> pdfium::MakeRetain(Args&&... args);
29 31
30 static CFX_RetainPtr<CFGAS_GEFont> LoadFont(const FX_WCHAR* pszFontFamily, 32 static CFX_RetainPtr<CFGAS_GEFont> LoadFont(const FX_WCHAR* pszFontFamily,
31 uint32_t dwFontStyles, 33 uint32_t dwFontStyles,
32 uint16_t wCodePage, 34 uint16_t wCodePage,
33 CFGAS_FontMgr* pFontMgr); 35 CFGAS_FontMgr* pFontMgr);
34 static CFX_RetainPtr<CFGAS_GEFont> LoadFont(CFX_Font* pExternalFont, 36 static CFX_RetainPtr<CFGAS_GEFont> LoadFont(CFX_Font* pExternalFont,
35 CFGAS_FontMgr* pFontMgr); 37 CFGAS_FontMgr* pFontMgr);
36 static CFX_RetainPtr<CFGAS_GEFont> LoadFont( 38 static CFX_RetainPtr<CFGAS_GEFont> LoadFont(
37 std::unique_ptr<CFX_Font> pInternalFont, 39 std::unique_ptr<CFX_Font> pInternalFont,
38 CFGAS_FontMgr* pFontMgr); 40 CFGAS_FontMgr* pFontMgr);
39 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ 41 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
40 static CFX_RetainPtr<CFGAS_GEFont> LoadFont(const uint8_t* pBuffer, 42 static CFX_RetainPtr<CFGAS_GEFont> LoadFont(const uint8_t* pBuffer,
41 int32_t iLength, 43 int32_t iLength,
42 CFGAS_FontMgr* pFontMgr); 44 CFGAS_FontMgr* pFontMgr);
43 static CFX_RetainPtr<CFGAS_GEFont> LoadFont( 45 static CFX_RetainPtr<CFGAS_GEFont> LoadFont(
44 const CFX_RetainPtr<IFGAS_Stream>& pFontStream, 46 const CFX_RetainPtr<IFGAS_Stream>& pFontStream,
45 CFGAS_FontMgr* pFontMgr, 47 CFGAS_FontMgr* pFontMgr,
46 bool bSaveStream); 48 bool bSaveStream);
47 #endif 49 #endif
48 50
49 ~CFGAS_GEFont() override;
50
51 CFX_RetainPtr<CFGAS_GEFont> Derive(uint32_t dwFontStyles, 51 CFX_RetainPtr<CFGAS_GEFont> Derive(uint32_t dwFontStyles,
52 uint16_t wCodePage = 0); 52 uint16_t wCodePage = 0);
53 uint32_t GetFontStyles() const; 53 uint32_t GetFontStyles() const;
54 bool GetCharWidth(FX_WCHAR wUnicode, int32_t& iWidth, bool bCharCode); 54 bool GetCharWidth(FX_WCHAR wUnicode, int32_t& iWidth, bool bCharCode);
55 int32_t GetGlyphIndex(FX_WCHAR wUnicode, bool bCharCode = false); 55 int32_t GetGlyphIndex(FX_WCHAR wUnicode, bool bCharCode = false);
56 int32_t GetAscent() const; 56 int32_t GetAscent() const;
57 int32_t GetDescent() const; 57 int32_t GetDescent() const;
58 bool GetCharBBox(FX_WCHAR wUnicode, CFX_Rect* bbox, bool bCharCode = false); 58 bool GetCharBBox(FX_WCHAR wUnicode, CFX_Rect* bbox, bool bCharCode = false);
59 bool GetBBox(CFX_Rect* bbox); 59 bool GetBBox(CFX_Rect* bbox);
60 CFX_RetainPtr<CFGAS_GEFont> GetSubstFont(int32_t iGlyphIndex) const; 60 CFX_RetainPtr<CFGAS_GEFont> GetSubstFont(int32_t iGlyphIndex);
61 CFX_Font* GetDevFont() const { return m_pFont; } 61 CFX_Font* GetDevFont() const { return m_pFont; }
62 void SetFontProvider(CXFA_PDFFontMgr* pProvider) { m_pProvider = pProvider; } 62 void SetFontProvider(CXFA_PDFFontMgr* pProvider) { m_pProvider = pProvider; }
63 #if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_ 63 #if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_
64 void SetLogicalFontStyle(uint32_t dwLogFontStyle) { 64 void SetLogicalFontStyle(uint32_t dwLogFontStyle) {
65 m_bUseLogFontStyle = true; 65 m_bUseLogFontStyle = true;
66 m_dwLogFontStyle = dwLogFontStyle; 66 m_dwLogFontStyle = dwLogFontStyle;
67 } 67 }
68 #endif 68 #endif
69 69
70 private: 70 private:
71 explicit CFGAS_GEFont(CFGAS_FontMgr* pFontMgr); 71 explicit CFGAS_GEFont(CFGAS_FontMgr* pFontMgr);
72 CFGAS_GEFont(const CFX_RetainPtr<CFGAS_GEFont>& src, uint32_t dwFontStyles); 72 CFGAS_GEFont(const CFX_RetainPtr<CFGAS_GEFont>& src, uint32_t dwFontStyles);
73 ~CFGAS_GEFont() override;
73 74
74 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ 75 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
75 bool LoadFontInternal(const FX_WCHAR* pszFontFamily, 76 bool LoadFontInternal(const FX_WCHAR* pszFontFamily,
76 uint32_t dwFontStyles, 77 uint32_t dwFontStyles,
77 uint16_t wCodePage); 78 uint16_t wCodePage);
78 bool LoadFontInternal(const uint8_t* pBuffer, int32_t length); 79 bool LoadFontInternal(const uint8_t* pBuffer, int32_t length);
79 bool LoadFontInternal(const CFX_RetainPtr<IFGAS_Stream>& pFontStream, 80 bool LoadFontInternal(const CFX_RetainPtr<IFGAS_Stream>& pFontStream,
80 bool bSaveStream); 81 bool bSaveStream);
81 #endif 82 #endif
82 bool LoadFontInternal(CFX_Font* pExternalFont); 83 bool LoadFontInternal(CFX_Font* pExternalFont);
(...skipping 26 matching lines...) Expand all
109 std::unique_ptr<CFX_UnicodeEncoding> m_pFontEncoding; 110 std::unique_ptr<CFX_UnicodeEncoding> m_pFontEncoding;
110 std::unique_ptr<CFX_DiscreteArrayTemplate<uint16_t>> m_pCharWidthMap; 111 std::unique_ptr<CFX_DiscreteArrayTemplate<uint16_t>> m_pCharWidthMap;
111 std::unique_ptr<CFX_MassArrayTemplate<CFX_Rect>> m_pRectArray; 112 std::unique_ptr<CFX_MassArrayTemplate<CFX_Rect>> m_pRectArray;
112 std::map<FX_WCHAR, CFX_Rect*> m_BBoxMap; // Rect owned by m_pRectArray. 113 std::map<FX_WCHAR, CFX_Rect*> m_BBoxMap; // Rect owned by m_pRectArray.
113 CXFA_PDFFontMgr* m_pProvider; // not owned. 114 CXFA_PDFFontMgr* m_pProvider; // not owned.
114 std::vector<CFX_RetainPtr<CFGAS_GEFont>> m_SubstFonts; 115 std::vector<CFX_RetainPtr<CFGAS_GEFont>> m_SubstFonts;
115 std::map<FX_WCHAR, CFX_RetainPtr<CFGAS_GEFont>> m_FontMapper; 116 std::map<FX_WCHAR, CFX_RetainPtr<CFGAS_GEFont>> m_FontMapper;
116 }; 117 };
117 118
118 #endif // XFA_FGAS_FONT_CFGAS_GEFONT_H_ 119 #endif // XFA_FGAS_FONT_CFGAS_GEFONT_H_
OLDNEW
« no previous file with comments | « xfa/fde/cfde_txtedtengine.cpp ('k') | xfa/fgas/font/cfgas_gefont.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698