blob: 6b5207cfd3df6bd8594809de4dd67bb85bb75550 [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"
10
11/* TODO(chudy): Replace all std::strings with char */
12
chudy@google.com97cee972012-08-07 20:41:37 +000013SkString* SkObjectParser::BitmapToString(const SkBitmap& bitmap) {
robertphillips@google.com195952f2012-10-23 12:13:35 +000014 SkString* mBitmap = new SkString("SkBitmap: ");
15 mBitmap->append("W: ");
16 mBitmap->appendS32(bitmap.width());
17 mBitmap->append(" H: ");
18 mBitmap->appendS32(bitmap.height());
19
20 const char* gConfigStrings[] = {
skia.committer@gmail.com1e34ff72012-10-24 02:01:24 +000021 "None", "A1", "A8", "Index8", "RGB565", "ARGB4444", "ARGB8888", "RLE8"
robertphillips@google.com195952f2012-10-23 12:13:35 +000022 };
23 SkASSERT(SkBitmap::kConfigCount == 8);
24
25 mBitmap->append(" Config: ");
26 mBitmap->append(gConfigStrings[bitmap.getConfig()]);
27
28 if (bitmap.isOpaque()) {
29 mBitmap->append(" opaque");
30 } else {
31 mBitmap->append(" not-opaque");
32 }
33
34 if (bitmap.isImmutable()) {
35 mBitmap->append(" immutable");
36 } else {
37 mBitmap->append(" not-immutable");
38 }
39
40 if (bitmap.isVolatile()) {
41 mBitmap->append(" volatile");
42 } else {
43 mBitmap->append(" not-volatile");
44 }
45
46 mBitmap->append(" genID: ");
47 mBitmap->appendS32(bitmap.getGenerationID());
48
chudy@google.com902ebe52012-06-29 14:21:22 +000049 return mBitmap;
50}
51
chudy@google.com97cee972012-08-07 20:41:37 +000052SkString* SkObjectParser::BoolToString(bool doAA) {
53 SkString* mBool = new SkString("Bool doAA: ");
chudy@google.com902ebe52012-06-29 14:21:22 +000054 if (doAA) {
chudy@google.com97cee972012-08-07 20:41:37 +000055 mBool->append("True");
chudy@google.com902ebe52012-06-29 14:21:22 +000056 } else {
chudy@google.com97cee972012-08-07 20:41:37 +000057 mBool->append("False");
chudy@google.com902ebe52012-06-29 14:21:22 +000058 }
chudy@google.com97cee972012-08-07 20:41:37 +000059 return mBool;
chudy@google.com902ebe52012-06-29 14:21:22 +000060}
61
chudy@google.com97cee972012-08-07 20:41:37 +000062SkString* SkObjectParser::CustomTextToString(const char* text) {
63 SkString* mText = new SkString(text);
64 return mText;
chudy@google.com902ebe52012-06-29 14:21:22 +000065}
66
chudy@google.com97cee972012-08-07 20:41:37 +000067SkString* SkObjectParser::IntToString(int x, const char* text) {
68 SkString* mInt = new SkString(text);
69 mInt->append(" ");
70 mInt->appendScalar(SkIntToScalar(x));
71 return mInt;
chudy@google.com902ebe52012-06-29 14:21:22 +000072}
73
chudy@google.com97cee972012-08-07 20:41:37 +000074SkString* SkObjectParser::IRectToString(const SkIRect& rect) {
75 SkString* mRect = new SkString("SkIRect: ");
76 mRect->append("L: ");
robertphillips@google.com195952f2012-10-23 12:13:35 +000077 mRect->appendS32(rect.left());
chudy@google.com97cee972012-08-07 20:41:37 +000078 mRect->append(", T: ");
robertphillips@google.com195952f2012-10-23 12:13:35 +000079 mRect->appendS32(rect.top());
chudy@google.com97cee972012-08-07 20:41:37 +000080 mRect->append(", R: ");
robertphillips@google.com195952f2012-10-23 12:13:35 +000081 mRect->appendS32(rect.right());
chudy@google.com97cee972012-08-07 20:41:37 +000082 mRect->append(", B: ");
robertphillips@google.com195952f2012-10-23 12:13:35 +000083 mRect->appendS32(rect.bottom());
chudy@google.com902ebe52012-06-29 14:21:22 +000084 return mRect;
85}
86
chudy@google.com97cee972012-08-07 20:41:37 +000087SkString* SkObjectParser::MatrixToString(const SkMatrix& matrix) {
88 SkString* mMatrix = new SkString("SkMatrix: (");
89 for (int i = 0; i < 8; i++) {
90 mMatrix->appendScalar(matrix.get(i));
91 mMatrix->append("), (");
chudy@google.com902ebe52012-06-29 14:21:22 +000092 }
chudy@google.com97cee972012-08-07 20:41:37 +000093 mMatrix->appendScalar(matrix.get(8));
94 mMatrix->append(")");
95 return mMatrix;
96}
chudy@google.com902ebe52012-06-29 14:21:22 +000097
chudy@google.com97cee972012-08-07 20:41:37 +000098SkString* SkObjectParser::PaintToString(const SkPaint& paint) {
99 SkColor color = paint.getColor();
robertphillips@google.com195952f2012-10-23 12:13:35 +0000100 SkString* mPaint = new SkString("SkPaint: Color: 0x");
chudy@google.com97cee972012-08-07 20:41:37 +0000101 mPaint->appendHex(color);
robertphillips@google.com195952f2012-10-23 12:13:35 +0000102
chudy@google.com97cee972012-08-07 20:41:37 +0000103 return mPaint;
104}
105
106SkString* SkObjectParser::PathToString(const SkPath& path) {
robertphillips@google.com87201762012-10-18 13:30:18 +0000107 SkString* mPath = new SkString("Path (");
108
109 static const char* gConvexityStrings[] = {
skia.committer@gmail.com6a748ad2012-10-19 02:01:19 +0000110 "Unknown", "Convex", "Concave"
robertphillips@google.com87201762012-10-18 13:30:18 +0000111 };
112 SkASSERT(SkPath::kConcave_Convexity == 2);
113
114 mPath->append(gConvexityStrings[path.getConvexity()]);
115 mPath->append(", ");
116
robertphillips@google.com195952f2012-10-23 12:13:35 +0000117 if (path.isRect(NULL)) {
118 mPath->append("isRect, ");
119 } else {
120 mPath->append("isNotRect, ");
121 }
122
robertphillips@google.com87201762012-10-18 13:30:18 +0000123 mPath->appendS32(path.countVerbs());
124 mPath->append("V, ");
125 mPath->appendS32(path.countPoints());
126 mPath->append("P): ");
127
128 static const char* gVerbStrings[] = {
129 "Move", "Line", "Quad", "Cubic", "Close", "Done"
130 };
131 static const int gPtsPerVerb[] = { 1, 1, 2, 3, 0, 0 };
132 static const int gPtOffsetPerVerb[] = { 0, 1, 1, 1, 0, 0 };
133 SkASSERT(SkPath::kDone_Verb == 5);
134
135 SkPath::Iter iter(const_cast<SkPath&>(path), false);
136 SkPath::Verb verb;
137 SkPoint points[4];
138
skia.committer@gmail.com6a748ad2012-10-19 02:01:19 +0000139 for(verb = iter.next(points, false);
140 verb != SkPath::kDone_Verb;
robertphillips@google.com87201762012-10-18 13:30:18 +0000141 verb = iter.next(points, false)) {
142
143 mPath->append(gVerbStrings[verb]);
144 mPath->append(" ");
145
146 for (int i = 0; i < gPtsPerVerb[verb]; ++i) {
147 mPath->append("(");
148 mPath->appendScalar(points[gPtOffsetPerVerb[verb]+i].fX);
149 mPath->append(", ");
150 mPath->appendScalar(points[gPtOffsetPerVerb[verb]+i].fY);
151 mPath->append(") ");
152 }
chudy@google.com97cee972012-08-07 20:41:37 +0000153 }
robertphillips@google.com87201762012-10-18 13:30:18 +0000154
robertphillips@google.com30d35f22012-11-06 16:45:36 +0000155 SkString* boundStr = SkObjectParser::RectToString(path.getBounds(), " Bound: ");
156
157 if (NULL != boundStr) {
158 mPath->append(*boundStr);
159 SkDELETE(boundStr);
160 }
161
chudy@google.com97cee972012-08-07 20:41:37 +0000162 return mPath;
163}
164
165SkString* SkObjectParser::PointsToString(const SkPoint pts[], size_t count) {
166 SkString* mPoints = new SkString("SkPoints pts[]: ");
167 for (unsigned int i = 0; i < count; i++) {
168 mPoints->append("(");
169 mPoints->appendScalar(pts[i].fX);
170 mPoints->append(",");
171 mPoints->appendScalar(pts[i].fY);
172 mPoints->append(")");
173 }
174 return mPoints;
175}
176
177SkString* SkObjectParser::PointModeToString(SkCanvas::PointMode mode) {
178 SkString* mMode = new SkString("SkCanvas::PointMode: ");
179 if (mode == SkCanvas::kPoints_PointMode) {
180 mMode->append("kPoints_PointMode");
181 } else if (mode == SkCanvas::kLines_PointMode) {
182 mMode->append("kLines_Mode");
183 } else if (mode == SkCanvas::kPolygon_PointMode) {
184 mMode->append("kPolygon_PointMode");
185 }
186 return mMode;
187}
188
robertphillips@google.com30d35f22012-11-06 16:45:36 +0000189SkString* SkObjectParser::RectToString(const SkRect& rect, const char* title) {
190
191 SkString* mRect = new SkString;
192
193 if (NULL == title) {
194 mRect->append("SkRect: ");
195 } else {
196 mRect->append(title);
197 }
chudy@google.com97cee972012-08-07 20:41:37 +0000198 mRect->append("(");
199 mRect->appendScalar(rect.left());
200 mRect->append(", ");
201 mRect->appendScalar(rect.top());
202 mRect->append(", ");
203 mRect->appendScalar(rect.right());
204 mRect->append(", ");
205 mRect->appendScalar(rect.bottom());
206 mRect->append(")");
207 return mRect;
208}
209
210SkString* SkObjectParser::RegionOpToString(SkRegion::Op op) {
211 SkString* mOp = new SkString("SkRegion::Op: ");
212 if (op == SkRegion::kDifference_Op) {
213 mOp->append("kDifference_Op");
214 } else if (op == SkRegion::kIntersect_Op) {
215 mOp->append("kIntersect_Op");
216 } else if (op == SkRegion::kUnion_Op) {
217 mOp->append("kUnion_Op");
218 } else if (op == SkRegion::kXOR_Op) {
219 mOp->append("kXOR_Op");
220 } else if (op == SkRegion::kReverseDifference_Op) {
221 mOp->append("kReverseDifference_Op");
222 } else if (op == SkRegion::kReplace_Op) {
223 mOp->append("kReplace_Op");
224 } else {
225 mOp->append("Unknown Type");
226 }
chudy@google.com902ebe52012-06-29 14:21:22 +0000227 return mOp;
228}
229
chudy@google.com97cee972012-08-07 20:41:37 +0000230SkString* SkObjectParser::RegionToString(const SkRegion& region) {
231 SkString* mRegion = new SkString("SkRegion: Data unavailable.");
232 return mRegion;
chudy@google.com902ebe52012-06-29 14:21:22 +0000233}
234
chudy@google.com97cee972012-08-07 20:41:37 +0000235SkString* SkObjectParser::SaveFlagsToString(SkCanvas::SaveFlags flags) {
236 SkString* mFlags = new SkString("SkCanvas::SaveFlags: ");
chudy@google.com902ebe52012-06-29 14:21:22 +0000237 if(flags == SkCanvas::kMatrixClip_SaveFlag) {
chudy@google.com97cee972012-08-07 20:41:37 +0000238 mFlags->append("kMatrixClip_SaveFlag");
chudy@google.com902ebe52012-06-29 14:21:22 +0000239 } else if (flags == SkCanvas::kClip_SaveFlag) {
chudy@google.com97cee972012-08-07 20:41:37 +0000240 mFlags->append("kClip_SaveFlag");
chudy@google.com902ebe52012-06-29 14:21:22 +0000241 } else if (flags == SkCanvas::kHasAlphaLayer_SaveFlag) {
chudy@google.com97cee972012-08-07 20:41:37 +0000242 mFlags->append("kHasAlphaLayer_SaveFlag");
chudy@google.com902ebe52012-06-29 14:21:22 +0000243 } else if (flags == SkCanvas::kFullColorLayer_SaveFlag) {
chudy@google.com97cee972012-08-07 20:41:37 +0000244 mFlags->append("kFullColorLayer_SaveFlag");
chudy@google.com902ebe52012-06-29 14:21:22 +0000245 } else if (flags == SkCanvas::kClipToLayer_SaveFlag) {
chudy@google.com97cee972012-08-07 20:41:37 +0000246 mFlags->append("kClipToLayer_SaveFlag");
chudy@google.com902ebe52012-06-29 14:21:22 +0000247 } else if (flags == SkCanvas::kMatrixClip_SaveFlag) {
chudy@google.com97cee972012-08-07 20:41:37 +0000248 mFlags->append("kMatrixClip_SaveFlag");
chudy@google.com902ebe52012-06-29 14:21:22 +0000249 } else if (flags == SkCanvas::kARGB_NoClipLayer_SaveFlag) {
chudy@google.com97cee972012-08-07 20:41:37 +0000250 mFlags->append("kARGB_NoClipLayer_SaveFlag");
chudy@google.com902ebe52012-06-29 14:21:22 +0000251 } else if (flags == SkCanvas::kARGB_ClipLayer_SaveFlag) {
chudy@google.com97cee972012-08-07 20:41:37 +0000252 mFlags->append("kARGB_ClipLayer_SaveFlag");
chudy@google.com902ebe52012-06-29 14:21:22 +0000253 } else {
chudy@google.com97cee972012-08-07 20:41:37 +0000254 mFlags->append("Data Unavailable");
chudy@google.com902ebe52012-06-29 14:21:22 +0000255 }
chudy@google.com902ebe52012-06-29 14:21:22 +0000256 return mFlags;
257}
258
chudy@google.com97cee972012-08-07 20:41:37 +0000259SkString* SkObjectParser::ScalarToString(SkScalar x, const char* text) {
260 SkString* mScalar = new SkString(text);
261 mScalar->append(" ");
262 mScalar->appendScalar(x);
chudy@google.com902ebe52012-06-29 14:21:22 +0000263 return mScalar;
264}
265
chudy@google.com97cee972012-08-07 20:41:37 +0000266SkString* SkObjectParser::TextToString(const void* text, size_t byteLength) {
robertphillips@google.com94acc702012-09-06 18:43:21 +0000267 SkString* mText = new SkString(6+byteLength+1);
268 mText->append("Text: ");
269 mText->append((char*) text, byteLength);
chudy@google.com97cee972012-08-07 20:41:37 +0000270 return mText;
chudy@google.com902ebe52012-06-29 14:21:22 +0000271}