| OLD | NEW |
| 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 "../../public/fpdf_sysfontinfo.h" | 7 #include "../../public/fpdf_sysfontinfo.h" |
| 8 #include "../include/fsdk_define.h" | 8 #include "../include/fsdk_define.h" |
| 9 #include "../include/pdfwindow/PWL_FontMap.h" | 9 #include "../include/pdfwindow/PWL_FontMap.h" |
| 10 | 10 |
| 11 class CFX_ExternalFontInfo final : public IFX_SystemFontInfo | 11 class CFX_ExternalFontInfo final : public IFX_SystemFontInfo { |
| 12 { | 12 public: |
| 13 public: | 13 CFX_ExternalFontInfo(FPDF_SYSFONTINFO* pInfo) : m_pInfo(pInfo) {} |
| 14 » CFX_ExternalFontInfo(FPDF_SYSFONTINFO* pInfo) : m_pInfo(pInfo) { } | |
| 15 | 14 |
| 16 » virtual void» » Release() override | 15 virtual void Release() override { |
| 17 » { | 16 if (m_pInfo->Release) |
| 18 » » if (m_pInfo->Release) | 17 m_pInfo->Release(m_pInfo); |
| 19 » » » m_pInfo->Release(m_pInfo); | 18 delete this; |
| 20 » » delete this; | 19 } |
| 21 » } | |
| 22 | 20 |
| 23 » virtual»FX_BOOL»» EnumFontList(CFX_FontMapper* pMapper) override | 21 virtual FX_BOOL EnumFontList(CFX_FontMapper* pMapper) override { |
| 24 » { | 22 if (m_pInfo->EnumFonts) { |
| 25 » » if (m_pInfo->EnumFonts) { | 23 m_pInfo->EnumFonts(m_pInfo, pMapper); |
| 26 » » » m_pInfo->EnumFonts(m_pInfo, pMapper); | 24 return TRUE; |
| 27 » » » return TRUE; | 25 } |
| 28 » » } | 26 return FALSE; |
| 29 » » return FALSE; | 27 } |
| 30 » } | |
| 31 | 28 |
| 32 » virtual void*» » MapFont(int weight, FX_BOOL bItalic, int charset
, int pitch_family, const FX_CHAR* family, int& iExact) override | 29 virtual void* MapFont(int weight, |
| 33 » { | 30 FX_BOOL bItalic, |
| 34 » » if (m_pInfo->MapFont) | 31 int charset, |
| 35 » » » return m_pInfo->MapFont(m_pInfo, weight, bItalic, charse
t, pitch_family, family, &iExact); | 32 int pitch_family, |
| 36 » » return NULL; | 33 const FX_CHAR* family, |
| 37 » } | 34 int& iExact) override { |
| 35 if (m_pInfo->MapFont) |
| 36 return m_pInfo->MapFont(m_pInfo, weight, bItalic, charset, pitch_family, |
| 37 family, &iExact); |
| 38 return NULL; |
| 39 } |
| 38 | 40 |
| 39 » virtual void*» » GetFont(const FX_CHAR* family) override | 41 virtual void* GetFont(const FX_CHAR* family) override { |
| 40 » { | 42 if (m_pInfo->GetFont) |
| 41 » » if (m_pInfo->GetFont) | 43 return m_pInfo->GetFont(m_pInfo, family); |
| 42 » » » return m_pInfo->GetFont(m_pInfo, family); | 44 return NULL; |
| 43 » » return NULL; | 45 } |
| 44 » } | |
| 45 | 46 |
| 46 » virtual FX_DWORD» GetFontData(void* hFont, FX_DWORD table, uint8_t
* buffer, FX_DWORD size) override | 47 virtual FX_DWORD GetFontData(void* hFont, |
| 47 » { | 48 FX_DWORD table, |
| 48 » » if (m_pInfo->GetFontData) | 49 uint8_t* buffer, |
| 49 » » » return m_pInfo->GetFontData(m_pInfo, hFont, table, buffe
r, size); | 50 FX_DWORD size) override { |
| 50 » » return 0; | 51 if (m_pInfo->GetFontData) |
| 51 » } | 52 return m_pInfo->GetFontData(m_pInfo, hFont, table, buffer, size); |
| 53 return 0; |
| 54 } |
| 52 | 55 |
| 53 » virtual FX_BOOL»» GetFaceName(void* hFont, CFX_ByteString& name)
override | 56 virtual FX_BOOL GetFaceName(void* hFont, CFX_ByteString& name) override { |
| 54 » { | 57 if (m_pInfo->GetFaceName == NULL) |
| 55 » » if (m_pInfo->GetFaceName == NULL) return FALSE; | 58 return FALSE; |
| 56 » » FX_DWORD size = m_pInfo->GetFaceName(m_pInfo, hFont, NULL, 0); | 59 FX_DWORD size = m_pInfo->GetFaceName(m_pInfo, hFont, NULL, 0); |
| 57 » » if (size == 0) return FALSE; | 60 if (size == 0) |
| 58 » » char* buffer = FX_Alloc(char, size); | 61 return FALSE; |
| 59 » » size = m_pInfo->GetFaceName(m_pInfo, hFont, buffer, size); | 62 char* buffer = FX_Alloc(char, size); |
| 60 » » name = CFX_ByteString(buffer, size); | 63 size = m_pInfo->GetFaceName(m_pInfo, hFont, buffer, size); |
| 61 » » FX_Free(buffer); | 64 name = CFX_ByteString(buffer, size); |
| 62 » » return TRUE; | 65 FX_Free(buffer); |
| 63 » } | 66 return TRUE; |
| 67 } |
| 64 | 68 |
| 65 » virtual FX_BOOL»» GetFontCharset(void* hFont, int& charset) overr
ide | 69 virtual FX_BOOL GetFontCharset(void* hFont, int& charset) override { |
| 66 » { | 70 if (m_pInfo->GetFontCharset) { |
| 67 » » if (m_pInfo->GetFontCharset) { | 71 charset = m_pInfo->GetFontCharset(m_pInfo, hFont); |
| 68 » » » charset = m_pInfo->GetFontCharset(m_pInfo, hFont); | 72 return TRUE; |
| 69 » » » return TRUE; | 73 } |
| 70 » » } | 74 return FALSE; |
| 71 » » return FALSE; | 75 } |
| 72 » } | |
| 73 | 76 |
| 74 » virtual void» » DeleteFont(void* hFont) override | 77 virtual void DeleteFont(void* hFont) override { |
| 75 » { | 78 if (m_pInfo->DeleteFont) |
| 76 » » if (m_pInfo->DeleteFont) | 79 m_pInfo->DeleteFont(m_pInfo, hFont); |
| 77 » » » m_pInfo->DeleteFont(m_pInfo, hFont); | 80 } |
| 78 » } | |
| 79 | 81 |
| 80 private: | 82 private: |
| 81 » ~CFX_ExternalFontInfo() { } | 83 ~CFX_ExternalFontInfo() {} |
| 82 | 84 |
| 83 » FPDF_SYSFONTINFO* const m_pInfo; | 85 FPDF_SYSFONTINFO* const m_pInfo; |
| 84 }; | 86 }; |
| 85 | 87 |
| 86 DLLEXPORT void STDCALL FPDF_AddInstalledFont(void* mapper, const char* name, int
charset) | 88 DLLEXPORT void STDCALL FPDF_AddInstalledFont(void* mapper, |
| 87 { | 89 const char* name, |
| 88 » ((CFX_FontMapper*)mapper)->AddInstalledFont(name, charset); | 90 int charset) { |
| 91 ((CFX_FontMapper*)mapper)->AddInstalledFont(name, charset); |
| 89 } | 92 } |
| 90 | 93 |
| 91 DLLEXPORT void STDCALL FPDF_SetSystemFontInfo(FPDF_SYSFONTINFO* pFontInfoExt) | 94 DLLEXPORT void STDCALL FPDF_SetSystemFontInfo(FPDF_SYSFONTINFO* pFontInfoExt) { |
| 92 { | 95 if (pFontInfoExt->version != 1) |
| 93 » if (pFontInfoExt->version != 1) | 96 return; |
| 94 » » return; | |
| 95 | 97 |
| 96 » CFX_GEModule::Get()->GetFontMgr()->SetSystemFontInfo( | 98 CFX_GEModule::Get()->GetFontMgr()->SetSystemFontInfo( |
| 97 » » new CFX_ExternalFontInfo(pFontInfoExt)); | 99 new CFX_ExternalFontInfo(pFontInfoExt)); |
| 98 } | 100 } |
| 99 | 101 |
| 100 DLLEXPORT const FPDF_CharsetFontMap* STDCALL FPDF_GetDefaultTTFMap() | 102 DLLEXPORT const FPDF_CharsetFontMap* STDCALL FPDF_GetDefaultTTFMap() { |
| 101 { | 103 return CPWL_FontMap::defaultTTFMap; |
| 102 return CPWL_FontMap::defaultTTFMap; | |
| 103 } | 104 } |
| 104 | 105 |
| 105 struct FPDF_SYSFONTINFO_DEFAULT : public FPDF_SYSFONTINFO | 106 struct FPDF_SYSFONTINFO_DEFAULT : public FPDF_SYSFONTINFO { |
| 106 { | 107 IFX_SystemFontInfo* m_pFontInfo; |
| 107 » IFX_SystemFontInfo*» m_pFontInfo; | |
| 108 }; | 108 }; |
| 109 | 109 |
| 110 static void DefaultRelease(struct _FPDF_SYSFONTINFO* pThis) | 110 static void DefaultRelease(struct _FPDF_SYSFONTINFO* pThis) { |
| 111 { | 111 ((FPDF_SYSFONTINFO_DEFAULT*)pThis)->m_pFontInfo->Release(); |
| 112 » ((FPDF_SYSFONTINFO_DEFAULT*)pThis)->m_pFontInfo->Release(); | |
| 113 } | 112 } |
| 114 | 113 |
| 115 static void DefaultEnumFonts(struct _FPDF_SYSFONTINFO* pThis, void* pMapper) | 114 static void DefaultEnumFonts(struct _FPDF_SYSFONTINFO* pThis, void* pMapper) { |
| 116 { | 115 ((FPDF_SYSFONTINFO_DEFAULT*)pThis) |
| 117 » ((FPDF_SYSFONTINFO_DEFAULT*)pThis)->m_pFontInfo->EnumFontList((CFX_FontM
apper*)pMapper); | 116 ->m_pFontInfo->EnumFontList((CFX_FontMapper*)pMapper); |
| 118 } | 117 } |
| 119 | 118 |
| 120 static void* DefaultMapFont(struct _FPDF_SYSFONTINFO* pThis, int weight, int bIt
alic, int charset, int pitch_family, const char* family, int* bExact) | 119 static void* DefaultMapFont(struct _FPDF_SYSFONTINFO* pThis, |
| 121 { | 120 int weight, |
| 122 » return ((FPDF_SYSFONTINFO_DEFAULT*)pThis)->m_pFontInfo->MapFont(weight,
bItalic, charset, pitch_family, family, *bExact); | 121 int bItalic, |
| 122 int charset, |
| 123 int pitch_family, |
| 124 const char* family, |
| 125 int* bExact) { |
| 126 return ((FPDF_SYSFONTINFO_DEFAULT*)pThis) |
| 127 ->m_pFontInfo->MapFont(weight, bItalic, charset, pitch_family, family, |
| 128 *bExact); |
| 123 } | 129 } |
| 124 | 130 |
| 125 void* DefaultGetFont(struct _FPDF_SYSFONTINFO* pThis, const char* family) | 131 void* DefaultGetFont(struct _FPDF_SYSFONTINFO* pThis, const char* family) { |
| 126 { | 132 return ((FPDF_SYSFONTINFO_DEFAULT*)pThis)->m_pFontInfo->GetFont(family); |
| 127 » return ((FPDF_SYSFONTINFO_DEFAULT*)pThis)->m_pFontInfo->GetFont(family); | |
| 128 } | 133 } |
| 129 | 134 |
| 130 static unsigned long DefaultGetFontData(struct _FPDF_SYSFONTINFO* pThis, void* h
Font, | 135 static unsigned long DefaultGetFontData(struct _FPDF_SYSFONTINFO* pThis, |
| 131 » » » unsigned int table, unsigned char* buffer, unsigned long
buf_size) | 136 void* hFont, |
| 132 { | 137 unsigned int table, |
| 133 » return ((FPDF_SYSFONTINFO_DEFAULT*)pThis)->m_pFontInfo->GetFontData(hFon
t, table, buffer, buf_size); | 138 unsigned char* buffer, |
| 139 unsigned long buf_size) { |
| 140 return ((FPDF_SYSFONTINFO_DEFAULT*)pThis) |
| 141 ->m_pFontInfo->GetFontData(hFont, table, buffer, buf_size); |
| 134 } | 142 } |
| 135 | 143 |
| 136 static unsigned long DefaultGetFaceName(struct _FPDF_SYSFONTINFO* pThis, void* h
Font, char* buffer, unsigned long buf_size) | 144 static unsigned long DefaultGetFaceName(struct _FPDF_SYSFONTINFO* pThis, |
| 137 { | 145 void* hFont, |
| 138 » CFX_ByteString name; | 146 char* buffer, |
| 139 » if (!((FPDF_SYSFONTINFO_DEFAULT*)pThis)->m_pFontInfo->GetFaceName(hFont,
name)) return 0; | 147 unsigned long buf_size) { |
| 140 » if (name.GetLength() >= (long)buf_size) return name.GetLength() + 1; | 148 CFX_ByteString name; |
| 141 » FXSYS_strcpy(buffer, name); | 149 if (!((FPDF_SYSFONTINFO_DEFAULT*)pThis) |
| 142 » return name.GetLength() + 1; | 150 ->m_pFontInfo->GetFaceName(hFont, name)) |
| 151 return 0; |
| 152 if (name.GetLength() >= (long)buf_size) |
| 153 return name.GetLength() + 1; |
| 154 FXSYS_strcpy(buffer, name); |
| 155 return name.GetLength() + 1; |
| 143 } | 156 } |
| 144 | 157 |
| 145 static int DefaultGetFontCharset(struct _FPDF_SYSFONTINFO* pThis, void* hFont) | 158 static int DefaultGetFontCharset(struct _FPDF_SYSFONTINFO* pThis, void* hFont) { |
| 146 { | 159 int charset; |
| 147 » int charset; | 160 if (!((FPDF_SYSFONTINFO_DEFAULT*)pThis) |
| 148 » if (!((FPDF_SYSFONTINFO_DEFAULT*)pThis)->m_pFontInfo->GetFontCharset(hFo
nt, charset)) return 0; | 161 ->m_pFontInfo->GetFontCharset(hFont, charset)) |
| 149 » return charset; | 162 return 0; |
| 163 return charset; |
| 150 } | 164 } |
| 151 | 165 |
| 152 static void DefaultDeleteFont(struct _FPDF_SYSFONTINFO* pThis, void* hFont) | 166 static void DefaultDeleteFont(struct _FPDF_SYSFONTINFO* pThis, void* hFont) { |
| 153 { | 167 ((FPDF_SYSFONTINFO_DEFAULT*)pThis)->m_pFontInfo->DeleteFont(hFont); |
| 154 » ((FPDF_SYSFONTINFO_DEFAULT*)pThis)->m_pFontInfo->DeleteFont(hFont); | |
| 155 } | 168 } |
| 156 | 169 |
| 157 DLLEXPORT FPDF_SYSFONTINFO* STDCALL FPDF_GetDefaultSystemFontInfo() | 170 DLLEXPORT FPDF_SYSFONTINFO* STDCALL FPDF_GetDefaultSystemFontInfo() { |
| 158 { | 171 IFX_SystemFontInfo* pFontInfo = IFX_SystemFontInfo::CreateDefault(); |
| 159 » IFX_SystemFontInfo* pFontInfo = IFX_SystemFontInfo::CreateDefault(); | 172 if (pFontInfo == NULL) |
| 160 » if (pFontInfo == NULL) return NULL; | 173 return NULL; |
| 161 | 174 |
| 162 » FPDF_SYSFONTINFO_DEFAULT* pFontInfoExt = FX_Alloc(FPDF_SYSFONTINFO_DEFAU
LT, 1); | 175 FPDF_SYSFONTINFO_DEFAULT* pFontInfoExt = |
| 163 » pFontInfoExt->DeleteFont = DefaultDeleteFont; | 176 FX_Alloc(FPDF_SYSFONTINFO_DEFAULT, 1); |
| 164 » pFontInfoExt->EnumFonts = DefaultEnumFonts; | 177 pFontInfoExt->DeleteFont = DefaultDeleteFont; |
| 165 » pFontInfoExt->GetFaceName = DefaultGetFaceName; | 178 pFontInfoExt->EnumFonts = DefaultEnumFonts; |
| 166 » pFontInfoExt->GetFont = DefaultGetFont; | 179 pFontInfoExt->GetFaceName = DefaultGetFaceName; |
| 167 » pFontInfoExt->GetFontCharset = DefaultGetFontCharset; | 180 pFontInfoExt->GetFont = DefaultGetFont; |
| 168 » pFontInfoExt->GetFontData = DefaultGetFontData; | 181 pFontInfoExt->GetFontCharset = DefaultGetFontCharset; |
| 169 » pFontInfoExt->MapFont = DefaultMapFont; | 182 pFontInfoExt->GetFontData = DefaultGetFontData; |
| 170 » pFontInfoExt->Release = DefaultRelease; | 183 pFontInfoExt->MapFont = DefaultMapFont; |
| 171 » pFontInfoExt->version = 1; | 184 pFontInfoExt->Release = DefaultRelease; |
| 172 » pFontInfoExt->m_pFontInfo = pFontInfo; | 185 pFontInfoExt->version = 1; |
| 173 » return pFontInfoExt; | 186 pFontInfoExt->m_pFontInfo = pFontInfo; |
| 187 return pFontInfoExt; |
| 174 } | 188 } |
| OLD | NEW |