1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/gfx/skia/trunk/src/core/SkFontDescriptor.cpp Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,79 @@ 1.4 +/* 1.5 + * Copyright 2012 Google Inc. 1.6 + * 1.7 + * Use of this source code is governed by a BSD-style license that can be 1.8 + * found in the LICENSE file. 1.9 + */ 1.10 + 1.11 +#include "SkFontDescriptor.h" 1.12 +#include "SkStream.h" 1.13 + 1.14 +enum { 1.15 + // these must match the sfnt 'name' enums 1.16 + kFontFamilyName = 0x01, 1.17 + kFullName = 0x04, 1.18 + kPostscriptName = 0x06, 1.19 + 1.20 + // These count backwards from 0xFF, so as not to collide with the SFNT 1.21 + // defines for names in its 'name' table. 1.22 + kFontFileName = 0xFE, 1.23 + kSentinel = 0xFF, 1.24 +}; 1.25 + 1.26 +SkFontDescriptor::SkFontDescriptor(SkTypeface::Style style) { 1.27 + fStyle = style; 1.28 +} 1.29 + 1.30 +static void read_string(SkStream* stream, SkString* string) { 1.31 + const uint32_t length = SkToU32(stream->readPackedUInt()); 1.32 + if (length > 0) { 1.33 + string->resize(length); 1.34 + stream->read(string->writable_str(), length); 1.35 + } 1.36 +} 1.37 + 1.38 +static void write_string(SkWStream* stream, const SkString& string, 1.39 + uint32_t id) { 1.40 + if (!string.isEmpty()) { 1.41 + stream->writePackedUInt(id); 1.42 + stream->writePackedUInt(string.size()); 1.43 + stream->write(string.c_str(), string.size()); 1.44 + } 1.45 +} 1.46 + 1.47 +SkFontDescriptor::SkFontDescriptor(SkStream* stream) { 1.48 + fStyle = (SkTypeface::Style)stream->readPackedUInt(); 1.49 + 1.50 + for (;;) { 1.51 + switch (stream->readPackedUInt()) { 1.52 + case kFontFamilyName: 1.53 + read_string(stream, &fFamilyName); 1.54 + break; 1.55 + case kFullName: 1.56 + read_string(stream, &fFullName); 1.57 + break; 1.58 + case kPostscriptName: 1.59 + read_string(stream, &fPostscriptName); 1.60 + break; 1.61 + case kFontFileName: 1.62 + read_string(stream, &fFontFileName); 1.63 + break; 1.64 + case kSentinel: 1.65 + return; 1.66 + default: 1.67 + SkDEBUGFAIL("Unknown id used by a font descriptor"); 1.68 + return; 1.69 + } 1.70 + } 1.71 +} 1.72 + 1.73 +void SkFontDescriptor::serialize(SkWStream* stream) { 1.74 + stream->writePackedUInt(fStyle); 1.75 + 1.76 + write_string(stream, fFamilyName, kFontFamilyName); 1.77 + write_string(stream, fFullName, kFullName); 1.78 + write_string(stream, fPostscriptName, kPostscriptName); 1.79 + write_string(stream, fFontFileName, kFontFileName); 1.80 + 1.81 + stream->writePackedUInt(kSentinel); 1.82 +}