diff options
author | robertphillips@google.com <robertphillips@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2013-01-31 15:56:22 +0000 |
---|---|---|
committer | robertphillips@google.com <robertphillips@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2013-01-31 15:56:22 +0000 |
commit | 3b0a9fe5672e7339ec3e5e6d3986b15f57ae24e7 (patch) | |
tree | 3c1fd7d83830d76aa412f57a3d7cf39cb8d1e24a /src/core/SkFontDescriptor.cpp | |
parent | 633c32b13b5d199d797be669d3dc7981d603a945 (diff) |
Update filter tool to allow more flexible filtering
https://codereview.appspot.com/7227055/
git-svn-id: http://skia.googlecode.com/svn/trunk@7492 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/core/SkFontDescriptor.cpp')
-rw-r--r-- | src/core/SkFontDescriptor.cpp | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/src/core/SkFontDescriptor.cpp b/src/core/SkFontDescriptor.cpp new file mode 100644 index 0000000000..7679d92a14 --- /dev/null +++ b/src/core/SkFontDescriptor.cpp @@ -0,0 +1,79 @@ +/* + * Copyright 2012 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "SkFontDescriptor.h" +#include "SkStream.h" + +enum { + // these must match the sfnt 'name' enums + kFontFamilyName = 0x01, + kFullName = 0x04, + kPostscriptName = 0x06, + + // These count backwards from 0xFF, so as not to collide with the SFNT + // defines for names in its 'name' table. + kFontFileName = 0xFE, + kSentinel = 0xFF, +}; + +SkFontDescriptor::SkFontDescriptor(SkTypeface::Style style) { + fStyle = style; +} + +static void read_string(SkStream* stream, SkString* string) { + const uint32_t length = stream->readPackedUInt(); + if (length > 0) { + string->resize(length); + stream->read(string->writable_str(), length); + } +} + +static void write_string(SkWStream* stream, const SkString& string, + uint32_t id) { + if (!string.isEmpty()) { + stream->writePackedUInt(id); + stream->writePackedUInt(string.size()); + stream->write(string.c_str(), string.size()); + } +} + +SkFontDescriptor::SkFontDescriptor(SkStream* stream) { + fStyle = (SkTypeface::Style)stream->readPackedUInt(); + + for (;;) { + switch (stream->readPackedUInt()) { + case kFontFamilyName: + read_string(stream, &fFamilyName); + break; + case kFullName: + read_string(stream, &fFullName); + break; + case kPostscriptName: + read_string(stream, &fPostscriptName); + break; + case kFontFileName: + read_string(stream, &fFontFileName); + break; + case kSentinel: + return; + default: + SkDEBUGFAIL("Unknown id used by a font descriptor"); + return; + } + } +} + +void SkFontDescriptor::serialize(SkWStream* stream) { + stream->writePackedUInt(fStyle); + + write_string(stream, fFamilyName, kFontFamilyName); + write_string(stream, fFullName, kFullName); + write_string(stream, fPostscriptName, kPostscriptName); + write_string(stream, fFontFileName, kFontFileName); + + stream->writePackedUInt(kSentinel); +} |