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

Side by Side Diff: xfa/fgas/font/fgas_stdfontmgr.cpp

Issue 2033673002: Remove dead code in CFGAS_FontMgrImp. (Closed) Base URL: https://pdfium.googlesource.com/pdfium@rm_ifx_font
Patch Set: rebase Created 4 years, 6 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/fgas/font/fgas_stdfontmgr.h ('k') | xfa/fxfa/app/xfa_fontmgr.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 2015 PDFium Authors. All rights reserved. 1 // Copyright 2015 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/fgas/font/fgas_stdfontmgr.h" 7 #include "xfa/fgas/font/fgas_stdfontmgr.h"
8 8
9 #include "core/fxcrt/include/fx_stream.h" 9 #include "core/fxcrt/include/fx_stream.h"
10 #include "core/fxge/include/fx_ge.h" 10 #include "core/fxge/include/fx_ge.h"
11 #include "xfa/fgas/crt/fgas_codepage.h" 11 #include "xfa/fgas/crt/fgas_codepage.h"
12 #include "xfa/fgas/font/fgas_fontutils.h" 12 #include "xfa/fgas/font/fgas_fontutils.h"
13 #include "xfa/fgas/font/fgas_gefont.h" 13 #include "xfa/fgas/font/fgas_gefont.h"
14 14
15 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ 15 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
16 IFGAS_FontMgr* IFGAS_FontMgr::Create(FX_LPEnumAllFonts pEnumerator) { 16 IFGAS_FontMgr* IFGAS_FontMgr::Create(FX_LPEnumAllFonts pEnumerator) {
17 return new CFGAS_StdFontMgrImp(pEnumerator); 17 return new CFGAS_StdFontMgrImp(pEnumerator);
18 } 18 }
19 CFGAS_StdFontMgrImp::CFGAS_StdFontMgrImp(FX_LPEnumAllFonts pEnumerator) 19 CFGAS_StdFontMgrImp::CFGAS_StdFontMgrImp(FX_LPEnumAllFonts pEnumerator)
20 : m_pEnumerator(pEnumerator), 20 : m_pEnumerator(pEnumerator),
21 m_FontFaces(), 21 m_FontFaces(),
22 m_CPFonts(8), 22 m_CPFonts(8),
23 m_FamilyFonts(16), 23 m_FamilyFonts(16),
24 m_UnicodeFonts(16), 24 m_UnicodeFonts(16),
25 m_BufferFonts(4), 25 m_BufferFonts(4),
26 m_FileFonts(4),
27 m_StreamFonts(4), 26 m_StreamFonts(4),
28 m_DeriveFonts(4) { 27 m_DeriveFonts(4) {
29 if (m_pEnumerator) { 28 if (m_pEnumerator) {
30 m_pEnumerator(m_FontFaces, NULL, 0xFEFF); 29 m_pEnumerator(m_FontFaces, NULL, 0xFEFF);
31 } 30 }
32 } 31 }
33 32
34 CFGAS_StdFontMgrImp::~CFGAS_StdFontMgrImp() { 33 CFGAS_StdFontMgrImp::~CFGAS_StdFontMgrImp() {
35 m_FontFaces.RemoveAll(); 34 m_FontFaces.RemoveAll();
36 m_CPFonts.RemoveAll(); 35 m_CPFonts.RemoveAll();
37 m_FamilyFonts.RemoveAll(); 36 m_FamilyFonts.RemoveAll();
38 m_UnicodeFonts.RemoveAll(); 37 m_UnicodeFonts.RemoveAll();
39 m_BufferFonts.RemoveAll(); 38 m_BufferFonts.RemoveAll();
40 m_FileFonts.RemoveAll();
41 m_StreamFonts.RemoveAll(); 39 m_StreamFonts.RemoveAll();
42 m_DeriveFonts.RemoveAll(); 40 m_DeriveFonts.RemoveAll();
43 for (int32_t i = m_Fonts.GetUpperBound(); i >= 0; i--) 41 for (int32_t i = m_Fonts.GetUpperBound(); i >= 0; i--)
44 m_Fonts[i]->Release(); 42 m_Fonts[i]->Release();
45 } 43 }
46 44
47 CFGAS_GEFont* CFGAS_StdFontMgrImp::GetDefFontByCodePage( 45 CFGAS_GEFont* CFGAS_StdFontMgrImp::GetDefFontByCodePage(
48 uint16_t wCodePage, 46 uint16_t wCodePage,
49 uint32_t dwFontStyles, 47 uint32_t dwFontStyles,
50 const FX_WCHAR* pszFontFamily) { 48 const FX_WCHAR* pszFontFamily) {
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 } 165 }
168 } 166 }
169 pFont = CFGAS_GEFont::LoadFont(pBuffer, iLength, this); 167 pFont = CFGAS_GEFont::LoadFont(pBuffer, iLength, this);
170 if (pFont) { 168 if (pFont) {
171 m_Fonts.Add(pFont); 169 m_Fonts.Add(pFont);
172 m_BufferFonts.SetAt((void*)pBuffer, pFont); 170 m_BufferFonts.SetAt((void*)pBuffer, pFont);
173 return pFont->Retain(); 171 return pFont->Retain();
174 } 172 }
175 return NULL; 173 return NULL;
176 } 174 }
177 CFGAS_GEFont* CFGAS_StdFontMgrImp::LoadFont(const FX_WCHAR* pszFileName) { 175
178 ASSERT(pszFileName);
179 uint32_t dwHash = FX_HashCode_GetW(pszFileName, false);
180 CFGAS_GEFont* pFont = NULL;
181 if (m_FileFonts.Lookup((void*)(uintptr_t)dwHash, (void*&)pFont)) {
182 if (pFont) {
183 return pFont->Retain();
184 }
185 }
186 pFont = CFGAS_GEFont::LoadFont(pszFileName);
187 if (pFont) {
188 m_Fonts.Add(pFont);
189 m_FileFonts.SetAt((void*)(uintptr_t)dwHash, (void*)pFont);
190 return pFont->Retain();
191 }
192 return NULL;
193 }
194 CFGAS_GEFont* CFGAS_StdFontMgrImp::LoadFont(IFX_Stream* pFontStream, 176 CFGAS_GEFont* CFGAS_StdFontMgrImp::LoadFont(IFX_Stream* pFontStream,
195 const FX_WCHAR* pszFontAlias, 177 const FX_WCHAR* pszFontAlias,
196 uint32_t dwFontStyles, 178 uint32_t dwFontStyles,
197 uint16_t wCodePage, 179 uint16_t wCodePage,
198 FX_BOOL bSaveStream) { 180 FX_BOOL bSaveStream) {
199 ASSERT(pFontStream && pFontStream->GetLength() > 0); 181 ASSERT(pFontStream && pFontStream->GetLength() > 0);
200 CFGAS_GEFont* pFont = NULL; 182 CFGAS_GEFont* pFont = NULL;
201 if (m_StreamFonts.Lookup((void*)pFontStream, (void*&)pFont)) { 183 if (m_StreamFonts.Lookup((void*)pFontStream, (void*&)pFont)) {
202 if (pFont) { 184 if (pFont) {
203 if (pszFontAlias) { 185 if (pszFontAlias) {
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
270 } 252 }
271 fontMap.RemoveKey(pKey); 253 fontMap.RemoveKey(pKey);
272 break; 254 break;
273 } 255 }
274 } 256 }
275 void CFGAS_StdFontMgrImp::RemoveFont(CFGAS_GEFont* pFont) { 257 void CFGAS_StdFontMgrImp::RemoveFont(CFGAS_GEFont* pFont) {
276 RemoveFont(m_CPFonts, pFont); 258 RemoveFont(m_CPFonts, pFont);
277 RemoveFont(m_FamilyFonts, pFont); 259 RemoveFont(m_FamilyFonts, pFont);
278 RemoveFont(m_UnicodeFonts, pFont); 260 RemoveFont(m_UnicodeFonts, pFont);
279 RemoveFont(m_BufferFonts, pFont); 261 RemoveFont(m_BufferFonts, pFont);
280 RemoveFont(m_FileFonts, pFont);
281 RemoveFont(m_StreamFonts, pFont); 262 RemoveFont(m_StreamFonts, pFont);
282 RemoveFont(m_DeriveFonts, pFont); 263 RemoveFont(m_DeriveFonts, pFont);
283 int32_t iFind = m_Fonts.Find(pFont); 264 int32_t iFind = m_Fonts.Find(pFont);
284 if (iFind > -1) { 265 if (iFind > -1) {
285 m_Fonts.RemoveAt(iFind, 1); 266 m_Fonts.RemoveAt(iFind, 1);
286 } 267 }
287 } 268 }
288 FX_FONTDESCRIPTOR const* CFGAS_StdFontMgrImp::FindFont( 269 FX_FONTDESCRIPTOR const* CFGAS_StdFontMgrImp::FindFont(
289 const FX_WCHAR* pszFontFamily, 270 const FX_WCHAR* pszFontFamily,
290 uint32_t dwFontStyles, 271 uint32_t dwFontStyles,
(...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after
632 delete pDescs; 613 delete pDescs;
633 } 614 }
634 pos = m_Hash2Fonts.GetStartPosition(); 615 pos = m_Hash2Fonts.GetStartPosition();
635 while (pos) { 616 while (pos) {
636 uint32_t dwHash; 617 uint32_t dwHash;
637 CFX_ArrayTemplate<CFGAS_GEFont*>* pFonts; 618 CFX_ArrayTemplate<CFGAS_GEFont*>* pFonts;
638 m_Hash2Fonts.GetNextAssoc(pos, dwHash, pFonts); 619 m_Hash2Fonts.GetNextAssoc(pos, dwHash, pFonts);
639 delete pFonts; 620 delete pFonts;
640 } 621 }
641 m_Hash2Fonts.RemoveAll(); 622 m_Hash2Fonts.RemoveAll();
642 pos = m_Hash2FileAccess.GetStartPosition();
643 while (pos) {
644 uint32_t dwHash;
645 IFX_FileAccess* pFileAccess;
646 m_Hash2FileAccess.GetNextAssoc(pos, dwHash, pFileAccess);
647 if (NULL != pFileAccess) {
648 pFileAccess->Release();
649 }
650 }
651 pos = m_FileAccess2IFXFont.GetStartPosition();
652 while (pos) {
653 uint32_t dwHash;
654 CFGAS_GEFont* pFont;
655 m_FileAccess2IFXFont.GetNextAssoc(pos, dwHash, pFont);
656 if (NULL != pFont) {
657 pFont->Release();
658 }
659 }
660 pos = m_IFXFont2FileRead.GetStartPosition(); 623 pos = m_IFXFont2FileRead.GetStartPosition();
661 while (pos) { 624 while (pos) {
662 CFGAS_GEFont* pFont; 625 CFGAS_GEFont* pFont;
663 IFX_FileRead* pFileRead; 626 IFX_FileRead* pFileRead;
664 m_IFXFont2FileRead.GetNextAssoc(pos, pFont, pFileRead); 627 m_IFXFont2FileRead.GetNextAssoc(pos, pFont, pFileRead);
665 pFileRead->Release(); 628 pFileRead->Release();
666 } 629 }
667 delete this; 630 delete this;
668 } 631 }
669 CFGAS_GEFont* CFGAS_FontMgrImp::GetDefFontByCodePage( 632 CFGAS_GEFont* CFGAS_FontMgrImp::GetDefFontByCodePage(
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
717 sortedFonts = new CFX_FontDescriptorInfos; 680 sortedFonts = new CFX_FontDescriptorInfos;
718 MatchFonts(*sortedFonts, wCodePage, dwFontStyles, 681 MatchFonts(*sortedFonts, wCodePage, dwFontStyles,
719 CFX_WideString(pszFontFamily), 0); 682 CFX_WideString(pszFontFamily), 0);
720 m_Hash2CandidateList.SetAt(dwHash, sortedFonts); 683 m_Hash2CandidateList.SetAt(dwHash, sortedFonts);
721 } 684 }
722 if (sortedFonts->GetSize() == 0) 685 if (sortedFonts->GetSize() == 0)
723 return nullptr; 686 return nullptr;
724 687
725 CFX_FontDescriptor* pDesc = sortedFonts->GetAt(0).pFont; 688 CFX_FontDescriptor* pDesc = sortedFonts->GetAt(0).pFont;
726 CFGAS_GEFont* pFont = 689 CFGAS_GEFont* pFont =
727 pDesc->m_pFileAccess 690 LoadFont(pDesc->m_wsFaceName, pDesc->m_nFaceIndex, nullptr);
728 ? LoadFont(pDesc->m_pFileAccess, pDesc->m_nFaceIndex, nullptr)
729 : LoadFont(pDesc->m_wsFaceName, pDesc->m_nFaceIndex, nullptr);
730 if (pFont) 691 if (pFont)
731 pFont->SetLogicalFontStyle(dwFontStyles); 692 pFont->SetLogicalFontStyle(dwFontStyles);
732 693
733 pFonts->Add(pFont); 694 pFonts->Add(pFont);
734 return pFont; 695 return pFont;
735 } 696 }
736 CFGAS_GEFont* CFGAS_FontMgrImp::GetFontByCharset( 697 CFGAS_GEFont* CFGAS_FontMgrImp::GetFontByCharset(
737 uint8_t nCharset, 698 uint8_t nCharset,
738 uint32_t dwFontStyles, 699 uint32_t dwFontStyles,
739 const FX_WCHAR* pszFontFamily) { 700 const FX_WCHAR* pszFontFamily) {
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
773 if (!m_Hash2CandidateList.Lookup(dwHash, sortedFonts)) { 734 if (!m_Hash2CandidateList.Lookup(dwHash, sortedFonts)) {
774 sortedFonts = new CFX_FontDescriptorInfos; 735 sortedFonts = new CFX_FontDescriptorInfos;
775 MatchFonts(*sortedFonts, wCodePage, dwFontStyles, 736 MatchFonts(*sortedFonts, wCodePage, dwFontStyles,
776 CFX_WideString(pszFontFamily), wUnicode); 737 CFX_WideString(pszFontFamily), wUnicode);
777 m_Hash2CandidateList.SetAt(dwHash, sortedFonts); 738 m_Hash2CandidateList.SetAt(dwHash, sortedFonts);
778 } 739 }
779 for (int32_t i = 0; i < sortedFonts->GetSize(); ++i) { 740 for (int32_t i = 0; i < sortedFonts->GetSize(); ++i) {
780 CFX_FontDescriptor* pDesc = sortedFonts->GetAt(i).pFont; 741 CFX_FontDescriptor* pDesc = sortedFonts->GetAt(i).pFont;
781 if (!VerifyUnicode(pDesc, wUnicode)) 742 if (!VerifyUnicode(pDesc, wUnicode))
782 continue; 743 continue;
783 if (pDesc->m_pFileAccess) 744 pFont = LoadFont(pDesc->m_wsFaceName, pDesc->m_nFaceIndex, nullptr);
784 pFont = LoadFont(pDesc->m_pFileAccess, pDesc->m_nFaceIndex, nullptr);
785 else
786 pFont = LoadFont(pDesc->m_wsFaceName, pDesc->m_nFaceIndex, nullptr);
787 if (!pFont) 745 if (!pFont)
788 continue; 746 continue;
789 pFont->SetLogicalFontStyle(dwFontStyles); 747 pFont->SetLogicalFontStyle(dwFontStyles);
790 pFonts->Add(pFont); 748 pFonts->Add(pFont);
791 return pFont; 749 return pFont;
792 } 750 }
793 if (!pszFontFamily) 751 if (!pszFontFamily)
794 m_FailedUnicodes2NULL.SetAt(wUnicode, nullptr); 752 m_FailedUnicodes2NULL.SetAt(wUnicode, nullptr);
795 return nullptr; 753 return nullptr;
796 } 754 }
797 FX_BOOL CFGAS_FontMgrImp::VerifyUnicode(CFX_FontDescriptor* pDesc, 755 FX_BOOL CFGAS_FontMgrImp::VerifyUnicode(CFX_FontDescriptor* pDesc,
798 FX_WCHAR wcUnicode) { 756 FX_WCHAR wcUnicode) {
799 IFX_FileRead* pFileRead = nullptr; 757 IFX_FileRead* pFileRead = CreateFontStream(pDesc->m_wsFaceName.UTF8Encode());
800 if (pDesc->m_pFileAccess)
801 pFileRead = pDesc->m_pFileAccess->CreateFileStream(FX_FILEMODE_ReadOnly);
802 else
803 pFileRead = CreateFontStream(pDesc->m_wsFaceName.UTF8Encode());
804 if (!pFileRead) 758 if (!pFileRead)
805 return FALSE; 759 return FALSE;
806 FXFT_Face pFace = LoadFace(pFileRead, pDesc->m_nFaceIndex); 760 FXFT_Face pFace = LoadFace(pFileRead, pDesc->m_nFaceIndex);
807 FT_Error retCharmap = FXFT_Select_Charmap(pFace, FXFT_ENCODING_UNICODE); 761 FT_Error retCharmap = FXFT_Select_Charmap(pFace, FXFT_ENCODING_UNICODE);
808 FT_Error retIndex = FXFT_Get_Char_Index(pFace, wcUnicode); 762 FT_Error retIndex = FXFT_Get_Char_Index(pFace, wcUnicode);
809 pFileRead->Release(); 763 pFileRead->Release();
810 if (!pFace) 764 if (!pFace)
811 return FALSE; 765 return FALSE;
812 if (FXFT_Get_Face_External_Stream(pFace)) 766 if (FXFT_Get_Face_External_Stream(pFace))
813 FXFT_Clear_Face_External_Stream(pFace); 767 FXFT_Clear_Face_External_Stream(pFace);
(...skipping 19 matching lines...) Expand all
833 } 787 }
834 788
835 CFGAS_GEFont* CFGAS_FontMgrImp::GetFontByLanguage( 789 CFGAS_GEFont* CFGAS_FontMgrImp::GetFontByLanguage(
836 uint16_t wLanguage, 790 uint16_t wLanguage,
837 uint32_t dwFontStyles, 791 uint32_t dwFontStyles,
838 const FX_WCHAR* pszFontFamily) { 792 const FX_WCHAR* pszFontFamily) {
839 return GetFontByCodePage(FX_GetDefCodePageByLanguage(wLanguage), dwFontStyles, 793 return GetFontByCodePage(FX_GetDefCodePageByLanguage(wLanguage), dwFontStyles,
840 pszFontFamily); 794 pszFontFamily);
841 } 795 }
842 796
843 CFGAS_GEFont* CFGAS_FontMgrImp::LoadFont(const uint8_t* pBuffer,
844 int32_t iLength,
845 int32_t iFaceIndex,
846 int32_t* pFaceCount) {
847 void* Hash[2] = {(void*)(uintptr_t)pBuffer, (void*)(uintptr_t)iLength};
848 uint32_t dwHash =
849 FX_HashCode_GetA(CFX_ByteStringC((uint8_t*)Hash, sizeof(Hash)), false);
850 IFX_FileAccess* pFontAccess = nullptr;
851 m_Hash2FileAccess.Lookup(dwHash, pFontAccess);
852 return pFontAccess ? LoadFont(pFontAccess, iFaceIndex, pFaceCount, TRUE)
853 : nullptr;
854 }
855
856 CFGAS_GEFont* CFGAS_FontMgrImp::LoadFont(const FX_WCHAR* pszFileName,
857 int32_t iFaceIndex,
858 int32_t* pFaceCount) {
859 CFX_ByteString bsHash;
860 bsHash += CFX_WideString(pszFileName).UTF8Encode();
861
862 uint32_t dwHash = FX_HashCode_GetA(bsHash.AsStringC(), false);
863 IFX_FileAccess* pFontAccess = nullptr;
864 if (!m_Hash2FileAccess.Lookup(dwHash, pFontAccess)) {
865 pFontAccess = FX_CreateDefaultFileAccess(pszFileName);
866 m_Hash2FileAccess.SetAt(dwHash, pFontAccess);
867 }
868
869 return pFontAccess ? LoadFont(pFontAccess, iFaceIndex, pFaceCount, TRUE)
870 : nullptr;
871 }
872
873 CFGAS_GEFont* CFGAS_FontMgrImp::LoadFont(IFX_Stream* pFontStream,
874 int32_t iFaceIndex,
875 int32_t* pFaceCount,
876 FX_BOOL bSaveStream) {
877 void* Hash[1] = {(void*)(uintptr_t)pFontStream};
878 uint32_t dwHash =
879 FX_HashCode_GetA(CFX_ByteStringC((uint8_t*)Hash, sizeof(Hash)), false);
880 IFX_FileAccess* pFontAccess = nullptr;
881 m_Hash2FileAccess.Lookup(dwHash, pFontAccess);
882
883 return pFontAccess ? LoadFont(pFontAccess, iFaceIndex, pFaceCount, TRUE)
884 : nullptr;
885 }
886
887 CFGAS_GEFont* CFGAS_FontMgrImp::LoadFont(IFX_FileAccess* pFontAccess,
888 int32_t iFaceIndex,
889 int32_t* pFaceCount,
890 FX_BOOL bWantCache) {
891 uint32_t dwHash = 0;
892 CFGAS_GEFont* pFont = nullptr;
893 if (bWantCache) {
894 CFX_ByteString bsHash;
895 bsHash.Format("%d, %d", (uintptr_t)pFontAccess, iFaceIndex);
896 dwHash = FX_HashCode_GetA(bsHash.AsStringC(), false);
897 if (m_FileAccess2IFXFont.Lookup(dwHash, pFont)) {
898 if (pFont) {
899 if (pFaceCount)
900 *pFaceCount = pFont->GetDevFont()->GetFace()->num_faces;
901 return pFont->Retain();
902 }
903 }
904 }
905
906 CFX_Font* pInternalFont = new CFX_Font;
907 IFX_FileRead* pFontStream =
908 pFontAccess->CreateFileStream(FX_FILEMODE_ReadOnly);
909 if (!pFontStream) {
910 delete pInternalFont;
911 return nullptr;
912 }
913 if (!pInternalFont->LoadFile(pFontStream, iFaceIndex)) {
914 delete pInternalFont;
915 pFontStream->Release();
916 return nullptr;
917 }
918 pFont = CFGAS_GEFont::LoadFont(pInternalFont, this, TRUE);
919 if (!pFont) {
920 delete pInternalFont;
921 pFontStream->Release();
922 return nullptr;
923 }
924 if (bWantCache)
925 m_FileAccess2IFXFont.SetAt(dwHash, pFont);
926
927 m_IFXFont2FileRead.SetAt(pFont, pFontStream);
928 if (pFaceCount)
929 *pFaceCount = pFont->GetDevFont()->GetFace()->num_faces;
930
931 return pFont;
932 }
933
934 CFGAS_GEFont* CFGAS_FontMgrImp::LoadFont(const CFX_WideString& wsFaceName, 797 CFGAS_GEFont* CFGAS_FontMgrImp::LoadFont(const CFX_WideString& wsFaceName,
935 int32_t iFaceIndex, 798 int32_t iFaceIndex,
936 int32_t* pFaceCount) { 799 int32_t* pFaceCount) {
937 CFX_FontMgr* pFontMgr = CFX_GEModule::Get()->GetFontMgr(); 800 CFX_FontMgr* pFontMgr = CFX_GEModule::Get()->GetFontMgr();
938 CFX_FontMapper* pFontMapper = pFontMgr->GetBuiltinMapper(); 801 CFX_FontMapper* pFontMapper = pFontMgr->GetBuiltinMapper();
939 if (!pFontMapper) 802 if (!pFontMapper)
940 return nullptr; 803 return nullptr;
941 804
942 IFX_SystemFontInfo* pSystemFontInfo = pFontMapper->GetSystemFontInfo(); 805 IFX_SystemFontInfo* pSystemFontInfo = pFontMapper->GetSystemFontInfo();
943 if (!pSystemFontInfo) 806 if (!pSystemFontInfo)
944 return nullptr; 807 return nullptr;
945 808
946 IFX_FileRead* pFontStream = CreateFontStream(wsFaceName.UTF8Encode()); 809 IFX_FileRead* pFontStream = CreateFontStream(wsFaceName.UTF8Encode());
947 if (!pFontStream) 810 if (!pFontStream)
948 return nullptr; 811 return nullptr;
949 812
950 if (!LoadFace(pFontStream, 0)) { 813 if (!LoadFace(pFontStream, 0)) {
951 pFontStream->Release(); 814 pFontStream->Release();
952 return nullptr; 815 return nullptr;
953 } 816 }
954 817
955 CFX_Font* pInternalFont = new CFX_Font(); 818 CFX_Font* pInternalFont = new CFX_Font();
956 if (!pInternalFont->LoadFile(pFontStream, iFaceIndex)) { 819 if (!pInternalFont->LoadFile(pFontStream, iFaceIndex)) {
957 pFontStream->Release(); 820 pFontStream->Release();
958 return nullptr; 821 return nullptr;
959 } 822 }
960 823
961 CFGAS_GEFont* pFont = CFGAS_GEFont::LoadFont(pInternalFont, this, FALSE); 824 CFGAS_GEFont* pFont = CFGAS_GEFont::LoadFont(pInternalFont, this);
962 if (!pFont) { 825 if (!pFont) {
963 pFontStream->Release(); 826 pFontStream->Release();
964 return nullptr; 827 return nullptr;
965 } 828 }
966 829
967 m_IFXFont2FileRead.SetAt(pFont, pFontStream); 830 m_IFXFont2FileRead.SetAt(pFont, pFontStream);
968 if (pFaceCount) 831 if (pFaceCount)
969 *pFaceCount = pFont->GetDevFont()->GetFace()->num_faces; 832 *pFaceCount = pFont->GetDevFont()->GetFace()->num_faces;
970 833
971 return pFont; 834 return pFont;
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after
1212 return nPenalty; 1075 return nPenalty;
1213 } 1076 }
1214 void CFGAS_FontMgrImp::ClearFontCache() { 1077 void CFGAS_FontMgrImp::ClearFontCache() {
1215 FX_POSITION pos = m_Hash2CandidateList.GetStartPosition(); 1078 FX_POSITION pos = m_Hash2CandidateList.GetStartPosition();
1216 while (pos) { 1079 while (pos) {
1217 uint32_t dwHash; 1080 uint32_t dwHash;
1218 CFX_FontDescriptorInfos* pDescs; 1081 CFX_FontDescriptorInfos* pDescs;
1219 m_Hash2CandidateList.GetNextAssoc(pos, dwHash, pDescs); 1082 m_Hash2CandidateList.GetNextAssoc(pos, dwHash, pDescs);
1220 delete pDescs; 1083 delete pDescs;
1221 } 1084 }
1222 pos = m_FileAccess2IFXFont.GetStartPosition();
1223 while (pos) {
1224 uint32_t dwHash;
1225 CFGAS_GEFont* pFont;
1226 m_FileAccess2IFXFont.GetNextAssoc(pos, dwHash, pFont);
1227 if (NULL != pFont) {
1228 pFont->Release();
1229 }
1230 }
1231 pos = m_IFXFont2FileRead.GetStartPosition(); 1085 pos = m_IFXFont2FileRead.GetStartPosition();
1232 while (pos) { 1086 while (pos) {
1233 CFGAS_GEFont* pFont; 1087 CFGAS_GEFont* pFont;
1234 IFX_FileRead* pFileRead; 1088 IFX_FileRead* pFileRead;
1235 m_IFXFont2FileRead.GetNextAssoc(pos, pFont, pFileRead); 1089 m_IFXFont2FileRead.GetNextAssoc(pos, pFont, pFileRead);
1236 pFileRead->Release(); 1090 pFileRead->Release();
1237 } 1091 }
1238 } 1092 }
1239 void CFGAS_FontMgrImp::RemoveFont(CFGAS_GEFont* pEFont) { 1093 void CFGAS_FontMgrImp::RemoveFont(CFGAS_GEFont* pEFont) {
1240 if (NULL == pEFont) { 1094 if (NULL == pEFont) {
1241 return; 1095 return;
1242 } 1096 }
1243 IFX_FileRead* pFileRead; 1097 IFX_FileRead* pFileRead;
1244 if (m_IFXFont2FileRead.Lookup(pEFont, pFileRead)) { 1098 if (m_IFXFont2FileRead.Lookup(pEFont, pFileRead)) {
1245 pFileRead->Release(); 1099 pFileRead->Release();
1246 m_IFXFont2FileRead.RemoveKey(pEFont); 1100 m_IFXFont2FileRead.RemoveKey(pEFont);
1247 } 1101 }
1248 FX_POSITION pos; 1102 FX_POSITION pos;
1249 pos = m_FileAccess2IFXFont.GetStartPosition();
1250 while (pos) {
1251 uint32_t dwHash;
1252 CFGAS_GEFont* pCFont;
1253 m_FileAccess2IFXFont.GetNextAssoc(pos, dwHash, pCFont);
1254 if (pCFont == pEFont) {
1255 m_FileAccess2IFXFont.RemoveKey(dwHash);
1256 break;
1257 }
1258 }
1259 pos = m_Hash2Fonts.GetStartPosition(); 1103 pos = m_Hash2Fonts.GetStartPosition();
1260 while (pos) { 1104 while (pos) {
1261 uint32_t dwHash; 1105 uint32_t dwHash;
1262 CFX_ArrayTemplate<CFGAS_GEFont*>* pFonts; 1106 CFX_ArrayTemplate<CFGAS_GEFont*>* pFonts;
1263 m_Hash2Fonts.GetNextAssoc(pos, dwHash, pFonts); 1107 m_Hash2Fonts.GetNextAssoc(pos, dwHash, pFonts);
1264 if (NULL != pFonts) { 1108 if (NULL != pFonts) {
1265 for (int32_t i = 0; i < pFonts->GetSize(); i++) { 1109 for (int32_t i = 0; i < pFonts->GetSize(); i++) {
1266 if (pFonts->GetAt(i) == pEFont) { 1110 if (pFonts->GetAt(i) == pEFont) {
1267 pFonts->SetAt(i, NULL); 1111 pFonts->SetAt(i, NULL);
1268 } 1112 }
1269 } 1113 }
1270 } else { 1114 } else {
1271 m_Hash2Fonts.RemoveKey(dwHash); 1115 m_Hash2Fonts.RemoveKey(dwHash);
1272 } 1116 }
1273 } 1117 }
1274 } 1118 }
1275 1119
1276 void CFGAS_FontMgrImp::RegisterFace(FXFT_Face pFace, 1120 void CFGAS_FontMgrImp::RegisterFace(FXFT_Face pFace,
1277 CFX_FontDescriptors& Fonts, 1121 CFX_FontDescriptors& Fonts,
1278 const CFX_WideString* pFaceName, 1122 const CFX_WideString* pFaceName) {
1279 IFX_FileAccess* pFontAccess) {
1280 if ((pFace->face_flags & FT_FACE_FLAG_SCALABLE) == 0) 1123 if ((pFace->face_flags & FT_FACE_FLAG_SCALABLE) == 0)
1281 return; 1124 return;
1282 1125
1283 CFX_FontDescriptor* pFont = new CFX_FontDescriptor; 1126 CFX_FontDescriptor* pFont = new CFX_FontDescriptor;
1284 pFont->m_dwFontStyles |= FXFT_Is_Face_Bold(pFace) ? FX_FONTSTYLE_Bold : 0; 1127 pFont->m_dwFontStyles |= FXFT_Is_Face_Bold(pFace) ? FX_FONTSTYLE_Bold : 0;
1285 pFont->m_dwFontStyles |= FXFT_Is_Face_Italic(pFace) ? FX_FONTSTYLE_Italic : 0; 1128 pFont->m_dwFontStyles |= FXFT_Is_Face_Italic(pFace) ? FX_FONTSTYLE_Italic : 0;
1286 pFont->m_dwFontStyles |= GetFlags(pFace); 1129 pFont->m_dwFontStyles |= GetFlags(pFace);
1287 1130
1288 CFX_ArrayTemplate<uint16_t> Charsets; 1131 CFX_ArrayTemplate<uint16_t> Charsets;
1289 GetCharsets(pFace, Charsets); 1132 GetCharsets(pFace, Charsets);
(...skipping 15 matching lines...) Expand all
1305 } 1148 }
1306 GetNames(pTable, pFont->m_wsFamilyNames); 1149 GetNames(pTable, pFont->m_wsFamilyNames);
1307 if (pTable) 1150 if (pTable)
1308 FX_Free(pTable); 1151 FX_Free(pTable);
1309 1152
1310 pFont->m_wsFamilyNames.Add(CFX_ByteString(pFace->family_name).UTF8Decode()); 1153 pFont->m_wsFamilyNames.Add(CFX_ByteString(pFace->family_name).UTF8Decode());
1311 pFont->m_wsFaceName = 1154 pFont->m_wsFaceName =
1312 pFaceName ? *pFaceName 1155 pFaceName ? *pFaceName
1313 : CFX_WideString::FromLocal(FXFT_Get_Postscript_Name(pFace)); 1156 : CFX_WideString::FromLocal(FXFT_Get_Postscript_Name(pFace));
1314 pFont->m_nFaceIndex = pFace->face_index; 1157 pFont->m_nFaceIndex = pFace->face_index;
1315 pFont->m_pFileAccess = pFontAccess ? pFontAccess->Retain() : nullptr;
1316 1158
1317 Fonts.Add(pFont); 1159 Fonts.Add(pFont);
1318 } 1160 }
1319 1161
1320 void CFGAS_FontMgrImp::RegisterFaces(IFX_FileRead* pFontStream, 1162 void CFGAS_FontMgrImp::RegisterFaces(IFX_FileRead* pFontStream,
1321 const CFX_WideString* pFaceName) { 1163 const CFX_WideString* pFaceName) {
1322 int32_t index = 0; 1164 int32_t index = 0;
1323 int32_t num_faces = 0; 1165 int32_t num_faces = 0;
1324 do { 1166 do {
1325 FXFT_Face pFace = LoadFace(pFontStream, index++); 1167 FXFT_Face pFace = LoadFace(pFontStream, index++);
1326 if (!pFace) 1168 if (!pFace)
1327 continue; 1169 continue;
1328 // All faces keep number of faces. It can be retrieved from any one face. 1170 // All faces keep number of faces. It can be retrieved from any one face.
1329 if (num_faces == 0) 1171 if (num_faces == 0)
1330 num_faces = pFace->num_faces; 1172 num_faces = pFace->num_faces;
1331 RegisterFace(pFace, m_InstalledFonts, pFaceName, nullptr); 1173 RegisterFace(pFace, m_InstalledFonts, pFaceName);
1332 if (FXFT_Get_Face_External_Stream(pFace)) 1174 if (FXFT_Get_Face_External_Stream(pFace))
1333 FXFT_Clear_Face_External_Stream(pFace); 1175 FXFT_Clear_Face_External_Stream(pFace);
1334 FXFT_Done_Face(pFace); 1176 FXFT_Done_Face(pFace);
1335 } while (index < num_faces); 1177 } while (index < num_faces);
1336 } 1178 }
1337 uint32_t CFGAS_FontMgrImp::GetFlags(FXFT_Face pFace) { 1179 uint32_t CFGAS_FontMgrImp::GetFlags(FXFT_Face pFace) {
1338 uint32_t flag = 0; 1180 uint32_t flag = 0;
1339 if (FT_IS_FIXED_WIDTH(pFace)) { 1181 if (FT_IS_FIXED_WIDTH(pFace)) {
1340 flag |= FX_FONTSTYLE_FixedPitch; 1182 flag |= FX_FONTSTYLE_FixedPitch;
1341 } 1183 }
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
1502 } 1344 }
1503 } 1345 }
1504 int32_t CFGAS_FontMgrImp::IsPartName(const CFX_WideString& Name1, 1346 int32_t CFGAS_FontMgrImp::IsPartName(const CFX_WideString& Name1,
1505 const CFX_WideString& Name2) { 1347 const CFX_WideString& Name2) {
1506 if (Name1.Find(Name2.c_str()) != -1) { 1348 if (Name1.Find(Name2.c_str()) != -1) {
1507 return 1; 1349 return 1;
1508 } 1350 }
1509 return 0; 1351 return 0;
1510 } 1352 }
1511 #endif 1353 #endif
OLDNEW
« no previous file with comments | « xfa/fgas/font/fgas_stdfontmgr.h ('k') | xfa/fxfa/app/xfa_fontmgr.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698