Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(148)

Unified Diff: src/core/SkFontDescriptor.cpp

Issue 567013002: Serialize the font index. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Move data into descriptor. Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/core/SkFontDescriptor.cpp
diff --git a/src/core/SkFontDescriptor.cpp b/src/core/SkFontDescriptor.cpp
index 5088ed7687bcec8dae2954ca2c5d3cf4aaa5b43b..7426894b8c8c02c6370868b0f5200b4ab95938dd 100644
--- a/src/core/SkFontDescriptor.cpp
+++ b/src/core/SkFontDescriptor.cpp
@@ -7,6 +7,7 @@
#include "SkFontDescriptor.h"
#include "SkStream.h"
+#include <SkData.h>
enum {
// these must match the sfnt 'name' enums
@@ -16,13 +17,12 @@ enum {
// These count backwards from 0xFF, so as not to collide with the SFNT
// defines for names in its 'name' table.
+ kFontIndex = 0xFD,
kFontFileName = 0xFE,
kSentinel = 0xFF,
};
-SkFontDescriptor::SkFontDescriptor(SkTypeface::Style style) {
- fStyle = style;
-}
+SkFontDescriptor::SkFontDescriptor(SkTypeface::Style style) : fFontIndex(0), fStyle(style) { }
static void read_string(SkStream* stream, SkString* string) {
const uint32_t length = SkToU32(stream->readPackedUInt());
@@ -41,11 +41,20 @@ static void write_string(SkWStream* stream, const SkString& string,
}
}
-SkFontDescriptor::SkFontDescriptor(SkStream* stream) {
+static size_t read_uint(SkStream* stream) {
+ return stream->readPackedUInt();
+}
+
+static void write_uint(SkWStream* stream, size_t n, uint32_t id) {
+ stream->writePackedUInt(id);
+ stream->writePackedUInt(n);
+}
+
+SkFontDescriptor::SkFontDescriptor(SkStream* stream) : fFontIndex(0) {
fStyle = (SkTypeface::Style)stream->readPackedUInt();
- for (;;) {
- switch (stream->readPackedUInt()) {
+ for (size_t id; (id = stream->readPackedUInt()) != kSentinel;) {
+ switch (id) {
case kFontFamilyName:
read_string(stream, &fFamilyName);
break;
@@ -55,16 +64,25 @@ SkFontDescriptor::SkFontDescriptor(SkStream* stream) {
case kPostscriptName:
read_string(stream, &fPostscriptName);
break;
+ case kFontIndex:
+ fFontIndex = read_uint(stream);
+ break;
case kFontFileName:
read_string(stream, &fFontFileName);
break;
- case kSentinel:
- return;
default:
SkDEBUGFAIL("Unknown id used by a font descriptor");
return;
}
}
+
+ size_t length = stream->readPackedUInt();
+ if (length > 0) {
+ SkAutoTUnref<SkData> data(SkData::NewUninitialized(length));
+ if (stream->read(data->writable_data(), length) == length) {
+ fFontData.reset(SkNEW_ARGS(SkMemoryStream, (data)));
+ }
+ }
}
void SkFontDescriptor::serialize(SkWStream* stream) {
@@ -74,6 +92,17 @@ void SkFontDescriptor::serialize(SkWStream* stream) {
write_string(stream, fFullName, kFullName);
write_string(stream, fPostscriptName, kPostscriptName);
write_string(stream, fFontFileName, kFontFileName);
+ if (fFontIndex) {
+ write_uint(stream, fFontIndex, kFontIndex);
+ }
stream->writePackedUInt(kSentinel);
+
+ if (fFontData) {
+ size_t length = fFontData->getLength();
+ stream->writePackedUInt(length);
+ stream->writeStream(fFontData, length);
+ } else {
+ stream->writePackedUInt(0);
+ }
}

Powered by Google App Engine
This is Rietveld 408576698