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

Side by Side Diff: core/fxge/ge/cfx_font.cpp

Issue 2477443002: Remove FX_BOOL from core (Closed)
Patch Set: Created 4 years, 1 month 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 | « core/fxge/ge/cfx_folderfontinfo.cpp ('k') | core/fxge/ge/cfx_fontmapper.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 #include "core/fxge/fx_font.h" 7 #include "core/fxge/fx_font.h"
8 8
9 #include "core/fpdfapi/font/cpdf_font.h" 9 #include "core/fpdfapi/font/cpdf_font.h"
10 #include "core/fxge/cfx_facecache.h" 10 #include "core/fxge/cfx_facecache.h"
11 #include "core/fxge/cfx_fontcache.h" 11 #include "core/fxge/cfx_fontcache.h"
12 #include "core/fxge/cfx_fontmgr.h" 12 #include "core/fxge/cfx_fontmgr.h"
13 #include "core/fxge/cfx_gemodule.h" 13 #include "core/fxge/cfx_gemodule.h"
14 #include "core/fxge/cfx_pathdata.h" 14 #include "core/fxge/cfx_pathdata.h"
15 #include "core/fxge/cfx_substfont.h" 15 #include "core/fxge/cfx_substfont.h"
16 #include "core/fxge/fx_freetype.h" 16 #include "core/fxge/fx_freetype.h"
17 #include "core/fxge/ge/fx_text_int.h" 17 #include "core/fxge/ge/fx_text_int.h"
18 #include "third_party/base/ptr_util.h" 18 #include "third_party/base/ptr_util.h"
19 19
20 #define EM_ADJUST(em, a) (em == 0 ? (a) : (a)*1000 / em) 20 #define EM_ADJUST(em, a) (em == 0 ? (a) : (a)*1000 / em)
21 21
22 namespace { 22 namespace {
23 23
24 typedef struct { 24 typedef struct {
25 FX_BOOL m_bCount; 25 bool m_bCount;
26 int m_PointCount; 26 int m_PointCount;
27 FX_PATHPOINT* m_pPoints; 27 FX_PATHPOINT* m_pPoints;
28 int m_CurX; 28 int m_CurX;
29 int m_CurY; 29 int m_CurY;
30 FX_FLOAT m_CoordUnit; 30 FX_FLOAT m_CoordUnit;
31 } OUTLINE_PARAMS; 31 } OUTLINE_PARAMS;
32 32
33 #ifdef PDF_ENABLE_XFA 33 #ifdef PDF_ENABLE_XFA
34 34
35 unsigned long FTStreamRead(FXFT_Stream stream, 35 unsigned long FTStreamRead(FXFT_Stream stream,
36 unsigned long offset, 36 unsigned long offset,
37 unsigned char* buffer, 37 unsigned char* buffer,
38 unsigned long count) { 38 unsigned long count) {
39 if (count == 0) 39 if (count == 0)
40 return 0; 40 return 0;
41 41
42 IFX_SeekableReadStream* pFile = 42 IFX_SeekableReadStream* pFile =
43 static_cast<IFX_SeekableReadStream*>(stream->descriptor.pointer); 43 static_cast<IFX_SeekableReadStream*>(stream->descriptor.pointer);
44 return pFile->ReadBlock(buffer, offset, count) ? count : 0; 44 return pFile->ReadBlock(buffer, offset, count) ? count : 0;
45 } 45 }
46 46
47 void FTStreamClose(FXFT_Stream stream) {} 47 void FTStreamClose(FXFT_Stream stream) {}
48 48
49 FX_BOOL LoadFileImp(FXFT_Library library, 49 bool LoadFileImp(FXFT_Library library,
50 FXFT_Face* Face, 50 FXFT_Face* Face,
51 IFX_SeekableReadStream* pFile, 51 IFX_SeekableReadStream* pFile,
52 int32_t faceIndex, 52 int32_t faceIndex,
53 std::unique_ptr<FXFT_StreamRec>* stream) { 53 std::unique_ptr<FXFT_StreamRec>* stream) {
54 std::unique_ptr<FXFT_StreamRec> stream1(new FXFT_StreamRec()); 54 std::unique_ptr<FXFT_StreamRec> stream1(new FXFT_StreamRec());
55 stream1->base = nullptr; 55 stream1->base = nullptr;
56 stream1->size = static_cast<unsigned long>(pFile->GetSize()); 56 stream1->size = static_cast<unsigned long>(pFile->GetSize());
57 stream1->pos = 0; 57 stream1->pos = 0;
58 stream1->descriptor.pointer = pFile; 58 stream1->descriptor.pointer = pFile;
59 stream1->close = FTStreamClose; 59 stream1->close = FTStreamClose;
60 stream1->read = FTStreamRead; 60 stream1->read = FTStreamRead;
61 FXFT_Open_Args args; 61 FXFT_Open_Args args;
62 args.flags = FT_OPEN_STREAM; 62 args.flags = FT_OPEN_STREAM;
63 args.stream = stream1.get(); 63 args.stream = stream1.get();
64 if (FXFT_Open_Face(library, &args, faceIndex, Face)) 64 if (FXFT_Open_Face(library, &args, faceIndex, Face))
65 return FALSE; 65 return false;
66 if (stream) 66 if (stream)
67 *stream = std::move(stream1); 67 *stream = std::move(stream1);
68 return TRUE; 68 return true;
69 } 69 }
70 #endif // PDF_ENABLE_XFA 70 #endif // PDF_ENABLE_XFA
71 71
72 FXFT_Face FT_LoadFont(const uint8_t* pData, int size) { 72 FXFT_Face FT_LoadFont(const uint8_t* pData, int size) {
73 return CFX_GEModule::Get()->GetFontMgr()->GetFixedFace(pData, size, 0); 73 return CFX_GEModule::Get()->GetFontMgr()->GetFixedFace(pData, size, 0);
74 } 74 }
75 75
76 void Outline_CheckEmptyContour(OUTLINE_PARAMS* param) { 76 void Outline_CheckEmptyContour(OUTLINE_PARAMS* param) {
77 if (param->m_PointCount >= 2 && 77 if (param->m_PointCount >= 2 &&
78 param->m_pPoints[param->m_PointCount - 2].m_Flag == FXPT_MOVETO && 78 param->m_pPoints[param->m_PointCount - 2].m_Flag == FXPT_MOVETO &&
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 m_pGsubData(nullptr), 233 m_pGsubData(nullptr),
234 m_dwSize(0), 234 m_dwSize(0),
235 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ 235 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
236 m_pPlatformFont(nullptr), 236 m_pPlatformFont(nullptr),
237 #endif 237 #endif
238 m_bEmbedded(false), 238 m_bEmbedded(false),
239 m_bVertical(false) { 239 m_bVertical(false) {
240 } 240 }
241 241
242 #ifdef PDF_ENABLE_XFA 242 #ifdef PDF_ENABLE_XFA
243 FX_BOOL CFX_Font::LoadClone(const CFX_Font* pFont) { 243 bool CFX_Font::LoadClone(const CFX_Font* pFont) {
244 if (!pFont) 244 if (!pFont)
245 return FALSE; 245 return false;
246 246
247 m_bShallowCopy = true; 247 m_bShallowCopy = true;
248 if (pFont->m_pSubstFont) { 248 if (pFont->m_pSubstFont) {
249 m_pSubstFont = pdfium::MakeUnique<CFX_SubstFont>(); 249 m_pSubstFont = pdfium::MakeUnique<CFX_SubstFont>();
250 m_pSubstFont->m_Charset = pFont->m_pSubstFont->m_Charset; 250 m_pSubstFont->m_Charset = pFont->m_pSubstFont->m_Charset;
251 m_pSubstFont->m_SubstFlags = pFont->m_pSubstFont->m_SubstFlags; 251 m_pSubstFont->m_SubstFlags = pFont->m_pSubstFont->m_SubstFlags;
252 m_pSubstFont->m_Weight = pFont->m_pSubstFont->m_Weight; 252 m_pSubstFont->m_Weight = pFont->m_pSubstFont->m_Weight;
253 m_pSubstFont->m_Family = pFont->m_pSubstFont->m_Family; 253 m_pSubstFont->m_Family = pFont->m_pSubstFont->m_Family;
254 m_pSubstFont->m_ItalicAngle = pFont->m_pSubstFont->m_ItalicAngle; 254 m_pSubstFont->m_ItalicAngle = pFont->m_pSubstFont->m_ItalicAngle;
255 } 255 }
256 if (pFont->m_OtfFontData.GetSize()) { 256 if (pFont->m_OtfFontData.GetSize()) {
257 m_OtfFontData.AttachData(pFont->m_OtfFontData.GetBuffer(), 257 m_OtfFontData.AttachData(pFont->m_OtfFontData.GetBuffer(),
258 pFont->m_OtfFontData.GetSize()); 258 pFont->m_OtfFontData.GetSize());
259 } 259 }
260 m_Face = pFont->m_Face; 260 m_Face = pFont->m_Face;
261 m_bEmbedded = pFont->m_bEmbedded; 261 m_bEmbedded = pFont->m_bEmbedded;
262 m_bVertical = pFont->m_bVertical; 262 m_bVertical = pFont->m_bVertical;
263 m_dwSize = pFont->m_dwSize; 263 m_dwSize = pFont->m_dwSize;
264 m_pFontData = pFont->m_pFontData; 264 m_pFontData = pFont->m_pFontData;
265 m_pGsubData = pFont->m_pGsubData; 265 m_pGsubData = pFont->m_pGsubData;
266 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ 266 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
267 m_pPlatformFont = pFont->m_pPlatformFont; 267 m_pPlatformFont = pFont->m_pPlatformFont;
268 #endif 268 #endif
269 m_pOwnedStream = pFont->m_pOwnedStream; 269 m_pOwnedStream = pFont->m_pOwnedStream;
270 m_FaceCache = pFont->GetFaceCache(); 270 m_FaceCache = pFont->GetFaceCache();
271 return TRUE; 271 return true;
272 } 272 }
273 273
274 void CFX_Font::SetFace(FXFT_Face face) { 274 void CFX_Font::SetFace(FXFT_Face face) {
275 ClearFaceCache(); 275 ClearFaceCache();
276 m_Face = face; 276 m_Face = face;
277 } 277 }
278 278
279 #endif // PDF_ENABLE_XFA 279 #endif // PDF_ENABLE_XFA
280 280
281 CFX_Font::~CFX_Font() { 281 CFX_Font::~CFX_Font() {
(...skipping 24 matching lines...) Expand all
306 ClearFaceCache(); 306 ClearFaceCache();
307 if (m_bEmbedded) { 307 if (m_bEmbedded) {
308 FXFT_Done_Face(m_Face); 308 FXFT_Done_Face(m_Face);
309 } else { 309 } else {
310 CFX_GEModule::Get()->GetFontMgr()->ReleaseFace(m_Face); 310 CFX_GEModule::Get()->GetFontMgr()->ReleaseFace(m_Face);
311 } 311 }
312 m_Face = nullptr; 312 m_Face = nullptr;
313 } 313 }
314 314
315 void CFX_Font::LoadSubst(const CFX_ByteString& face_name, 315 void CFX_Font::LoadSubst(const CFX_ByteString& face_name,
316 FX_BOOL bTrueType, 316 bool bTrueType,
317 uint32_t flags, 317 uint32_t flags,
318 int weight, 318 int weight,
319 int italic_angle, 319 int italic_angle,
320 int CharsetCP, 320 int CharsetCP,
321 bool bVertical) { 321 bool bVertical) {
322 m_bEmbedded = false; 322 m_bEmbedded = false;
323 m_bVertical = bVertical; 323 m_bVertical = bVertical;
324 m_pSubstFont = pdfium::MakeUnique<CFX_SubstFont>(); 324 m_pSubstFont = pdfium::MakeUnique<CFX_SubstFont>();
325 m_Face = CFX_GEModule::Get()->GetFontMgr()->FindSubstFont( 325 m_Face = CFX_GEModule::Get()->GetFontMgr()->FindSubstFont(
326 face_name, bTrueType, flags, weight, italic_angle, CharsetCP, 326 face_name, bTrueType, flags, weight, italic_angle, CharsetCP,
327 m_pSubstFont.get()); 327 m_pSubstFont.get());
328 if (m_Face) { 328 if (m_Face) {
329 m_pFontData = FXFT_Get_Face_Stream_Base(m_Face); 329 m_pFontData = FXFT_Get_Face_Stream_Base(m_Face);
330 m_dwSize = FXFT_Get_Face_Stream_Size(m_Face); 330 m_dwSize = FXFT_Get_Face_Stream_Size(m_Face);
331 } 331 }
332 } 332 }
333 333
334 #ifdef PDF_ENABLE_XFA 334 #ifdef PDF_ENABLE_XFA
335 FX_BOOL CFX_Font::LoadFile(IFX_SeekableReadStream* pFile, 335 bool CFX_Font::LoadFile(IFX_SeekableReadStream* pFile,
336 int nFaceIndex, 336 int nFaceIndex,
337 int* pFaceCount) { 337 int* pFaceCount) {
338 m_bEmbedded = FALSE; 338 m_bEmbedded = false;
339 339
340 CFX_FontMgr* pFontMgr = CFX_GEModule::Get()->GetFontMgr(); 340 CFX_FontMgr* pFontMgr = CFX_GEModule::Get()->GetFontMgr();
341 pFontMgr->InitFTLibrary(); 341 pFontMgr->InitFTLibrary();
342 FXFT_Library library = pFontMgr->GetFTLibrary(); 342 FXFT_Library library = pFontMgr->GetFTLibrary();
343 343
344 std::unique_ptr<FXFT_StreamRec> stream; 344 std::unique_ptr<FXFT_StreamRec> stream;
345 if (!LoadFileImp(library, &m_Face, pFile, nFaceIndex, &stream)) 345 if (!LoadFileImp(library, &m_Face, pFile, nFaceIndex, &stream))
346 return FALSE; 346 return false;
347 347
348 if (pFaceCount) 348 if (pFaceCount)
349 *pFaceCount = (int)m_Face->num_faces; 349 *pFaceCount = (int)m_Face->num_faces;
350 m_pOwnedStream = stream.release(); 350 m_pOwnedStream = stream.release();
351 FXFT_Set_Pixel_Sizes(m_Face, 0, 64); 351 FXFT_Set_Pixel_Sizes(m_Face, 0, 64);
352 return TRUE; 352 return true;
353 } 353 }
354 #endif // PDF_ENABLE_XFA 354 #endif // PDF_ENABLE_XFA
355 355
356 int CFX_Font::GetGlyphWidth(uint32_t glyph_index) { 356 int CFX_Font::GetGlyphWidth(uint32_t glyph_index) {
357 if (!m_Face) 357 if (!m_Face)
358 return 0; 358 return 0;
359 if (m_pSubstFont && (m_pSubstFont->m_SubstFlags & FXFONT_SUBST_MM)) 359 if (m_pSubstFont && (m_pSubstFont->m_SubstFlags & FXFONT_SUBST_MM))
360 AdjustMMParams(glyph_index, 0, 0); 360 AdjustMMParams(glyph_index, 0, 0);
361 int err = FXFT_Load_Glyph( 361 int err = FXFT_Load_Glyph(
362 m_Face, glyph_index, 362 m_Face, glyph_index,
363 FXFT_LOAD_NO_SCALE | FXFT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH); 363 FXFT_LOAD_NO_SCALE | FXFT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH);
364 if (err) 364 if (err)
365 return 0; 365 return 0;
366 int width = EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), 366 int width = EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face),
367 FXFT_Get_Glyph_HoriAdvance(m_Face)); 367 FXFT_Get_Glyph_HoriAdvance(m_Face));
368 return width; 368 return width;
369 } 369 }
370 370
371 FX_BOOL CFX_Font::LoadEmbedded(const uint8_t* data, uint32_t size) { 371 bool CFX_Font::LoadEmbedded(const uint8_t* data, uint32_t size) {
372 std::vector<uint8_t> temp(data, data + size); 372 std::vector<uint8_t> temp(data, data + size);
373 m_pFontDataAllocation.swap(temp); 373 m_pFontDataAllocation.swap(temp);
374 m_Face = FT_LoadFont(m_pFontDataAllocation.data(), size); 374 m_Face = FT_LoadFont(m_pFontDataAllocation.data(), size);
375 m_pFontData = m_pFontDataAllocation.data(); 375 m_pFontData = m_pFontDataAllocation.data();
376 m_bEmbedded = true; 376 m_bEmbedded = true;
377 m_dwSize = size; 377 m_dwSize = size;
378 return !!m_Face; 378 return !!m_Face;
379 } 379 }
380 380
381 bool CFX_Font::IsTTFont() const { 381 bool CFX_Font::IsTTFont() const {
382 if (!m_Face) 382 if (!m_Face)
383 return false; 383 return false;
384 return FXFT_Is_Face_TT_OT(m_Face) == FXFT_FACE_FLAG_SFNT; 384 return FXFT_Is_Face_TT_OT(m_Face) == FXFT_FACE_FLAG_SFNT;
385 } 385 }
386 386
387 int CFX_Font::GetAscent() const { 387 int CFX_Font::GetAscent() const {
388 if (!m_Face) 388 if (!m_Face)
389 return 0; 389 return 0;
390 return EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), 390 return EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face),
391 FXFT_Get_Face_Ascender(m_Face)); 391 FXFT_Get_Face_Ascender(m_Face));
392 } 392 }
393 393
394 int CFX_Font::GetDescent() const { 394 int CFX_Font::GetDescent() const {
395 if (!m_Face) 395 if (!m_Face)
396 return 0; 396 return 0;
397 return EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), 397 return EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face),
398 FXFT_Get_Face_Descender(m_Face)); 398 FXFT_Get_Face_Descender(m_Face));
399 } 399 }
400 400
401 FX_BOOL CFX_Font::GetGlyphBBox(uint32_t glyph_index, FX_RECT& bbox) { 401 bool CFX_Font::GetGlyphBBox(uint32_t glyph_index, FX_RECT& bbox) {
402 if (!m_Face) 402 if (!m_Face)
403 return FALSE; 403 return false;
404 404
405 if (FXFT_Is_Face_Tricky(m_Face)) { 405 if (FXFT_Is_Face_Tricky(m_Face)) {
406 int error = FXFT_Set_Char_Size(m_Face, 0, 1000 * 64, 72, 72); 406 int error = FXFT_Set_Char_Size(m_Face, 0, 1000 * 64, 72, 72);
407 if (error) 407 if (error)
408 return FALSE; 408 return false;
409 error = FXFT_Load_Glyph(m_Face, glyph_index, 409 error = FXFT_Load_Glyph(m_Face, glyph_index,
410 FXFT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH); 410 FXFT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH);
411 if (error) 411 if (error)
412 return FALSE; 412 return false;
413 FXFT_BBox cbox; 413 FXFT_BBox cbox;
414 FT_Glyph glyph; 414 FT_Glyph glyph;
415 error = FXFT_Get_Glyph(((FXFT_Face)m_Face)->glyph, &glyph); 415 error = FXFT_Get_Glyph(((FXFT_Face)m_Face)->glyph, &glyph);
416 if (error) 416 if (error)
417 return FALSE; 417 return false;
418 FXFT_Glyph_Get_CBox(glyph, FXFT_GLYPH_BBOX_PIXELS, &cbox); 418 FXFT_Glyph_Get_CBox(glyph, FXFT_GLYPH_BBOX_PIXELS, &cbox);
419 int pixel_size_x = ((FXFT_Face)m_Face)->size->metrics.x_ppem, 419 int pixel_size_x = ((FXFT_Face)m_Face)->size->metrics.x_ppem,
420 pixel_size_y = ((FXFT_Face)m_Face)->size->metrics.y_ppem; 420 pixel_size_y = ((FXFT_Face)m_Face)->size->metrics.y_ppem;
421 if (pixel_size_x == 0 || pixel_size_y == 0) { 421 if (pixel_size_x == 0 || pixel_size_y == 0) {
422 bbox.left = cbox.xMin; 422 bbox.left = cbox.xMin;
423 bbox.right = cbox.xMax; 423 bbox.right = cbox.xMax;
424 bbox.top = cbox.yMax; 424 bbox.top = cbox.yMax;
425 bbox.bottom = cbox.yMin; 425 bbox.bottom = cbox.yMin;
426 } else { 426 } else {
427 bbox.left = cbox.xMin * 1000 / pixel_size_x; 427 bbox.left = cbox.xMin * 1000 / pixel_size_x;
428 bbox.right = cbox.xMax * 1000 / pixel_size_x; 428 bbox.right = cbox.xMax * 1000 / pixel_size_x;
429 bbox.top = cbox.yMax * 1000 / pixel_size_y; 429 bbox.top = cbox.yMax * 1000 / pixel_size_y;
430 bbox.bottom = cbox.yMin * 1000 / pixel_size_y; 430 bbox.bottom = cbox.yMin * 1000 / pixel_size_y;
431 } 431 }
432 if (bbox.top > FXFT_Get_Face_Ascender(m_Face)) 432 if (bbox.top > FXFT_Get_Face_Ascender(m_Face))
433 bbox.top = FXFT_Get_Face_Ascender(m_Face); 433 bbox.top = FXFT_Get_Face_Ascender(m_Face);
434 if (bbox.bottom < FXFT_Get_Face_Descender(m_Face)) 434 if (bbox.bottom < FXFT_Get_Face_Descender(m_Face))
435 bbox.bottom = FXFT_Get_Face_Descender(m_Face); 435 bbox.bottom = FXFT_Get_Face_Descender(m_Face);
436 FT_Done_Glyph(glyph); 436 FT_Done_Glyph(glyph);
437 return FXFT_Set_Pixel_Sizes(m_Face, 0, 64) == 0; 437 return FXFT_Set_Pixel_Sizes(m_Face, 0, 64) == 0;
438 } 438 }
439 if (FXFT_Load_Glyph( 439 if (FXFT_Load_Glyph(
440 m_Face, glyph_index, 440 m_Face, glyph_index,
441 FXFT_LOAD_NO_SCALE | FXFT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH)) { 441 FXFT_LOAD_NO_SCALE | FXFT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH)) {
442 return FALSE; 442 return false;
443 } 443 }
444 int em = FXFT_Get_Face_UnitsPerEM(m_Face); 444 int em = FXFT_Get_Face_UnitsPerEM(m_Face);
445 if (em == 0) { 445 if (em == 0) {
446 bbox.left = FXFT_Get_Glyph_HoriBearingX(m_Face); 446 bbox.left = FXFT_Get_Glyph_HoriBearingX(m_Face);
447 bbox.bottom = FXFT_Get_Glyph_HoriBearingY(m_Face); 447 bbox.bottom = FXFT_Get_Glyph_HoriBearingY(m_Face);
448 bbox.top = bbox.bottom - FXFT_Get_Glyph_Height(m_Face); 448 bbox.top = bbox.bottom - FXFT_Get_Glyph_Height(m_Face);
449 bbox.right = bbox.left + FXFT_Get_Glyph_Width(m_Face); 449 bbox.right = bbox.left + FXFT_Get_Glyph_Width(m_Face);
450 } else { 450 } else {
451 bbox.left = FXFT_Get_Glyph_HoriBearingX(m_Face) * 1000 / em; 451 bbox.left = FXFT_Get_Glyph_HoriBearingX(m_Face) * 1000 / em;
452 bbox.top = 452 bbox.top =
453 (FXFT_Get_Glyph_HoriBearingY(m_Face) - FXFT_Get_Glyph_Height(m_Face)) * 453 (FXFT_Get_Glyph_HoriBearingY(m_Face) - FXFT_Get_Glyph_Height(m_Face)) *
454 1000 / em; 454 1000 / em;
455 bbox.right = 455 bbox.right =
456 (FXFT_Get_Glyph_HoriBearingX(m_Face) + FXFT_Get_Glyph_Width(m_Face)) * 456 (FXFT_Get_Glyph_HoriBearingX(m_Face) + FXFT_Get_Glyph_Width(m_Face)) *
457 1000 / em; 457 1000 / em;
458 bbox.bottom = (FXFT_Get_Glyph_HoriBearingY(m_Face)) * 1000 / em; 458 bbox.bottom = (FXFT_Get_Glyph_HoriBearingY(m_Face)) * 1000 / em;
459 } 459 }
460 return TRUE; 460 return true;
461 } 461 }
462 462
463 bool CFX_Font::IsItalic() const { 463 bool CFX_Font::IsItalic() const {
464 if (!m_Face) 464 if (!m_Face)
465 return false; 465 return false;
466 466
467 if (FXFT_Is_Face_Italic(m_Face) == FXFT_STYLE_FLAG_ITALIC) 467 if (FXFT_Is_Face_Italic(m_Face) == FXFT_STYLE_FLAG_ITALIC)
468 return true; 468 return true;
469 CFX_ByteString str(FXFT_Get_Face_Style_Name(m_Face)); 469 CFX_ByteString str(FXFT_Get_Face_Style_Name(m_Face));
470 str.MakeLower(); 470 str.MakeLower();
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
510 facename = GetFamilyName(); 510 facename = GetFamilyName();
511 if (facename.IsEmpty()) 511 if (facename.IsEmpty())
512 facename = "Untitled"; 512 facename = "Untitled";
513 if (!style.IsEmpty() && style != "Regular") 513 if (!style.IsEmpty() && style != "Regular")
514 facename += " " + style; 514 facename += " " + style;
515 return facename; 515 return facename;
516 } 516 }
517 return m_pSubstFont->m_Family; 517 return m_pSubstFont->m_Family;
518 } 518 }
519 519
520 FX_BOOL CFX_Font::GetBBox(FX_RECT& bbox) { 520 bool CFX_Font::GetBBox(FX_RECT& bbox) {
521 if (!m_Face) 521 if (!m_Face)
522 return FALSE; 522 return false;
523 int em = FXFT_Get_Face_UnitsPerEM(m_Face); 523 int em = FXFT_Get_Face_UnitsPerEM(m_Face);
524 if (em == 0) { 524 if (em == 0) {
525 bbox.left = FXFT_Get_Face_xMin(m_Face); 525 bbox.left = FXFT_Get_Face_xMin(m_Face);
526 bbox.bottom = FXFT_Get_Face_yMax(m_Face); 526 bbox.bottom = FXFT_Get_Face_yMax(m_Face);
527 bbox.top = FXFT_Get_Face_yMin(m_Face); 527 bbox.top = FXFT_Get_Face_yMin(m_Face);
528 bbox.right = FXFT_Get_Face_xMax(m_Face); 528 bbox.right = FXFT_Get_Face_xMax(m_Face);
529 } else { 529 } else {
530 bbox.left = FXFT_Get_Face_xMin(m_Face) * 1000 / em; 530 bbox.left = FXFT_Get_Face_xMin(m_Face) * 1000 / em;
531 bbox.top = FXFT_Get_Face_yMin(m_Face) * 1000 / em; 531 bbox.top = FXFT_Get_Face_yMin(m_Face) * 1000 / em;
532 bbox.right = FXFT_Get_Face_xMax(m_Face) * 1000 / em; 532 bbox.right = FXFT_Get_Face_xMax(m_Face) * 1000 / em;
533 bbox.bottom = FXFT_Get_Face_yMax(m_Face) * 1000 / em; 533 bbox.bottom = FXFT_Get_Face_yMax(m_Face) * 1000 / em;
534 } 534 }
535 return TRUE; 535 return true;
536 } 536 }
537 537
538 int CFX_Font::GetHeight() const { 538 int CFX_Font::GetHeight() const {
539 if (!m_Face) 539 if (!m_Face)
540 return 0; 540 return 0;
541 541
542 return EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), 542 return EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face),
543 FXFT_Get_Face_Height(m_Face)); 543 FXFT_Get_Face_Height(m_Face));
544 } 544 }
545 545
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
667 FXFT_Outline_Embolden(FXFT_Get_Glyph_Outline(m_Face), level); 667 FXFT_Outline_Embolden(FXFT_Get_Glyph_Outline(m_Face), level);
668 } 668 }
669 FXFT_Outline_Funcs funcs; 669 FXFT_Outline_Funcs funcs;
670 funcs.move_to = Outline_MoveTo; 670 funcs.move_to = Outline_MoveTo;
671 funcs.line_to = Outline_LineTo; 671 funcs.line_to = Outline_LineTo;
672 funcs.conic_to = Outline_ConicTo; 672 funcs.conic_to = Outline_ConicTo;
673 funcs.cubic_to = Outline_CubicTo; 673 funcs.cubic_to = Outline_CubicTo;
674 funcs.shift = 0; 674 funcs.shift = 0;
675 funcs.delta = 0; 675 funcs.delta = 0;
676 OUTLINE_PARAMS params; 676 OUTLINE_PARAMS params;
677 params.m_bCount = TRUE; 677 params.m_bCount = true;
678 params.m_PointCount = 0; 678 params.m_PointCount = 0;
679 FXFT_Outline_Decompose(FXFT_Get_Glyph_Outline(m_Face), &funcs, &params); 679 FXFT_Outline_Decompose(FXFT_Get_Glyph_Outline(m_Face), &funcs, &params);
680 if (params.m_PointCount == 0) 680 if (params.m_PointCount == 0)
681 return nullptr; 681 return nullptr;
682 CFX_PathData* pPath = new CFX_PathData; 682 CFX_PathData* pPath = new CFX_PathData;
683 pPath->SetPointCount(params.m_PointCount); 683 pPath->SetPointCount(params.m_PointCount);
684 params.m_bCount = FALSE; 684 params.m_bCount = false;
685 params.m_PointCount = 0; 685 params.m_PointCount = 0;
686 params.m_pPoints = pPath->GetPoints(); 686 params.m_pPoints = pPath->GetPoints();
687 params.m_CurX = params.m_CurY = 0; 687 params.m_CurX = params.m_CurY = 0;
688 params.m_CoordUnit = 64 * 64.0; 688 params.m_CoordUnit = 64 * 64.0;
689 FXFT_Outline_Decompose(FXFT_Get_Glyph_Outline(m_Face), &funcs, &params); 689 FXFT_Outline_Decompose(FXFT_Get_Glyph_Outline(m_Face), &funcs, &params);
690 Outline_CheckEmptyContour(&params); 690 Outline_CheckEmptyContour(&params);
691 pPath->TrimPoints(params.m_PointCount); 691 pPath->TrimPoints(params.m_PointCount);
692 if (params.m_PointCount) 692 if (params.m_PointCount)
693 pPath->GetPoints()[params.m_PointCount - 1].m_Flag |= FXPT_CLOSEFIGURE; 693 pPath->GetPoints()[params.m_PointCount - 1].m_Flag |= FXPT_CLOSEFIGURE;
694 return pPath; 694 return pPath;
695 } 695 }
696 696
697 const CFX_GlyphBitmap* CFX_Font::LoadGlyphBitmap(uint32_t glyph_index, 697 const CFX_GlyphBitmap* CFX_Font::LoadGlyphBitmap(uint32_t glyph_index,
698 FX_BOOL bFontStyle, 698 bool bFontStyle,
699 const CFX_Matrix* pMatrix, 699 const CFX_Matrix* pMatrix,
700 int dest_width, 700 int dest_width,
701 int anti_alias, 701 int anti_alias,
702 int& text_flags) const { 702 int& text_flags) const {
703 return GetFaceCache()->LoadGlyphBitmap(this, glyph_index, bFontStyle, pMatrix, 703 return GetFaceCache()->LoadGlyphBitmap(this, glyph_index, bFontStyle, pMatrix,
704 dest_width, anti_alias, text_flags); 704 dest_width, anti_alias, text_flags);
705 } 705 }
706 706
707 const CFX_PathData* CFX_Font::LoadGlyphPath(uint32_t glyph_index, 707 const CFX_PathData* CFX_Font::LoadGlyphPath(uint32_t glyph_index,
708 int dest_width) const { 708 int dest_width) const {
709 return GetFaceCache()->LoadGlyphPath(this, glyph_index, dest_width); 709 return GetFaceCache()->LoadGlyphPath(this, glyph_index, dest_width);
710 } 710 }
711 711
712 #ifdef _SKIA_SUPPORT_ 712 #ifdef _SKIA_SUPPORT_
713 CFX_TypeFace* CFX_Font::GetDeviceCache() const { 713 CFX_TypeFace* CFX_Font::GetDeviceCache() const {
714 return GetFaceCache()->GetDeviceCache(this); 714 return GetFaceCache()->GetDeviceCache(this);
715 } 715 }
716 #endif 716 #endif
OLDNEW
« no previous file with comments | « core/fxge/ge/cfx_folderfontinfo.cpp ('k') | core/fxge/ge/cfx_fontmapper.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698