86 50, 62.5, 75, 87.5, 100, 112.5, 125, 150, 200,
87 200, 200, 200, 200, 200, 200
92 using FactoryIdType =
decltype(
result->fFactoryId);
94 size_t coordinateCount;
95 using CoordinateCountType =
decltype(
result->fCoordinateCount);
98 using CollectionIndexType =
decltype(
result->fCollectionIndex);
101 using PaletteIndexType =
decltype(
result->fPaletteIndex);
103 size_t paletteEntryOverrideCount;
104 using PaletteEntryOverrideCountType =
decltype(
result->fPaletteEntryOverrideCount);
106 size_t paletteEntryOverrideIndex;
107 using PaletteEntryOverrideIndexType =
decltype(
result->fPaletteEntryOverrides[0].index);
115 if (!stream->readPackedUInt(&styleBits)) {
return false; }
116 weight = ((styleBits >> 16) & 0xFFFF);
133 if (!stream->readScalar(&weight)) {
return false; }
136 if (!stream->readScalar(&
width)) {
return false; }
139 if (!stream->readScalar(&slant)) {
return false; }
142 if (!stream->readScalar(&italic)) {
return false; }
145 if (!stream->readPackedUInt(&coordinateCount)) {
return false; }
146 if (!SkTFitsIn<CoordinateCountType>(coordinateCount)) {
return false; }
150 result->fCoordinateCount = SkTo<CoordinateCountType>(coordinateCount);
152 result->fVariation.reset(coordinateCount);
153 for (
size_t i = 0; i < coordinateCount; ++i) {
154 if (!stream->readU32(&
result->fVariation[i].axis)) {
return false; }
155 if (!stream->readScalar(&
result->fVariation[i].value)) {
return false; }
159 if (!stream->readPackedUInt(&index)) {
return false; }
160 if (!SkTFitsIn<CollectionIndexType>(index)) {
return false; }
161 result->fCollectionIndex = SkTo<CollectionIndexType>(index);
164 if (!stream->readPackedUInt(&paletteIndex)) {
return false; }
165 if (!SkTFitsIn<PaletteIndexType>(paletteIndex)) {
return false; }
166 result->fPaletteIndex = SkTo<PaletteIndexType>(paletteIndex);
169 if (!stream->readPackedUInt(&paletteEntryOverrideCount)) {
return false; }
170 if (!SkTFitsIn<PaletteEntryOverrideCountType>(paletteEntryOverrideCount)) {
176 result->fPaletteEntryOverrideCount =
177 SkTo<PaletteEntryOverrideCountType>(paletteEntryOverrideCount);
179 result->fPaletteEntryOverrides.reset(paletteEntryOverrideCount);
180 for (
size_t i = 0; i < paletteEntryOverrideCount; ++i) {
181 if (!stream->readPackedUInt(&paletteEntryOverrideIndex)) {
return false; }
182 if (!SkTFitsIn<PaletteEntryOverrideIndexType>(paletteEntryOverrideIndex)) {
185 result->fPaletteEntryOverrides[i].index =
186 SkTo<PaletteEntryOverrideIndexType>(paletteEntryOverrideIndex);
187 if (!stream->readU32(&
result->fPaletteEntryOverrides[i].color)) {
193 if (!stream->readPackedUInt(&factoryId)) {
return false; }
194 if (!SkTFitsIn<FactoryIdType>(factoryId)) {
return false; }
195 result->fFactoryId = SkTo<FactoryIdType>(factoryId);
198 SkDEBUGFAIL(
"Unknown id used by a font descriptor");
210 if (!stream->readPackedUInt(&
length)) {
return false; }
216 if (stream->read(data->writable_data(),
length) !=
length) {
226 uint32_t styleBits = (fStyle.
weight() << 16) | (fStyle.
width() << 8) | (fStyle.
slant());
227 stream->writePackedUInt(styleBits);
238 if (fCollectionIndex > 0) {
241 if (fPaletteIndex > 0) {
244 if (fCoordinateCount > 0) {
246 for (
int i = 0; i < fCoordinateCount; ++i) {
247 stream->write32(fVariation[i].axis);
248 stream->writeScalar(fVariation[i].
value);
251 if (fPaletteEntryOverrideCount > 0) {
253 for (
int i = 0; i < fPaletteEntryOverrideCount; ++i) {
254 stream->writePackedUInt(fPaletteEntryOverrides[i].index);
255 stream->write32(fPaletteEntryOverrides[i].
color);
264 std::unique_ptr<SkStreamAsset> fontStream = fStream->duplicate();
265 size_t length = fontStream->getLength();
266 stream->writePackedUInt(
length);
267 stream->writeStream(fontStream.get(),
length);
269 stream->writePackedUInt(0);