2 * Copyright 2012 Google Inc.
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
8 #include "SkFontDescriptor.h"
12 // these must match the sfnt 'name' enums
13 kFontFamilyName = 0x01,
15 kPostscriptName = 0x06,
17 // These count backwards from 0xFF, so as not to collide with the SFNT
18 // defines for names in its 'name' table.
23 SkFontDescriptor::SkFontDescriptor(SkTypeface::Style style) {
27 static void read_string(SkStream* stream, SkString* string) {
28 const uint32_t length = SkToU32(stream->readPackedUInt());
30 string->resize(length);
31 stream->read(string->writable_str(), length);
35 static void write_string(SkWStream* stream, const SkString& string,
37 if (!string.isEmpty()) {
38 stream->writePackedUInt(id);
39 stream->writePackedUInt(string.size());
40 stream->write(string.c_str(), string.size());
44 SkFontDescriptor::SkFontDescriptor(SkStream* stream) {
45 fStyle = (SkTypeface::Style)stream->readPackedUInt();
48 switch (stream->readPackedUInt()) {
50 read_string(stream, &fFamilyName);
53 read_string(stream, &fFullName);
56 read_string(stream, &fPostscriptName);
59 read_string(stream, &fFontFileName);
64 SkDEBUGFAIL("Unknown id used by a font descriptor");
70 void SkFontDescriptor::serialize(SkWStream* stream) {
71 stream->writePackedUInt(fStyle);
73 write_string(stream, fFamilyName, kFontFamilyName);
74 write_string(stream, fFullName, kFullName);
75 write_string(stream, fPostscriptName, kPostscriptName);
76 write_string(stream, fFontFileName, kFontFileName);
78 stream->writePackedUInt(kSentinel);