| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 Google Inc. |
| 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 "SkFontDescriptor.h" | 8 #include "SkFontDescriptor.h" |
| 9 #include "SkOpts.h" | 9 #include "SkOpts.h" |
| 10 #include "SkStream.h" | 10 #include "SkStream.h" |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 56 SkAutoTUnref<SkTypeface::LocalizedStrings> debugIter( | 56 SkAutoTUnref<SkTypeface::LocalizedStrings> debugIter( |
| 57 SkOTUtils::LocalizedStrings_NameTable::CreateForFamilyNames(*tf)); | 57 SkOTUtils::LocalizedStrings_NameTable::CreateForFamilyNames(*tf)); |
| 58 while (debugIter->next(&familyNameLocalized)) { | 58 while (debugIter->next(&familyNameLocalized)) { |
| 59 SkDebugf("no match fontName=\"%s\"\n", familyNameLocalized.fString.c_str
()); | 59 SkDebugf("no match fontName=\"%s\"\n", familyNameLocalized.fString.c_str
()); |
| 60 } | 60 } |
| 61 #endif | 61 #endif |
| 62 return -1; | 62 return -1; |
| 63 } | 63 } |
| 64 | 64 |
| 65 static uint32_t compute_checksum(const SkTypeface* tf) { | 65 static uint32_t compute_checksum(const SkTypeface* tf) { |
| 66 SkFontData* fontData = tf->createFontData(); | 66 std::unique_ptr<SkFontData> fontData = tf->makeFontData(); |
| 67 if (!fontData) { | 67 if (!fontData) { |
| 68 return 0; | 68 return 0; |
| 69 } | 69 } |
| 70 SkStreamAsset* fontStream = fontData->getStream(); | 70 SkStreamAsset* fontStream = fontData->getStream(); |
| 71 if (!fontStream) { | 71 if (!fontStream) { |
| 72 return 0; | 72 return 0; |
| 73 } | 73 } |
| 74 SkTDArray<char> data; | 74 SkTDArray<char> data; |
| 75 size_t length = fontStream->getLength(); | 75 size_t length = fontStream->getLength(); |
| 76 if (!length) { | 76 if (!length) { |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 111 return isLocal; | 111 return isLocal; |
| 112 } | 112 } |
| 113 | 113 |
| 114 static void serialize_full(const SkTypeface* tf, SkWStream* wstream) { | 114 static void serialize_full(const SkTypeface* tf, SkWStream* wstream) { |
| 115 bool isLocal = false; | 115 bool isLocal = false; |
| 116 SkFontDescriptor desc; | 116 SkFontDescriptor desc; |
| 117 tf->getFontDescriptor(&desc, &isLocal); | 117 tf->getFontDescriptor(&desc, &isLocal); |
| 118 | 118 |
| 119 // Embed font data if it's a local font. | 119 // Embed font data if it's a local font. |
| 120 if (isLocal && !desc.hasFontData()) { | 120 if (isLocal && !desc.hasFontData()) { |
| 121 desc.setFontData(tf->createFontData()); | 121 desc.setFontData(tf->makeFontData()); |
| 122 } | 122 } |
| 123 desc.serialize(wstream); | 123 desc.serialize(wstream); |
| 124 } | 124 } |
| 125 | 125 |
| 126 static void serialize_name_only(const SkTypeface* tf, SkWStream* wstream) { | 126 static void serialize_name_only(const SkTypeface* tf, SkWStream* wstream) { |
| 127 bool isLocal = false; | 127 bool isLocal = false; |
| 128 SkFontDescriptor desc; | 128 SkFontDescriptor desc; |
| 129 tf->getFontDescriptor(&desc, &isLocal); | 129 tf->getFontDescriptor(&desc, &isLocal); |
| 130 SkASSERT(!isLocal); | 130 SkASSERT(!isLocal); |
| 131 #if WHITELIST_DEBUG | 131 #if WHITELIST_DEBUG |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 183 } | 183 } |
| 184 serialize_sub(fontName, tf->fontStyle(), wstream); | 184 serialize_sub(fontName, tf->fontStyle(), wstream); |
| 185 } | 185 } |
| 186 | 186 |
| 187 sk_sp<SkTypeface> WhitelistDeserializeTypeface(SkStream* stream) { | 187 sk_sp<SkTypeface> WhitelistDeserializeTypeface(SkStream* stream) { |
| 188 SkFontDescriptor desc; | 188 SkFontDescriptor desc; |
| 189 if (!SkFontDescriptor::Deserialize(stream, &desc)) { | 189 if (!SkFontDescriptor::Deserialize(stream, &desc)) { |
| 190 return nullptr; | 190 return nullptr; |
| 191 } | 191 } |
| 192 | 192 |
| 193 SkFontData* data = desc.detachFontData(); | 193 std::unique_ptr<SkFontData> data = desc.detachFontData(); |
| 194 if (data) { | 194 if (data) { |
| 195 sk_sp<SkTypeface> typeface(SkTypeface::MakeFromFontData(data)); | 195 sk_sp<SkTypeface> typeface(SkTypeface::MakeFromFontData(std::move(data))
); |
| 196 if (typeface) { | 196 if (typeface) { |
| 197 return typeface; | 197 return typeface; |
| 198 } | 198 } |
| 199 } | 199 } |
| 200 const char* familyName = desc.getFamilyName(); | 200 const char* familyName = desc.getFamilyName(); |
| 201 if (!strncmp(SUBNAME_PREFIX, familyName, sizeof(SUBNAME_PREFIX) - 1)) { | 201 if (!strncmp(SUBNAME_PREFIX, familyName, sizeof(SUBNAME_PREFIX) - 1)) { |
| 202 familyName += sizeof(SUBNAME_PREFIX) - 1; | 202 familyName += sizeof(SUBNAME_PREFIX) - 1; |
| 203 } | 203 } |
| 204 return SkTypeface::MakeFromName(familyName, desc.getStyle()); | 204 return SkTypeface::MakeFromName(familyName, desc.getStyle()); |
| 205 } | 205 } |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 264 const char* fontName = whitelist[i].fFontName; | 264 const char* fontName = whitelist[i].fFontName; |
| 265 sk_sp<SkTypeface> tf(SkTypeface::MakeFromName(fontName, SkFontStyle())); | 265 sk_sp<SkTypeface> tf(SkTypeface::MakeFromName(fontName, SkFontStyle())); |
| 266 uint32_t checksum = compute_checksum(tf.get()); | 266 uint32_t checksum = compute_checksum(tf.get()); |
| 267 line.printf(checksumEntry, fontName, checksum); | 267 line.printf(checksumEntry, fontName, checksum); |
| 268 sk_fwrite(line.c_str(), line.size(), file); | 268 sk_fwrite(line.c_str(), line.size(), file); |
| 269 } | 269 } |
| 270 sk_fwrite(checksumTrailer, sizeof(checksumTrailer) - 1, file); | 270 sk_fwrite(checksumTrailer, sizeof(checksumTrailer) - 1, file); |
| 271 sk_fclose(file); | 271 sk_fclose(file); |
| 272 return true; | 272 return true; |
| 273 } | 273 } |
| OLD | NEW |