gfx/skia/trunk/src/core/SkFontDescriptor.cpp

changeset 0
6474c204b198
     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 +}

mercurial