blob: 018a86babd7eb391ac7188c3be9219beb1e3b3ac [file] [log] [blame]
chudy@google.com902ebe52012-06-29 14:21:22 +00001
2/*
3 * Copyright 2012 Google Inc.
4 *
5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
7 */
8
9#include "SkObjectParser.h"
robertphillips@google.com67baba42013-01-02 20:20:31 +000010#include "SkRRect.h"
chudy@google.com902ebe52012-06-29 14:21:22 +000011
12/* TODO(chudy): Replace all std::strings with char */
13
chudy@google.com97cee972012-08-07 20:41:37 +000014SkString* SkObjectParser::BitmapToString(const SkBitmap& bitmap) {
robertphillips@google.com195952f2012-10-23 12:13:35 +000015 SkString* mBitmap = new SkString("SkBitmap: ");
16 mBitmap->append("W: ");
17 mBitmap->appendS32(bitmap.width());
18 mBitmap->append(" H: ");
19 mBitmap->appendS32(bitmap.height());
20
21 const char* gConfigStrings[] = {
skia.committer@gmail.com1e34ff72012-10-24 02:01:24 +000022 "None", "A1", "A8", "Index8", "RGB565", "ARGB4444", "ARGB8888", "RLE8"
robertphillips@google.com195952f2012-10-23 12:13:35 +000023 };
24 SkASSERT(SkBitmap::kConfigCount == 8);
25
26 mBitmap->append(" Config: ");
27 mBitmap->append(gConfigStrings[bitmap.getConfig()]);
28
29 if (bitmap.isOpaque()) {
30 mBitmap->append(" opaque");
31 } else {
32 mBitmap->append(" not-opaque");
33 }
34
35 if (bitmap.isImmutable()) {
36 mBitmap->append(" immutable");
37 } else {
38 mBitmap->append(" not-immutable");
39 }
40
41 if (bitmap.isVolatile()) {
42 mBitmap->append(" volatile");
43 } else {
44 mBitmap->append(" not-volatile");
45 }
46
47 mBitmap->append(" genID: ");
48 mBitmap->appendS32(bitmap.getGenerationID());
49
chudy@google.com902ebe52012-06-29 14:21:22 +000050 return mBitmap;
51}
52
chudy@google.com97cee972012-08-07 20:41:37 +000053SkString* SkObjectParser::BoolToString(bool doAA) {
54 SkString* mBool = new SkString("Bool doAA: ");
chudy@google.com902ebe52012-06-29 14:21:22 +000055 if (doAA) {
chudy@google.com97cee972012-08-07 20:41:37 +000056 mBool->append("True");
chudy@google.com902ebe52012-06-29 14:21:22 +000057 } else {
chudy@google.com97cee972012-08-07 20:41:37 +000058 mBool->append("False");
chudy@google.com902ebe52012-06-29 14:21:22 +000059 }
chudy@google.com97cee972012-08-07 20:41:37 +000060 return mBool;
chudy@google.com902ebe52012-06-29 14:21:22 +000061}
62
chudy@google.com97cee972012-08-07 20:41:37 +000063SkString* SkObjectParser::CustomTextToString(const char* text) {
64 SkString* mText = new SkString(text);
65 return mText;
chudy@google.com902ebe52012-06-29 14:21:22 +000066}
67
chudy@google.com97cee972012-08-07 20:41:37 +000068SkString* SkObjectParser::IntToString(int x, const char* text) {
69 SkString* mInt = new SkString(text);
70 mInt->append(" ");
71 mInt->appendScalar(SkIntToScalar(x));
72 return mInt;
chudy@google.com902ebe52012-06-29 14:21:22 +000073}
74
chudy@google.com97cee972012-08-07 20:41:37 +000075SkString* SkObjectParser::IRectToString(const SkIRect& rect) {
76 SkString* mRect = new SkString("SkIRect: ");
77 mRect->append("L: ");
robertphillips@google.com195952f2012-10-23 12:13:35 +000078 mRect->appendS32(rect.left());
chudy@google.com97cee972012-08-07 20:41:37 +000079 mRect->append(", T: ");
robertphillips@google.com195952f2012-10-23 12:13:35 +000080 mRect->appendS32(rect.top());
chudy@google.com97cee972012-08-07 20:41:37 +000081 mRect->append(", R: ");
robertphillips@google.com195952f2012-10-23 12:13:35 +000082 mRect->appendS32(rect.right());
chudy@google.com97cee972012-08-07 20:41:37 +000083 mRect->append(", B: ");
robertphillips@google.com195952f2012-10-23 12:13:35 +000084 mRect->appendS32(rect.bottom());
chudy@google.com902ebe52012-06-29 14:21:22 +000085 return mRect;
86}
87
chudy@google.com97cee972012-08-07 20:41:37 +000088SkString* SkObjectParser::MatrixToString(const SkMatrix& matrix) {
89 SkString* mMatrix = new SkString("SkMatrix: (");
90 for (int i = 0; i < 8; i++) {
91 mMatrix->appendScalar(matrix.get(i));
92 mMatrix->append("), (");
chudy@google.com902ebe52012-06-29 14:21:22 +000093 }
chudy@google.com97cee972012-08-07 20:41:37 +000094 mMatrix->appendScalar(matrix.get(8));
95 mMatrix->append(")");
96 return mMatrix;
97}
chudy@google.com902ebe52012-06-29 14:21:22 +000098
chudy@google.com97cee972012-08-07 20:41:37 +000099SkString* SkObjectParser::PaintToString(const SkPaint& paint) {
100 SkColor color = paint.getColor();
robertphillips@google.com195952f2012-10-23 12:13:35 +0000101 SkString* mPaint = new SkString("SkPaint: Color: 0x");
chudy@google.com97cee972012-08-07 20:41:37 +0000102 mPaint->appendHex(color);
robertphillips@google.com195952f2012-10-23 12:13:35 +0000103
chudy@google.com97cee972012-08-07 20:41:37 +0000104 return mPaint;
105}
106
107SkString* SkObjectParser::PathToString(const SkPath& path) {
robertphillips@google.com87201762012-10-18 13:30:18 +0000108 SkString* mPath = new SkString("Path (");
109
robertphillips@google.com51185fe2012-12-05 19:34:33 +0000110 static const char* gFillStrings[] = {
111 "Winding", "EvenOdd", "InverseWinding", "InverseEvenOdd"
112 };
113
114 mPath->append(gFillStrings[path.getFillType()]);
115 mPath->append(", ");
116
robertphillips@google.com87201762012-10-18 13:30:18 +0000117 static const char* gConvexityStrings[] = {
skia.committer@gmail.com6a748ad2012-10-19 02:01:19 +0000118 "Unknown", "Convex", "Concave"
robertphillips@google.com87201762012-10-18 13:30:18 +0000119 };
120 SkASSERT(SkPath::kConcave_Convexity == 2);
121
122 mPath->append(gConvexityStrings[path.getConvexity()]);
123 mPath->append(", ");
124
robertphillips@google.com195952f2012-10-23 12:13:35 +0000125 if (path.isRect(NULL)) {
126 mPath->append("isRect, ");
127 } else {
128 mPath->append("isNotRect, ");
129 }
130
robertphillips@google.com87201762012-10-18 13:30:18 +0000131 mPath->appendS32(path.countVerbs());
132 mPath->append("V, ");
133 mPath->appendS32(path.countPoints());
134 mPath->append("P): ");
135
136 static const char* gVerbStrings[] = {
137 "Move", "Line", "Quad", "Cubic", "Close", "Done"
138 };
139 static const int gPtsPerVerb[] = { 1, 1, 2, 3, 0, 0 };
140 static const int gPtOffsetPerVerb[] = { 0, 1, 1, 1, 0, 0 };
141 SkASSERT(SkPath::kDone_Verb == 5);
142
143 SkPath::Iter iter(const_cast<SkPath&>(path), false);
144 SkPath::Verb verb;
145 SkPoint points[4];
146
skia.committer@gmail.com6a748ad2012-10-19 02:01:19 +0000147 for(verb = iter.next(points, false);
148 verb != SkPath::kDone_Verb;
robertphillips@google.com87201762012-10-18 13:30:18 +0000149 verb = iter.next(points, false)) {
150
151 mPath->append(gVerbStrings[verb]);
152 mPath->append(" ");
153
154 for (int i = 0; i < gPtsPerVerb[verb]; ++i) {
155 mPath->append("(");
156 mPath->appendScalar(points[gPtOffsetPerVerb[verb]+i].fX);
157 mPath->append(", ");
158 mPath->appendScalar(points[gPtOffsetPerVerb[verb]+i].fY);
159 mPath->append(") ");
160 }
chudy@google.com97cee972012-08-07 20:41:37 +0000161 }
robertphillips@google.com87201762012-10-18 13:30:18 +0000162
robertphillips@google.com30d35f22012-11-06 16:45:36 +0000163 SkString* boundStr = SkObjectParser::RectToString(path.getBounds(), " Bound: ");
164
165 if (NULL != boundStr) {
166 mPath->append(*boundStr);
167 SkDELETE(boundStr);
168 }
169
chudy@google.com97cee972012-08-07 20:41:37 +0000170 return mPath;
171}
172
173SkString* SkObjectParser::PointsToString(const SkPoint pts[], size_t count) {
174 SkString* mPoints = new SkString("SkPoints pts[]: ");
175 for (unsigned int i = 0; i < count; i++) {
176 mPoints->append("(");
177 mPoints->appendScalar(pts[i].fX);
178 mPoints->append(",");
179 mPoints->appendScalar(pts[i].fY);
180 mPoints->append(")");
181 }
182 return mPoints;
183}
184
185SkString* SkObjectParser::PointModeToString(SkCanvas::PointMode mode) {
186 SkString* mMode = new SkString("SkCanvas::PointMode: ");
187 if (mode == SkCanvas::kPoints_PointMode) {
188 mMode->append("kPoints_PointMode");
189 } else if (mode == SkCanvas::kLines_PointMode) {
190 mMode->append("kLines_Mode");
191 } else if (mode == SkCanvas::kPolygon_PointMode) {
192 mMode->append("kPolygon_PointMode");
193 }
194 return mMode;
195}
196
robertphillips@google.com30d35f22012-11-06 16:45:36 +0000197SkString* SkObjectParser::RectToString(const SkRect& rect, const char* title) {
198
199 SkString* mRect = new SkString;
skia.committer@gmail.com72b2e6f2012-11-08 02:03:56 +0000200
robertphillips@google.com30d35f22012-11-06 16:45:36 +0000201 if (NULL == title) {
202 mRect->append("SkRect: ");
203 } else {
204 mRect->append(title);
205 }
chudy@google.com97cee972012-08-07 20:41:37 +0000206 mRect->append("(");
207 mRect->appendScalar(rect.left());
208 mRect->append(", ");
209 mRect->appendScalar(rect.top());
210 mRect->append(", ");
211 mRect->appendScalar(rect.right());
212 mRect->append(", ");
213 mRect->appendScalar(rect.bottom());
214 mRect->append(")");
215 return mRect;
216}
217
robertphillips@google.com67baba42013-01-02 20:20:31 +0000218SkString* SkObjectParser::RRectToString(const SkRRect& rrect, const char* title) {
219
220 SkString* mRRect = new SkString;
221
222 if (NULL == title) {
223 mRRect->append("SkRRect (");
224 if (rrect.isEmpty()) {
225 mRRect->append("empty");
226 } else if (rrect.isRect()) {
227 mRRect->append("rect");
228 } else if (rrect.isOval()) {
229 mRRect->append("oval");
230 } else if (rrect.isSimple()) {
231 mRRect->append("simple");
232 } else {
233 SkASSERT(rrect.isComplex());
234 mRRect->append("complex");
235 }
236 mRRect->append("): ");
237 } else {
238 mRRect->append(title);
239 }
240 mRRect->append("(");
241 mRRect->appendScalar(rrect.rect().left());
242 mRRect->append(", ");
243 mRRect->appendScalar(rrect.rect().top());
244 mRRect->append(", ");
245 mRRect->appendScalar(rrect.rect().right());
246 mRRect->append(", ");
247 mRRect->appendScalar(rrect.rect().bottom());
248 mRRect->append(") radii: (");
249 for (int i = 0; i < 4; ++i) {
250 const SkVector& radii = rrect.radii((SkRRect::Corner) i);
251 mRRect->appendScalar(radii.fX);
252 mRRect->append(", ");
253 mRRect->appendScalar(radii.fY);
254 if (i < 3) {
255 mRRect->append(", ");
256 }
257 }
258 mRRect->append(")");
259 return mRRect;
260}
261
chudy@google.com97cee972012-08-07 20:41:37 +0000262SkString* SkObjectParser::RegionOpToString(SkRegion::Op op) {
263 SkString* mOp = new SkString("SkRegion::Op: ");
264 if (op == SkRegion::kDifference_Op) {
265 mOp->append("kDifference_Op");
266 } else if (op == SkRegion::kIntersect_Op) {
267 mOp->append("kIntersect_Op");
268 } else if (op == SkRegion::kUnion_Op) {
269 mOp->append("kUnion_Op");
270 } else if (op == SkRegion::kXOR_Op) {
271 mOp->append("kXOR_Op");
272 } else if (op == SkRegion::kReverseDifference_Op) {
273 mOp->append("kReverseDifference_Op");
274 } else if (op == SkRegion::kReplace_Op) {
275 mOp->append("kReplace_Op");
276 } else {
277 mOp->append("Unknown Type");
278 }
chudy@google.com902ebe52012-06-29 14:21:22 +0000279 return mOp;
280}
281
chudy@google.com97cee972012-08-07 20:41:37 +0000282SkString* SkObjectParser::RegionToString(const SkRegion& region) {
283 SkString* mRegion = new SkString("SkRegion: Data unavailable.");
284 return mRegion;
chudy@google.com902ebe52012-06-29 14:21:22 +0000285}
286
chudy@google.com97cee972012-08-07 20:41:37 +0000287SkString* SkObjectParser::SaveFlagsToString(SkCanvas::SaveFlags flags) {
288 SkString* mFlags = new SkString("SkCanvas::SaveFlags: ");
chudy@google.com902ebe52012-06-29 14:21:22 +0000289 if(flags == SkCanvas::kMatrixClip_SaveFlag) {
chudy@google.com97cee972012-08-07 20:41:37 +0000290 mFlags->append("kMatrixClip_SaveFlag");
chudy@google.com902ebe52012-06-29 14:21:22 +0000291 } else if (flags == SkCanvas::kClip_SaveFlag) {
chudy@google.com97cee972012-08-07 20:41:37 +0000292 mFlags->append("kClip_SaveFlag");
chudy@google.com902ebe52012-06-29 14:21:22 +0000293 } else if (flags == SkCanvas::kHasAlphaLayer_SaveFlag) {
chudy@google.com97cee972012-08-07 20:41:37 +0000294 mFlags->append("kHasAlphaLayer_SaveFlag");
chudy@google.com902ebe52012-06-29 14:21:22 +0000295 } else if (flags == SkCanvas::kFullColorLayer_SaveFlag) {
chudy@google.com97cee972012-08-07 20:41:37 +0000296 mFlags->append("kFullColorLayer_SaveFlag");
chudy@google.com902ebe52012-06-29 14:21:22 +0000297 } else if (flags == SkCanvas::kClipToLayer_SaveFlag) {
chudy@google.com97cee972012-08-07 20:41:37 +0000298 mFlags->append("kClipToLayer_SaveFlag");
chudy@google.com902ebe52012-06-29 14:21:22 +0000299 } else if (flags == SkCanvas::kMatrixClip_SaveFlag) {
chudy@google.com97cee972012-08-07 20:41:37 +0000300 mFlags->append("kMatrixClip_SaveFlag");
chudy@google.com902ebe52012-06-29 14:21:22 +0000301 } else if (flags == SkCanvas::kARGB_NoClipLayer_SaveFlag) {
chudy@google.com97cee972012-08-07 20:41:37 +0000302 mFlags->append("kARGB_NoClipLayer_SaveFlag");
chudy@google.com902ebe52012-06-29 14:21:22 +0000303 } else if (flags == SkCanvas::kARGB_ClipLayer_SaveFlag) {
chudy@google.com97cee972012-08-07 20:41:37 +0000304 mFlags->append("kARGB_ClipLayer_SaveFlag");
chudy@google.com902ebe52012-06-29 14:21:22 +0000305 } else {
chudy@google.com97cee972012-08-07 20:41:37 +0000306 mFlags->append("Data Unavailable");
chudy@google.com902ebe52012-06-29 14:21:22 +0000307 }
chudy@google.com902ebe52012-06-29 14:21:22 +0000308 return mFlags;
309}
310
chudy@google.com97cee972012-08-07 20:41:37 +0000311SkString* SkObjectParser::ScalarToString(SkScalar x, const char* text) {
312 SkString* mScalar = new SkString(text);
313 mScalar->append(" ");
314 mScalar->appendScalar(x);
chudy@google.com902ebe52012-06-29 14:21:22 +0000315 return mScalar;
316}
317
chudy@google.com97cee972012-08-07 20:41:37 +0000318SkString* SkObjectParser::TextToString(const void* text, size_t byteLength) {
robertphillips@google.com94acc702012-09-06 18:43:21 +0000319 SkString* mText = new SkString(6+byteLength+1);
320 mText->append("Text: ");
321 mText->append((char*) text, byteLength);
chudy@google.com97cee972012-08-07 20:41:37 +0000322 return mText;
chudy@google.com902ebe52012-06-29 14:21:22 +0000323}