blob: f443b04630d8528627a56680f81ef2f03de436e9 [file] [log] [blame]
brianosmanfad98562016-05-04 11:06:28 -07001/*
2 * Copyright 2016 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#include "SkJsonWriteBuffer.h"
9
10#include "SkDrawCommand.h"
brianosmanfad98562016-05-04 11:06:28 -070011
Brian Osmand8a90f92019-01-28 13:41:19 -050012void SkJsonWriteBuffer::append(const char* type) {
13 SkString fullName = SkStringPrintf("%02d_%s", fCount++, type);
14 fWriter->appendName(fullName.c_str());
brianosmanfad98562016-05-04 11:06:28 -070015}
16
Mike Reed45ab6302017-12-13 11:38:57 -050017void SkJsonWriteBuffer::writePad32(const void* data, size_t size) {
Brian Osmand8a90f92019-01-28 13:41:19 -050018 this->append("rawBytes");
19 fWriter->beginArray();
Mike Reed45ab6302017-12-13 11:38:57 -050020 const uint8_t* bytes = reinterpret_cast<const uint8_t*>(data);
21 for (size_t i = 0; i < size; ++i) {
22 SkString hexByte = SkStringPrintf("%02x", bytes[i]);
Brian Osmand8a90f92019-01-28 13:41:19 -050023 fWriter->appendString(hexByte.c_str());
Mike Reed45ab6302017-12-13 11:38:57 -050024 }
Brian Osmand8a90f92019-01-28 13:41:19 -050025 fWriter->endArray();
Mike Reed45ab6302017-12-13 11:38:57 -050026}
27
brianosmanfad98562016-05-04 11:06:28 -070028void SkJsonWriteBuffer::writeByteArray(const void* data, size_t size) {
Brian Osmand8a90f92019-01-28 13:41:19 -050029 this->append("byteArray");
30 fWriter->beginArray();
brianosmanfad98562016-05-04 11:06:28 -070031 const uint8_t* bytes = reinterpret_cast<const uint8_t*>(data);
32 for (size_t i = 0; i < size; ++i) {
33 SkString hexByte = SkStringPrintf("%02x", bytes[i]);
Brian Osmand8a90f92019-01-28 13:41:19 -050034 fWriter->appendString(hexByte.c_str());
brianosmanfad98562016-05-04 11:06:28 -070035 }
Brian Osmand8a90f92019-01-28 13:41:19 -050036 fWriter->endArray();
brianosmanfad98562016-05-04 11:06:28 -070037}
38
39void SkJsonWriteBuffer::writeBool(bool value) {
Brian Osmand8a90f92019-01-28 13:41:19 -050040 this->append("bool"); fWriter->appendBool(value);
brianosmanfad98562016-05-04 11:06:28 -070041}
42
43void SkJsonWriteBuffer::writeScalar(SkScalar value) {
Brian Osmand8a90f92019-01-28 13:41:19 -050044 this->append("scalar"); fWriter->appendFloat(value);
brianosmanfad98562016-05-04 11:06:28 -070045}
46
47void SkJsonWriteBuffer::writeScalarArray(const SkScalar* value, uint32_t count) {
Brian Osmand8a90f92019-01-28 13:41:19 -050048 this->append("scalarArray");
49 fWriter->beginArray();
brianosmanfad98562016-05-04 11:06:28 -070050 for (uint32_t i = 0; i < count; ++i) {
Brian Osmand8a90f92019-01-28 13:41:19 -050051 fWriter->appendFloat(value[i]);
brianosmanfad98562016-05-04 11:06:28 -070052 }
Brian Osmand8a90f92019-01-28 13:41:19 -050053 fWriter->endArray();
brianosmanfad98562016-05-04 11:06:28 -070054}
55
56void SkJsonWriteBuffer::writeInt(int32_t value) {
Brian Osmand8a90f92019-01-28 13:41:19 -050057 this->append("int"); fWriter->appendS32(value);
brianosmanfad98562016-05-04 11:06:28 -070058}
59
60void SkJsonWriteBuffer::writeIntArray(const int32_t* value, uint32_t count) {
Brian Osmand8a90f92019-01-28 13:41:19 -050061 this->append("intArray");
62 fWriter->beginArray();
brianosmanfad98562016-05-04 11:06:28 -070063 for (uint32_t i = 0; i < count; ++i) {
Brian Osmand8a90f92019-01-28 13:41:19 -050064 fWriter->appendS32(value[i]);
brianosmanfad98562016-05-04 11:06:28 -070065 }
Brian Osmand8a90f92019-01-28 13:41:19 -050066 fWriter->endArray();
brianosmanfad98562016-05-04 11:06:28 -070067}
68
69void SkJsonWriteBuffer::writeUInt(uint32_t value) {
Brian Osmand8a90f92019-01-28 13:41:19 -050070 this->append("uint"); fWriter->appendU32(value);
brianosmanfad98562016-05-04 11:06:28 -070071}
72
73void SkJsonWriteBuffer::writeString(const char* value) {
Brian Osmand8a90f92019-01-28 13:41:19 -050074 this->append("string"); fWriter->appendString(value);
brianosmanfad98562016-05-04 11:06:28 -070075}
76
77void SkJsonWriteBuffer::writeFlattenable(const SkFlattenable* flattenable) {
78 if (flattenable) {
Brian Osmand8a90f92019-01-28 13:41:19 -050079 this->append(flattenable->getTypeName());
80 fWriter->beginObject();
81 SkJsonWriteBuffer flattenableBuffer(fWriter, fUrlDataManager);
brianosmanfad98562016-05-04 11:06:28 -070082 flattenable->flatten(flattenableBuffer);
Brian Osmand8a90f92019-01-28 13:41:19 -050083 fWriter->endObject();
brianosmanfad98562016-05-04 11:06:28 -070084 } else {
Brian Osmand8a90f92019-01-28 13:41:19 -050085 this->append("flattenable"); fWriter->appendPointer(nullptr);
brianosmanfad98562016-05-04 11:06:28 -070086 }
87}
88
89void SkJsonWriteBuffer::writeColor(SkColor color) {
Brian Osmand8a90f92019-01-28 13:41:19 -050090 this->append("color"); SkDrawCommand::MakeJsonColor(*fWriter, color);
brianosmanfad98562016-05-04 11:06:28 -070091}
92
93void SkJsonWriteBuffer::writeColorArray(const SkColor* color, uint32_t count) {
Brian Osmand8a90f92019-01-28 13:41:19 -050094 this->append("colorArray");
95 fWriter->beginArray();
brianosmanfad98562016-05-04 11:06:28 -070096 for (uint32_t i = 0; i < count; ++i) {
Brian Osmand8a90f92019-01-28 13:41:19 -050097 SkDrawCommand::MakeJsonColor(*fWriter, color[i]);
brianosmanfad98562016-05-04 11:06:28 -070098 }
Brian Osmand8a90f92019-01-28 13:41:19 -050099 fWriter->endArray();
brianosmanfad98562016-05-04 11:06:28 -0700100}
101
brianosman97bbf822016-09-25 13:15:58 -0700102void SkJsonWriteBuffer::writeColor4f(const SkColor4f& color) {
Brian Osmand8a90f92019-01-28 13:41:19 -0500103 this->append("color"); SkDrawCommand::MakeJsonColor4f(*fWriter, color);
brianosman97bbf822016-09-25 13:15:58 -0700104}
105
106void SkJsonWriteBuffer::writeColor4fArray(const SkColor4f* color, uint32_t count) {
Brian Osmand8a90f92019-01-28 13:41:19 -0500107 this->append("colorArray");
108 fWriter->beginArray();
brianosman97bbf822016-09-25 13:15:58 -0700109 for (uint32_t i = 0; i < count; ++i) {
Brian Osmand8a90f92019-01-28 13:41:19 -0500110 SkDrawCommand::MakeJsonColor4f(*fWriter, color[i]);
brianosman97bbf822016-09-25 13:15:58 -0700111 }
Brian Osmand8a90f92019-01-28 13:41:19 -0500112 fWriter->endArray();
brianosman97bbf822016-09-25 13:15:58 -0700113}
114
brianosmanfad98562016-05-04 11:06:28 -0700115void SkJsonWriteBuffer::writePoint(const SkPoint& point) {
Brian Osmand8a90f92019-01-28 13:41:19 -0500116 this->append("point"); SkDrawCommand::MakeJsonPoint(*fWriter, point);
brianosmanfad98562016-05-04 11:06:28 -0700117}
118
Michael Ludwigea241402018-08-22 09:26:33 -0400119void SkJsonWriteBuffer::writePoint3(const SkPoint3& point) {
Brian Osmand8a90f92019-01-28 13:41:19 -0500120 this->append("point3"); SkDrawCommand::MakeJsonPoint3(*fWriter, point);
Michael Ludwigea241402018-08-22 09:26:33 -0400121}
122
brianosmanfad98562016-05-04 11:06:28 -0700123void SkJsonWriteBuffer::writePointArray(const SkPoint* point, uint32_t count) {
Brian Osmand8a90f92019-01-28 13:41:19 -0500124 this->append("pointArray");
125 fWriter->beginArray();
brianosmanfad98562016-05-04 11:06:28 -0700126 for (uint32_t i = 0; i < count; ++i) {
Brian Osmand8a90f92019-01-28 13:41:19 -0500127 SkDrawCommand::MakeJsonPoint(*fWriter, point[i]);
brianosmanfad98562016-05-04 11:06:28 -0700128 }
Brian Osmand8a90f92019-01-28 13:41:19 -0500129 fWriter->endArray();
brianosmanfad98562016-05-04 11:06:28 -0700130}
131
132void SkJsonWriteBuffer::writeMatrix(const SkMatrix& matrix) {
Brian Osmand8a90f92019-01-28 13:41:19 -0500133 this->append("matrix"); SkDrawCommand::MakeJsonMatrix(*fWriter, matrix);
brianosmanfad98562016-05-04 11:06:28 -0700134}
135
136void SkJsonWriteBuffer::writeIRect(const SkIRect& rect) {
Brian Osmand8a90f92019-01-28 13:41:19 -0500137 this->append("irect"); SkDrawCommand::MakeJsonIRect(*fWriter, rect);
brianosmanfad98562016-05-04 11:06:28 -0700138}
139
140void SkJsonWriteBuffer::writeRect(const SkRect& rect) {
Brian Osmand8a90f92019-01-28 13:41:19 -0500141 this->append("rect"); SkDrawCommand::MakeJsonRect(*fWriter, rect);
brianosmanfad98562016-05-04 11:06:28 -0700142}
143
144void SkJsonWriteBuffer::writeRegion(const SkRegion& region) {
Brian Osmand8a90f92019-01-28 13:41:19 -0500145 this->append("region"); SkDrawCommand::MakeJsonRegion(*fWriter, region);
brianosmanfad98562016-05-04 11:06:28 -0700146}
147
148void SkJsonWriteBuffer::writePath(const SkPath& path) {
Brian Osmand8a90f92019-01-28 13:41:19 -0500149 this->append("path"); SkDrawCommand::MakeJsonPath(*fWriter, path);
brianosmanfad98562016-05-04 11:06:28 -0700150}
151
152size_t SkJsonWriteBuffer::writeStream(SkStream* stream, size_t length) {
153 // Contents not supported
Brian Osmand8a90f92019-01-28 13:41:19 -0500154 this->append("stream"); fWriter->appendU64(static_cast<uint64_t>(length));
brianosmanfad98562016-05-04 11:06:28 -0700155 return 0;
156}
157
brianosmanfad98562016-05-04 11:06:28 -0700158void SkJsonWriteBuffer::writeImage(const SkImage* image) {
Brian Osmand8a90f92019-01-28 13:41:19 -0500159 this->append("image");
160 fWriter->beginObject();
161 SkDrawCommand::flatten(*image, *fWriter, *fUrlDataManager);
162 fWriter->endObject();
brianosmanfad98562016-05-04 11:06:28 -0700163}
164
165void SkJsonWriteBuffer::writeTypeface(SkTypeface* typeface) {
166 // Unsupported
Brian Osmand8a90f92019-01-28 13:41:19 -0500167 this->append("typeface"); fWriter->appendPointer(typeface);
brianosmanfad98562016-05-04 11:06:28 -0700168}
169
170void SkJsonWriteBuffer::writePaint(const SkPaint& paint) {
Brian Osmand8a90f92019-01-28 13:41:19 -0500171 this->append("paint"); SkDrawCommand::MakeJsonPaint(*fWriter, paint, *fUrlDataManager);
brianosmanfad98562016-05-04 11:06:28 -0700172}