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 "../../../include/fxge/fx_ge.h" | 7 #include "../../../include/fxge/fx_ge.h" |
8 #include "../../../include/fxge/fx_freetype.h" | 8 #include "../../../include/fxge/fx_freetype.h" |
9 #include "text_int.h" | 9 #include "text_int.h" |
10 #define EM_ADJUST(em, a) (em == 0?(a): (a)*1000/em) | 10 #define EM_ADJUST(em, a) (em == 0?(a): (a)*1000/em) |
11 extern void _FPDFAPI_GetInternalFontData(int id1, FX_LPCBYTE& data, FX_DWORD& si
ze); | 11 extern void _FPDFAPI_GetInternalFontData(int id1, const uint8_t*& data, FX_DWORD
& size); |
12 CFX_Font::CFX_Font() | 12 CFX_Font::CFX_Font() |
13 { | 13 { |
14 m_pSubstFont = NULL; | 14 m_pSubstFont = NULL; |
15 m_Face = NULL; | 15 m_Face = NULL; |
16 m_bEmbedded = FALSE; | 16 m_bEmbedded = FALSE; |
17 m_bVertical = FALSE; | 17 m_bVertical = FALSE; |
18 m_pFontData = NULL; | 18 m_pFontData = NULL; |
19 m_pFontDataAllocation = NULL; | 19 m_pFontDataAllocation = NULL; |
20 m_dwSize = 0; | 20 m_dwSize = 0; |
21 m_pOwnedStream = NULL; | 21 m_pOwnedStream = NULL; |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
146 if (m_pSubstFont && (m_pSubstFont->m_SubstFlags & FXFONT_SUBST_MM)) { | 146 if (m_pSubstFont && (m_pSubstFont->m_SubstFlags & FXFONT_SUBST_MM)) { |
147 AdjustMMParams(glyph_index, 0, 0); | 147 AdjustMMParams(glyph_index, 0, 0); |
148 } | 148 } |
149 int err = FXFT_Load_Glyph(m_Face, glyph_index, FXFT_LOAD_NO_SCALE | FXFT_LOA
D_IGNORE_GLOBAL_ADVANCE_WIDTH); | 149 int err = FXFT_Load_Glyph(m_Face, glyph_index, FXFT_LOAD_NO_SCALE | FXFT_LOA
D_IGNORE_GLOBAL_ADVANCE_WIDTH); |
150 if (err) { | 150 if (err) { |
151 return 0; | 151 return 0; |
152 } | 152 } |
153 int width = EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), FXFT_Get_Glyph_HoriA
dvance(m_Face)); | 153 int width = EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), FXFT_Get_Glyph_HoriA
dvance(m_Face)); |
154 return width; | 154 return width; |
155 } | 155 } |
156 static FXFT_Face FT_LoadFont(FX_LPBYTE pData, int size) | 156 static FXFT_Face FT_LoadFont(uint8_t* pData, int size) |
157 { | 157 { |
158 FXFT_Library library; | 158 FXFT_Library library; |
159 if (CFX_GEModule::Get()->GetFontMgr()->m_FTLibrary == NULL) { | 159 if (CFX_GEModule::Get()->GetFontMgr()->m_FTLibrary == NULL) { |
160 FXFT_Init_FreeType(&CFX_GEModule::Get()->GetFontMgr()->m_FTLibrary); | 160 FXFT_Init_FreeType(&CFX_GEModule::Get()->GetFontMgr()->m_FTLibrary); |
161 } | 161 } |
162 library = CFX_GEModule::Get()->GetFontMgr()->m_FTLibrary; | 162 library = CFX_GEModule::Get()->GetFontMgr()->m_FTLibrary; |
163 FXFT_Face face = NULL; | 163 FXFT_Face face = NULL; |
164 int error = FXFT_New_Memory_Face(library, pData, size, 0, &face); | 164 int error = FXFT_New_Memory_Face(library, pData, size, 0, &face); |
165 if (error) { | 165 if (error) { |
166 return NULL; | 166 return NULL; |
167 } | 167 } |
168 error = FXFT_Set_Pixel_Sizes(face, 64, 64); | 168 error = FXFT_Set_Pixel_Sizes(face, 64, 64); |
169 if (error) { | 169 if (error) { |
170 return NULL; | 170 return NULL; |
171 } | 171 } |
172 return face; | 172 return face; |
173 } | 173 } |
174 FX_BOOL CFX_Font::LoadEmbedded(FX_LPCBYTE data, FX_DWORD size) | 174 FX_BOOL CFX_Font::LoadEmbedded(const uint8_t* data, FX_DWORD size) |
175 { | 175 { |
176 m_pFontDataAllocation = FX_Alloc(uint8_t, size); | 176 m_pFontDataAllocation = FX_Alloc(uint8_t, size); |
177 FXSYS_memcpy32(m_pFontDataAllocation, data, size); | 177 FXSYS_memcpy32(m_pFontDataAllocation, data, size); |
178 m_Face = FT_LoadFont((FX_LPBYTE)m_pFontDataAllocation, size); | 178 m_Face = FT_LoadFont((uint8_t*)m_pFontDataAllocation, size); |
179 m_pFontData = (FX_LPBYTE)m_pFontDataAllocation; | 179 m_pFontData = (uint8_t*)m_pFontDataAllocation; |
180 m_bEmbedded = TRUE; | 180 m_bEmbedded = TRUE; |
181 m_dwSize = size; | 181 m_dwSize = size; |
182 return m_Face != NULL; | 182 return m_Face != NULL; |
183 } | 183 } |
184 FX_BOOL CFX_Font::IsTTFont() | 184 FX_BOOL CFX_Font::IsTTFont() |
185 { | 185 { |
186 if (m_Face == NULL) { | 186 if (m_Face == NULL) { |
187 return FALSE; | 187 return FALSE; |
188 } | 188 } |
189 return FXFT_Is_Face_TT_OT(m_Face) == FXFT_FACE_FLAG_SFNT; | 189 return FXFT_Is_Face_TT_OT(m_Face) == FXFT_FACE_FLAG_SFNT; |
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
428 break; | 428 break; |
429 } | 429 } |
430 } | 430 } |
431 } | 431 } |
432 return FXFT_Get_Char_Index(face, charcode); | 432 return FXFT_Get_Char_Index(face, charcode); |
433 } | 433 } |
434 IFX_FontEncoding* FXGE_CreateUnicodeEncoding(CFX_Font* pFont) | 434 IFX_FontEncoding* FXGE_CreateUnicodeEncoding(CFX_Font* pFont) |
435 { | 435 { |
436 return new CFX_UnicodeEncoding(pFont); | 436 return new CFX_UnicodeEncoding(pFont); |
437 } | 437 } |
OLD | NEW |