| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2006 The Android Open Source Project | 2 * Copyright 2006 The Android Open Source Project |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #include "SkAdvancedTypefaceMetrics.h" | 8 #include "SkAdvancedTypefaceMetrics.h" |
| 9 #include "SkBitmap.h" | 9 #include "SkBitmap.h" |
| 10 #include "SkCanvas.h" | 10 #include "SkCanvas.h" |
| (...skipping 446 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 457 const uint32_t* glyphIDs, | 457 const uint32_t* glyphIDs, |
| 458 uint32_t glyphIDsCount) const { | 458 uint32_t glyphIDsCount) const { |
| 459 AutoFTAccess fta(this); | 459 AutoFTAccess fta(this); |
| 460 FT_Face face = fta.face(); | 460 FT_Face face = fta.face(); |
| 461 if (!face) { | 461 if (!face) { |
| 462 return nullptr; | 462 return nullptr; |
| 463 } | 463 } |
| 464 | 464 |
| 465 SkAdvancedTypefaceMetrics* info = new SkAdvancedTypefaceMetrics; | 465 SkAdvancedTypefaceMetrics* info = new SkAdvancedTypefaceMetrics; |
| 466 info->fFontName.set(FT_Get_Postscript_Name(face)); | 466 info->fFontName.set(FT_Get_Postscript_Name(face)); |
| 467 info->fFlags = SkAdvancedTypefaceMetrics::kEmpty_FontFlag; | 467 |
| 468 if (FT_HAS_MULTIPLE_MASTERS(face)) { | 468 if (FT_HAS_MULTIPLE_MASTERS(face)) { |
| 469 info->fFlags = SkTBitOr<SkAdvancedTypefaceMetrics::FontFlags>( | 469 info->fFlags |= SkAdvancedTypefaceMetrics::kMultiMaster_FontFlag; |
| 470 info->fFlags, SkAdvancedTypefaceMetrics::kMultiMaster_FontFlag); | |
| 471 } | 470 } |
| 472 if (!canEmbed(face)) { | 471 if (!canEmbed(face)) { |
| 473 info->fFlags = SkTBitOr<SkAdvancedTypefaceMetrics::FontFlags>( | 472 info->fFlags |= SkAdvancedTypefaceMetrics::kNotEmbeddable_FontFlag; |
| 474 info->fFlags, | |
| 475 SkAdvancedTypefaceMetrics::kNotEmbeddable_FontFlag); | |
| 476 } | 473 } |
| 477 if (!canSubset(face)) { | 474 if (!canSubset(face)) { |
| 478 info->fFlags = SkTBitOr<SkAdvancedTypefaceMetrics::FontFlags>( | 475 info->fFlags |= SkAdvancedTypefaceMetrics::kNotSubsettable_FontFlag; |
| 479 info->fFlags, | |
| 480 SkAdvancedTypefaceMetrics::kNotSubsettable_FontFlag); | |
| 481 } | 476 } |
| 482 info->fLastGlyphID = face->num_glyphs - 1; | 477 info->fLastGlyphID = face->num_glyphs - 1; |
| 483 info->fEmSize = 1000; | 478 info->fEmSize = 1000; |
| 484 | 479 |
| 485 const char* fontType = FT_Get_X11_Font_Format(face); | 480 const char* fontType = FT_Get_X11_Font_Format(face); |
| 486 if (strcmp(fontType, "Type 1") == 0) { | 481 if (strcmp(fontType, "Type 1") == 0) { |
| 487 info->fType = SkAdvancedTypefaceMetrics::kType1_Font; | 482 info->fType = SkAdvancedTypefaceMetrics::kType1_Font; |
| 488 } else if (strcmp(fontType, "CID Type 1") == 0) { | 483 } else if (strcmp(fontType, "CID Type 1") == 0) { |
| 489 info->fType = SkAdvancedTypefaceMetrics::kType1CID_Font; | 484 info->fType = SkAdvancedTypefaceMetrics::kType1CID_Font; |
| 490 } else if (strcmp(fontType, "CFF") == 0) { | 485 } else if (strcmp(fontType, "CFF") == 0) { |
| 491 info->fType = SkAdvancedTypefaceMetrics::kCFF_Font; | 486 info->fType = SkAdvancedTypefaceMetrics::kCFF_Font; |
| 492 } else if (strcmp(fontType, "TrueType") == 0) { | 487 } else if (strcmp(fontType, "TrueType") == 0) { |
| 493 info->fType = SkAdvancedTypefaceMetrics::kTrueType_Font; | 488 info->fType = SkAdvancedTypefaceMetrics::kTrueType_Font; |
| 494 TT_Header* ttHeader; | 489 TT_Header* ttHeader; |
| 495 if ((ttHeader = (TT_Header*)FT_Get_Sfnt_Table(face, ft_sfnt_head)) != nu
llptr) { | 490 if ((ttHeader = (TT_Header*)FT_Get_Sfnt_Table(face, ft_sfnt_head)) != nu
llptr) { |
| 496 info->fEmSize = ttHeader->Units_Per_EM; | 491 info->fEmSize = ttHeader->Units_Per_EM; |
| 497 } | 492 } |
| 498 } else { | 493 } else { |
| 499 info->fType = SkAdvancedTypefaceMetrics::kOther_Font; | 494 info->fType = SkAdvancedTypefaceMetrics::kOther_Font; |
| 500 } | 495 } |
| 501 | 496 |
| 502 info->fStyle = 0; | 497 info->fStyle = (SkAdvancedTypefaceMetrics::StyleFlags)0; |
| 503 if (FT_IS_FIXED_WIDTH(face)) { | 498 if (FT_IS_FIXED_WIDTH(face)) { |
| 504 info->fStyle |= SkAdvancedTypefaceMetrics::kFixedPitch_Style; | 499 info->fStyle |= SkAdvancedTypefaceMetrics::kFixedPitch_Style; |
| 505 } | 500 } |
| 506 if (face->style_flags & FT_STYLE_FLAG_ITALIC) { | 501 if (face->style_flags & FT_STYLE_FLAG_ITALIC) { |
| 507 info->fStyle |= SkAdvancedTypefaceMetrics::kItalic_Style; | 502 info->fStyle |= SkAdvancedTypefaceMetrics::kItalic_Style; |
| 508 } | 503 } |
| 509 | 504 |
| 510 PS_FontInfoRec psFontInfo; | 505 PS_FontInfoRec psFontInfo; |
| 511 TT_Postscript* postTable; | 506 TT_Postscript* postTable; |
| 512 if (FT_Get_PS_Font_Info(face, &psFontInfo) == 0) { | 507 if (FT_Get_PS_Font_Info(face, &psFontInfo) == 0) { |
| (...skipping 1258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1771 SkDEBUGF(("Requested font axis not found: %s '%c%c%c%c'\n", | 1766 SkDEBUGF(("Requested font axis not found: %s '%c%c%c%c'\n", |
| 1772 name.c_str(), | 1767 name.c_str(), |
| 1773 (skTag >> 24) & 0xFF, | 1768 (skTag >> 24) & 0xFF, |
| 1774 (skTag >> 16) & 0xFF, | 1769 (skTag >> 16) & 0xFF, |
| 1775 (skTag >> 8) & 0xFF, | 1770 (skTag >> 8) & 0xFF, |
| 1776 (skTag) & 0xFF)); | 1771 (skTag) & 0xFF)); |
| 1777 } | 1772 } |
| 1778 } | 1773 } |
| 1779 ) | 1774 ) |
| 1780 } | 1775 } |
| OLD | NEW |