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 763 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
774 SkFontConfigInterfaceAndroid* fontConfig = getSingletonInterface(); | 774 SkFontConfigInterfaceAndroid* fontConfig = getSingletonInterface(); |
775 return fontConfig->getTypefaceForGlyphID(glyphID, origTypeface, options, | 775 return fontConfig->getTypefaceForGlyphID(glyphID, origTypeface, options, |
776 lowerBounds, upperBounds); | 776 lowerBounds, upperBounds); |
777 } | 777 } |
778 | 778 |
779 /////////////////////////////////////////////////////////////////////////////// | 779 /////////////////////////////////////////////////////////////////////////////// |
780 | 780 |
781 #ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK | 781 #ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK |
782 | 782 |
783 struct HB_UnicodeMapping { | 783 struct HB_UnicodeMapping { |
784 // TODO: when the WebView no longer needs harfbuzz_old, remove | |
785 HB_Script script_old; | |
786 hb_script_t script; | 784 hb_script_t script; |
787 const SkUnichar unicode; | 785 const SkUnichar unicode; |
788 }; | 786 }; |
789 | 787 |
790 /* | 788 /* |
791 * The following scripts are not complex fonts and we do not expect them to be p
arsed by this table | 789 * The following scripts are not complex fonts and we do not expect them to be p
arsed by this table |
792 * HB_SCRIPT_COMMON, | 790 * HB_SCRIPT_COMMON, |
793 * HB_SCRIPT_GREEK, | 791 * HB_SCRIPT_GREEK, |
794 * HB_SCRIPT_CYRILLIC, | 792 * HB_SCRIPT_CYRILLIC, |
795 * HB_SCRIPT_HANGUL | 793 * HB_SCRIPT_HANGUL |
796 * HB_SCRIPT_INHERITED | 794 * HB_SCRIPT_INHERITED |
797 */ | 795 */ |
798 | 796 |
799 /* Harfbuzz (old) is missing a number of scripts in its table. For these, | 797 /* Harfbuzz (old) is missing a number of scripts in its table. For these, |
800 * we include a value which can never happen. We won't get complex script | 798 * we include a value which can never happen. We won't get complex script |
801 * shaping in these cases, but the library wouldn't know how to shape | 799 * shaping in these cases, but the library wouldn't know how to shape |
802 * them anyway. */ | 800 * them anyway. */ |
803 #define HB_Script_Unknown HB_ScriptCount | 801 #define HB_Script_Unknown HB_ScriptCount |
804 | 802 |
805 static HB_UnicodeMapping HB_UnicodeMappingArray[] = { | 803 static HB_UnicodeMapping HB_UnicodeMappingArray[] = { |
806 {HB_Script_Armenian, HB_SCRIPT_ARMENIAN, 0x0531}, | 804 {HB_SCRIPT_ARMENIAN, 0x0531}, |
807 {HB_Script_Hebrew, HB_SCRIPT_HEBREW, 0x0591}, | 805 {HB_SCRIPT_HEBREW, 0x0591}, |
808 {HB_Script_Arabic, HB_SCRIPT_ARABIC, 0x0600}, | 806 {HB_SCRIPT_ARABIC, 0x0600}, |
809 {HB_Script_Syriac, HB_SCRIPT_SYRIAC, 0x0710}, | 807 {HB_SCRIPT_SYRIAC, 0x0710}, |
810 {HB_Script_Thaana, HB_SCRIPT_THAANA, 0x0780}, | 808 {HB_SCRIPT_THAANA, 0x0780}, |
811 {HB_Script_Nko, HB_SCRIPT_NKO, 0x07C0}, | 809 {HB_SCRIPT_NKO, 0x07C0}, |
812 {HB_Script_Devanagari, HB_SCRIPT_DEVANAGARI, 0x0901}, | 810 {HB_SCRIPT_DEVANAGARI, 0x0901}, |
813 {HB_Script_Bengali, HB_SCRIPT_BENGALI, 0x0981}, | 811 {HB_SCRIPT_BENGALI, 0x0981}, |
814 {HB_Script_Gurmukhi, HB_SCRIPT_GURMUKHI, 0x0A10}, | 812 {HB_SCRIPT_GURMUKHI, 0x0A10}, |
815 {HB_Script_Gujarati, HB_SCRIPT_GUJARATI, 0x0A90}, | 813 {HB_SCRIPT_GUJARATI, 0x0A90}, |
816 {HB_Script_Oriya, HB_SCRIPT_ORIYA, 0x0B10}, | 814 {HB_SCRIPT_ORIYA, 0x0B10}, |
817 {HB_Script_Tamil, HB_SCRIPT_TAMIL, 0x0B82}, | 815 {HB_SCRIPT_TAMIL, 0x0B82}, |
818 {HB_Script_Telugu, HB_SCRIPT_TELUGU, 0x0C10}, | 816 {HB_SCRIPT_TELUGU, 0x0C10}, |
819 {HB_Script_Kannada, HB_SCRIPT_KANNADA, 0x0C90}, | 817 {HB_SCRIPT_KANNADA, 0x0C90}, |
820 {HB_Script_Malayalam, HB_SCRIPT_MALAYALAM, 0x0D10}, | 818 {HB_SCRIPT_MALAYALAM, 0x0D10}, |
821 {HB_Script_Sinhala, HB_SCRIPT_SINHALA, 0x0D90}, | 819 {HB_SCRIPT_SINHALA, 0x0D90}, |
822 {HB_Script_Thai, HB_SCRIPT_THAI, 0x0E01}, | 820 {HB_SCRIPT_THAI, 0x0E01}, |
823 {HB_Script_Lao, HB_SCRIPT_LAO, 0x0E81}, | 821 {HB_SCRIPT_LAO, 0x0E81}, |
824 {HB_Script_Tibetan, HB_SCRIPT_TIBETAN, 0x0F00}, | 822 {HB_SCRIPT_TIBETAN, 0x0F00}, |
825 {HB_Script_Myanmar, HB_SCRIPT_MYANMAR, 0x1000}, | 823 {HB_SCRIPT_MYANMAR, 0x1000}, |
826 {HB_Script_Georgian, HB_SCRIPT_GEORGIAN, 0x10A0}, | 824 {HB_SCRIPT_GEORGIAN, 0x10A0}, |
827 {HB_Script_Unknown, HB_SCRIPT_ETHIOPIC, 0x1200}, | 825 {HB_SCRIPT_ETHIOPIC, 0x1200}, |
828 {HB_Script_Unknown, HB_SCRIPT_CHEROKEE, 0x13A0}, | 826 {HB_SCRIPT_CHEROKEE, 0x13A0}, |
829 {HB_Script_Ogham, HB_SCRIPT_OGHAM, 0x1680}, | 827 {HB_SCRIPT_OGHAM, 0x1680}, |
830 {HB_Script_Runic, HB_SCRIPT_RUNIC, 0x16A0}, | 828 {HB_SCRIPT_RUNIC, 0x16A0}, |
831 {HB_Script_Khmer, HB_SCRIPT_KHMER, 0x1780}, | 829 {HB_SCRIPT_KHMER, 0x1780}, |
832 {HB_Script_Unknown, HB_SCRIPT_TAI_LE, 0x1950}, | 830 {HB_SCRIPT_TAI_LE, 0x1950}, |
833 {HB_Script_Unknown, HB_SCRIPT_NEW_TAI_LUE, 0x1980}, | 831 {HB_SCRIPT_NEW_TAI_LUE, 0x1980}, |
834 {HB_Script_Unknown, HB_SCRIPT_TAI_THAM, 0x1A20}, | 832 {HB_SCRIPT_TAI_THAM, 0x1A20}, |
835 {HB_Script_Unknown, HB_SCRIPT_CHAM, 0xAA00}, | 833 {HB_SCRIPT_CHAM, 0xAA00}, |
836 }; | 834 }; |
837 | 835 |
838 static hb_script_t getHBScriptFromHBScriptOld(HB_Script script_old) { | |
839 hb_script_t script = HB_SCRIPT_INVALID; | |
840 int numSupportedFonts = sizeof(HB_UnicodeMappingArray) / sizeof(HB_UnicodeMa
pping); | |
841 for (int i = 0; i < numSupportedFonts; i++) { | |
842 if (script_old == HB_UnicodeMappingArray[i].script_old) { | |
843 script = HB_UnicodeMappingArray[i].script; | |
844 break; | |
845 } | |
846 } | |
847 return script; | |
848 } | |
849 | |
850 // returns 0 for "Not Found" | 836 // returns 0 for "Not Found" |
851 static SkUnichar getUnicodeFromHBScript(hb_script_t script) { | 837 static SkUnichar getUnicodeFromHBScript(hb_script_t script) { |
852 SkUnichar unichar = 0; | 838 SkUnichar unichar = 0; |
853 int numSupportedFonts = sizeof(HB_UnicodeMappingArray) / sizeof(HB_UnicodeMa
pping); | 839 int numSupportedFonts = sizeof(HB_UnicodeMappingArray) / sizeof(HB_UnicodeMa
pping); |
854 for (int i = 0; i < numSupportedFonts; i++) { | 840 for (int i = 0; i < numSupportedFonts; i++) { |
855 if (script == HB_UnicodeMappingArray[i].script) { | 841 if (script == HB_UnicodeMappingArray[i].script) { |
856 unichar = HB_UnicodeMappingArray[i].unicode; | 842 unichar = HB_UnicodeMappingArray[i].unicode; |
857 break; | 843 break; |
858 } | 844 } |
859 } | 845 } |
(...skipping 17 matching lines...) Expand all Loading... |
877 } | 863 } |
878 if (first.style != second.style) { | 864 if (first.style != second.style) { |
879 return (first.style > second.style) ? 1 : -1; | 865 return (first.style > second.style) ? 1 : -1; |
880 } | 866 } |
881 if (first.fontVariant != second.fontVariant) { | 867 if (first.fontVariant != second.fontVariant) { |
882 return (first.fontVariant > second.fontVariant) ? 1 : -1; | 868 return (first.fontVariant > second.fontVariant) ? 1 : -1; |
883 } | 869 } |
884 return 0; | 870 return 0; |
885 } | 871 } |
886 | 872 |
887 SkTypeface* SkCreateTypefaceForScriptNG(hb_script_t script, SkTypeface::Style st
yle, | 873 SkTypeface* SkCreateTypefaceForScript(hb_script_t script, SkTypeface::Style styl
e, |
888 SkPaintOptionsAndroid::FontVariant fontV
ariant) { | 874 SkPaintOptionsAndroid::FontVariant fontVar
iant) { |
889 SkAutoMutexAcquire ac(gTypefaceTableMutex); | 875 SkAutoMutexAcquire ac(gTypefaceTableMutex); |
890 | 876 |
891 TypefaceLookupStruct key; | 877 TypefaceLookupStruct key; |
892 key.script = script; | 878 key.script = script; |
893 key.style = style; | 879 key.style = style; |
894 key.fontVariant = fontVariant; | 880 key.fontVariant = fontVariant; |
895 | 881 |
896 int index = SkTSearch<TypefaceLookupStruct>( | 882 int index = SkTSearch<TypefaceLookupStruct>( |
897 (const TypefaceLookupStruct*) gTypefaceTable.begin(), | 883 (const TypefaceLookupStruct*) gTypefaceTable.begin(), |
898 gTypefaceTable.count(), key, sizeof(TypefaceLookupStruct), | 884 gTypefaceTable.count(), key, sizeof(TypefaceLookupStruct), |
(...skipping 14 matching lines...) Expand all Loading... |
913 | 899 |
914 // add to the lookup table | 900 // add to the lookup table |
915 key.typeface = retTypeface; | 901 key.typeface = retTypeface; |
916 *gTypefaceTable.insert(~index) = key; | 902 *gTypefaceTable.insert(~index) = key; |
917 } | 903 } |
918 | 904 |
919 // we ref(), the caller is expected to unref when they are done | 905 // we ref(), the caller is expected to unref when they are done |
920 return SkSafeRef(retTypeface); | 906 return SkSafeRef(retTypeface); |
921 } | 907 } |
922 | 908 |
923 SkTypeface* SkCreateTypefaceForScript(HB_Script script, SkTypeface::Style style, | |
924 SkPaintOptionsAndroid::FontVariant fontVar
iant) { | |
925 return SkCreateTypefaceForScriptNG(getHBScriptFromHBScriptOld(script), style
, fontVariant); | |
926 } | |
927 | |
928 #endif | 909 #endif |
929 | 910 |
930 /////////////////////////////////////////////////////////////////////////////// | 911 /////////////////////////////////////////////////////////////////////////////// |
931 | 912 |
932 SkFontMgr* SkFontMgr::Factory() { | 913 SkFontMgr* SkFontMgr::Factory() { |
933 return NULL; | 914 return NULL; |
934 } | 915 } |
OLD | NEW |