Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2013 The Android Open Source Project | 3 * Copyright 2013 The Android Open Source Project |
| 4 * | 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
| 7 */ | 7 */ |
| 8 | 8 |
| 9 #include "SkFontConfigInterface.h" | 9 #include "SkFontConfigInterface.h" |
| 10 #include "SkTypeface_android.h" | 10 #include "SkTypeface_android.h" |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 96 * contains the specified chararacter. if no font is found, returns false. | 96 * contains the specified chararacter. if no font is found, returns false. |
| 97 */ | 97 */ |
| 98 bool getFallbackFamilyNameForChar(SkUnichar uni, const char* lang, SkString* name); | 98 bool getFallbackFamilyNameForChar(SkUnichar uni, const char* lang, SkString* name); |
| 99 /** | 99 /** |
| 100 * | 100 * |
| 101 */ | 101 */ |
| 102 SkTypeface* getTypefaceForChar(SkUnichar uni, SkTypeface::Style style, | 102 SkTypeface* getTypefaceForChar(SkUnichar uni, SkTypeface::Style style, |
| 103 SkPaintOptionsAndroid::FontVariant fontVarian t); | 103 SkPaintOptionsAndroid::FontVariant fontVarian t); |
| 104 SkTypeface* nextLogicalTypeface(SkFontID currFontID, SkFontID origFontID, | 104 SkTypeface* nextLogicalTypeface(SkFontID currFontID, SkFontID origFontID, |
| 105 const SkPaintOptionsAndroid& options); | 105 const SkPaintOptionsAndroid& options); |
| 106 SkTypeface* getTypefaceForGlyphID(uint16_t glyphID, const SkTypeface* origTy peface, | |
| 107 const SkPaintOptionsAndroid& options, | |
| 108 int* lowerBounds, int* upperBounds); | |
| 106 | 109 |
| 107 private: | 110 private: |
| 108 void addFallbackFamily(FamilyRecID fontRecID); | 111 void addFallbackFamily(FamilyRecID fontRecID); |
| 109 SkTypeface* getTypefaceForFontRec(FontRecID fontRecID); | 112 SkTypeface* getTypefaceForFontRec(FontRecID fontRecID); |
| 110 FallbackFontList* getCurrentLocaleFallbackFontList(); | 113 FallbackFontList* getCurrentLocaleFallbackFontList(); |
| 111 FallbackFontList* findFallbackFontList(const SkLanguage& lang, bool isOrigin al = true); | 114 FallbackFontList* findFallbackFontList(const SkLanguage& lang, bool isOrigin al = true); |
| 112 | 115 |
| 113 SkTArray<FontRec> fFonts; | 116 SkTArray<FontRec> fFonts; |
| 114 SkTArray<FamilyRec> fFontFamilies; | 117 SkTArray<FamilyRec> fFontFamilies; |
| 115 SkTDict<FamilyRecID> fFamilyNameDict; | 118 SkTDict<FamilyRecID> fFamilyNameDict; |
| (...skipping 547 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 663 } | 666 } |
| 664 | 667 |
| 665 DEBUG_FONT(("---- nextLogicalFont: currFontID=%d, origFontID=%d, currRecID=% d, " | 668 DEBUG_FONT(("---- nextLogicalFont: currFontID=%d, origFontID=%d, currRecID=% d, " |
| 666 "lang=%s, variant=%d, nextFallbackIndex[%d,%d] => nextLogicalTyp eface=%d", | 669 "lang=%s, variant=%d, nextFallbackIndex[%d,%d] => nextLogicalTyp eface=%d", |
| 667 currFontID, origFontID, currFontRecID, opts.getLanguage().getTag ().c_str(), | 670 currFontID, origFontID, currFontRecID, opts.getLanguage().getTag ().c_str(), |
| 668 variant, nextFallbackFontIndex, currentFallbackList->getAt(nextF allbackFontIndex), | 671 variant, nextFallbackFontIndex, currentFallbackList->getAt(nextF allbackFontIndex), |
| 669 (nextLogicalTypeface) ? nextLogicalTypeface->uniqueID() : 0)); | 672 (nextLogicalTypeface) ? nextLogicalTypeface->uniqueID() : 0)); |
| 670 return SkSafeRef(nextLogicalTypeface); | 673 return SkSafeRef(nextLogicalTypeface); |
| 671 } | 674 } |
| 672 | 675 |
| 676 SkTypeface* SkFontConfigInterfaceAndroid::getTypefaceForGlyphID(uint16_t glyphID , | |
| 677 const SkTypeface * origTypeface, | |
| 678 const SkPaintOpt ionsAndroid& opts, | |
| 679 int* lBounds, in t* uBounds) { | |
| 680 // Skia does not support font fallback by default. This enables clients such | |
| 681 // as WebKit to customize their font selection. In any case, clients can use | |
| 682 // GetFallbackFamilyNameForChar() to get the fallback font for individual | |
| 683 // characters. | |
| 684 if (!opts.isUsingFontFallbacks()) { | |
| 685 return NULL; | |
| 686 } | |
| 687 | |
| 688 SkTypeface* currentTypeface = NULL; | |
| 689 int lowerBounds = 0; //inclusive | |
| 690 int upperBounds = origTypeface->countGlyphs(); //exclusive | |
| 691 | |
| 692 // check to see if the glyph is in the bounds of the origTypeface | |
| 693 if (glyphID < upperBounds) { | |
| 694 currentTypeface = const_cast<SkTypeface*>(origTypeface); | |
|
scroggo
2013/10/01 21:00:14
It appears you do not modify currentTypeface. It s
djsollen
2013/10/02 16:16:41
But I do return that value and I can't return a co
| |
| 695 } else { | |
| 696 FallbackFontList* currentFallbackList = findFallbackFontList(opts.getLan guage()); | |
| 697 SkASSERT(currentFallbackList); | |
| 698 | |
| 699 // If an object is set to prefer "kDefault_Variant" it means they have n o preference | |
| 700 // In this case, we set the value to "kCompact_Variant" | |
| 701 SkPaintOptionsAndroid::FontVariant variant = opts.getFontVariant(); | |
| 702 if (variant == SkPaintOptionsAndroid::kDefault_Variant) { | |
| 703 variant = SkPaintOptionsAndroid::kCompact_Variant; | |
| 704 } | |
| 705 | |
| 706 int32_t acceptedVariants = SkPaintOptionsAndroid::kDefault_Variant | var iant; | |
| 707 SkTypeface::Style origStyle = origTypeface->style(); | |
| 708 | |
| 709 for (int x = 0; x < currentFallbackList->count(); ++x) { | |
| 710 FamilyRecID familyRecID = currentFallbackList->getAt(x); | |
| 711 if ((fFontFamilies[familyRecID].fPaintOptions.getFontVariant() & acc eptedVariants) != 0) { | |
|
scroggo
2013/10/01 21:00:14
100 chars
| |
| 712 FontRecID matchedFont = find_best_style(fFontFamilies[familyRecI D], origStyle); | |
| 713 currentTypeface = this->getTypefaceForFontRec(matchedFont); | |
| 714 lowerBounds = upperBounds; | |
| 715 upperBounds += currentTypeface->countGlyphs(); | |
| 716 if (glyphID < upperBounds) { | |
| 717 break; | |
| 718 } | |
| 719 } | |
| 720 } | |
| 721 } | |
| 722 | |
| 723 if (currentTypeface) { | |
|
scroggo
2013/10/01 21:00:14
nit: explicit NULL check.
| |
| 724 if (lBounds) { | |
| 725 *lBounds = lowerBounds; | |
| 726 } | |
| 727 if (uBounds) { | |
| 728 *uBounds = upperBounds; | |
| 729 } | |
| 730 } | |
| 731 return SkSafeRef(currentTypeface); | |
|
scroggo
2013/10/01 21:00:14
Why not return SkRef(currentTypeface) inside the i
| |
| 732 } | |
| 733 | |
| 673 /////////////////////////////////////////////////////////////////////////////// | 734 /////////////////////////////////////////////////////////////////////////////// |
| 674 | 735 |
| 675 bool SkGetFallbackFamilyNameForChar(SkUnichar uni, SkString* name) { | 736 bool SkGetFallbackFamilyNameForChar(SkUnichar uni, SkString* name) { |
| 676 SkString locale = SkFontConfigParser::GetLocale(); | 737 SkString locale = SkFontConfigParser::GetLocale(); |
| 677 SkFontConfigInterfaceAndroid* fontConfig = getSingletonInterface(); | 738 SkFontConfigInterfaceAndroid* fontConfig = getSingletonInterface(); |
| 678 return fontConfig->getFallbackFamilyNameForChar(uni, locale.c_str(), name); | 739 return fontConfig->getFallbackFamilyNameForChar(uni, locale.c_str(), name); |
| 679 } | 740 } |
| 680 | 741 |
| 681 bool SkGetFallbackFamilyNameForChar(SkUnichar uni, const char* lang, SkString* n ame) { | 742 bool SkGetFallbackFamilyNameForChar(SkUnichar uni, const char* lang, SkString* n ame) { |
| 682 SkFontConfigInterfaceAndroid* fontConfig = getSingletonInterface(); | 743 SkFontConfigInterfaceAndroid* fontConfig = getSingletonInterface(); |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 695 gTestMainConfigFile, gTestFallbackConfigFile, gTestFontFilePrefix) ); | 756 gTestMainConfigFile, gTestFallbackConfigFile, gTestFontFilePrefix) ); |
| 696 } | 757 } |
| 697 | 758 |
| 698 SkTypeface* SkAndroidNextLogicalTypeface(SkFontID currFontID, SkFontID origFontI D, | 759 SkTypeface* SkAndroidNextLogicalTypeface(SkFontID currFontID, SkFontID origFontI D, |
| 699 const SkPaintOptionsAndroid& options) { | 760 const SkPaintOptionsAndroid& options) { |
| 700 SkFontConfigInterfaceAndroid* fontConfig = getSingletonInterface(); | 761 SkFontConfigInterfaceAndroid* fontConfig = getSingletonInterface(); |
| 701 return fontConfig->nextLogicalTypeface(currFontID, origFontID, options); | 762 return fontConfig->nextLogicalTypeface(currFontID, origFontID, options); |
| 702 | 763 |
| 703 } | 764 } |
| 704 | 765 |
| 766 SkTypeface* SkGetTypefaceForGlyphID(uint16_t glyphID, const SkTypeface* origType face, | |
| 767 const SkPaintOptionsAndroid& options, | |
| 768 int* lowerBounds, int* upperBounds) { | |
| 769 SkFontConfigInterfaceAndroid* fontConfig = getSingletonInterface(); | |
| 770 return fontConfig->getTypefaceForGlyphID(glyphID, origTypeface, options, | |
| 771 lowerBounds, upperBounds); | |
| 772 } | |
| 773 | |
| 705 /////////////////////////////////////////////////////////////////////////////// | 774 /////////////////////////////////////////////////////////////////////////////// |
| 706 | 775 |
| 707 #ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK | 776 #ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK |
| 708 | 777 |
| 709 struct HB_UnicodeMapping { | 778 struct HB_UnicodeMapping { |
| 710 // TODO: when the WebView no longer needs harfbuzz_old, remove | 779 // TODO: when the WebView no longer needs harfbuzz_old, remove |
| 711 HB_Script script_old; | 780 HB_Script script_old; |
| 712 hb_script_t script; | 781 hb_script_t script; |
| 713 const SkUnichar unicode; | 782 const SkUnichar unicode; |
| 714 }; | 783 }; |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 851 return SkCreateTypefaceForScriptNG(getHBScriptFromHBScriptOld(script), style , fontVariant); | 920 return SkCreateTypefaceForScriptNG(getHBScriptFromHBScriptOld(script), style , fontVariant); |
| 852 } | 921 } |
| 853 | 922 |
| 854 #endif | 923 #endif |
| 855 | 924 |
| 856 /////////////////////////////////////////////////////////////////////////////// | 925 /////////////////////////////////////////////////////////////////////////////// |
| 857 | 926 |
| 858 SkFontMgr* SkFontMgr::Factory() { | 927 SkFontMgr* SkFontMgr::Factory() { |
| 859 return NULL; | 928 return NULL; |
| 860 } | 929 } |
| OLD | NEW |