blob: efa801ce9842ca54c8f111c5102375bdb290d87c [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"
robertphillips@google.com76f9e932013-01-15 20:17:47 +000011#include "SkShader.h"
humper@google.comf515ffc2013-01-07 15:48:19 +000012#include "SkTypeface.h"
13#include "SkStream.h"
14#include "SkData.h"
15#include "SkFontDescriptor.h"
chudy@google.com902ebe52012-06-29 14:21:22 +000016
17/* TODO(chudy): Replace all std::strings with char */
18
chudy@google.com97cee972012-08-07 20:41:37 +000019SkString* SkObjectParser::BitmapToString(const SkBitmap& bitmap) {
robertphillips@google.com195952f2012-10-23 12:13:35 +000020 SkString* mBitmap = new SkString("SkBitmap: ");
21 mBitmap->append("W: ");
22 mBitmap->appendS32(bitmap.width());
23 mBitmap->append(" H: ");
24 mBitmap->appendS32(bitmap.height());
25
26 const char* gConfigStrings[] = {
skia.committer@gmail.com1e34ff72012-10-24 02:01:24 +000027 "None", "A1", "A8", "Index8", "RGB565", "ARGB4444", "ARGB8888", "RLE8"
robertphillips@google.com195952f2012-10-23 12:13:35 +000028 };
29 SkASSERT(SkBitmap::kConfigCount == 8);
30
31 mBitmap->append(" Config: ");
32 mBitmap->append(gConfigStrings[bitmap.getConfig()]);
33
34 if (bitmap.isOpaque()) {
35 mBitmap->append(" opaque");
36 } else {
37 mBitmap->append(" not-opaque");
38 }
39
40 if (bitmap.isImmutable()) {
41 mBitmap->append(" immutable");
42 } else {
43 mBitmap->append(" not-immutable");
44 }
45
46 if (bitmap.isVolatile()) {
47 mBitmap->append(" volatile");
48 } else {
49 mBitmap->append(" not-volatile");
50 }
51
52 mBitmap->append(" genID: ");
53 mBitmap->appendS32(bitmap.getGenerationID());
54
chudy@google.com902ebe52012-06-29 14:21:22 +000055 return mBitmap;
56}
57
chudy@google.com97cee972012-08-07 20:41:37 +000058SkString* SkObjectParser::BoolToString(bool doAA) {
59 SkString* mBool = new SkString("Bool doAA: ");
chudy@google.com902ebe52012-06-29 14:21:22 +000060 if (doAA) {
chudy@google.com97cee972012-08-07 20:41:37 +000061 mBool->append("True");
chudy@google.com902ebe52012-06-29 14:21:22 +000062 } else {
chudy@google.com97cee972012-08-07 20:41:37 +000063 mBool->append("False");
chudy@google.com902ebe52012-06-29 14:21:22 +000064 }
chudy@google.com97cee972012-08-07 20:41:37 +000065 return mBool;
chudy@google.com902ebe52012-06-29 14:21:22 +000066}
67
chudy@google.com97cee972012-08-07 20:41:37 +000068SkString* SkObjectParser::CustomTextToString(const char* text) {
69 SkString* mText = new SkString(text);
70 return mText;
chudy@google.com902ebe52012-06-29 14:21:22 +000071}
72
chudy@google.com97cee972012-08-07 20:41:37 +000073SkString* SkObjectParser::IntToString(int x, const char* text) {
74 SkString* mInt = new SkString(text);
75 mInt->append(" ");
76 mInt->appendScalar(SkIntToScalar(x));
77 return mInt;
chudy@google.com902ebe52012-06-29 14:21:22 +000078}
79
chudy@google.com97cee972012-08-07 20:41:37 +000080SkString* SkObjectParser::IRectToString(const SkIRect& rect) {
81 SkString* mRect = new SkString("SkIRect: ");
82 mRect->append("L: ");
robertphillips@google.com195952f2012-10-23 12:13:35 +000083 mRect->appendS32(rect.left());
chudy@google.com97cee972012-08-07 20:41:37 +000084 mRect->append(", T: ");
robertphillips@google.com195952f2012-10-23 12:13:35 +000085 mRect->appendS32(rect.top());
chudy@google.com97cee972012-08-07 20:41:37 +000086 mRect->append(", R: ");
robertphillips@google.com195952f2012-10-23 12:13:35 +000087 mRect->appendS32(rect.right());
chudy@google.com97cee972012-08-07 20:41:37 +000088 mRect->append(", B: ");
robertphillips@google.com195952f2012-10-23 12:13:35 +000089 mRect->appendS32(rect.bottom());
chudy@google.com902ebe52012-06-29 14:21:22 +000090 return mRect;
91}
92
chudy@google.com97cee972012-08-07 20:41:37 +000093SkString* SkObjectParser::MatrixToString(const SkMatrix& matrix) {
94 SkString* mMatrix = new SkString("SkMatrix: (");
95 for (int i = 0; i < 8; i++) {
96 mMatrix->appendScalar(matrix.get(i));
97 mMatrix->append("), (");
chudy@google.com902ebe52012-06-29 14:21:22 +000098 }
chudy@google.com97cee972012-08-07 20:41:37 +000099 mMatrix->appendScalar(matrix.get(8));
100 mMatrix->append(")");
101 return mMatrix;
102}
chudy@google.com902ebe52012-06-29 14:21:22 +0000103
robertphillips@google.com735edb02013-01-10 18:54:11 +0000104static void add_flag_to_string(SkString* string, bool flag, const char* flagStr, bool* needSeparator) {
105 if (flag) {
106 if (*needSeparator) {
107 string->append("|");
108 }
109 string->append(flagStr);
110 *needSeparator = true;
111 }
112}
skia.committer@gmail.com4e8ef332013-01-08 02:01:29 +0000113
robertphillips@google.com735edb02013-01-10 18:54:11 +0000114SkString* SkObjectParser::PaintToString(const SkPaint& paint) {
115 SkString* mPaint = new SkString("<dl><dt>SkPaint:</dt><dd><dl>");
116
117 SkTypeface* typeface = paint.getTypeface();
118 if (NULL != typeface) {
humper@google.comf515ffc2013-01-07 15:48:19 +0000119 SkDynamicMemoryWStream ostream;
120 typeface->serialize(&ostream);
robertphillips@google.com444a4012013-01-14 17:40:15 +0000121 SkAutoTUnref<SkData> data(ostream.copyToData());
skia.committer@gmail.com4e8ef332013-01-08 02:01:29 +0000122
humper@google.comf515ffc2013-01-07 15:48:19 +0000123 SkMemoryStream stream(data);
124 SkFontDescriptor descriptor(&stream);
skia.committer@gmail.com4e8ef332013-01-08 02:01:29 +0000125
humper@google.comf515ffc2013-01-07 15:48:19 +0000126 mPaint->append("<dt>Font Family Name:</dt><dd>");
127 mPaint->append(descriptor.getFamilyName());
128 mPaint->append("</dd><dt>Font Full Name:</dt><dd>");
129 mPaint->append(descriptor.getFullName());
130 mPaint->append("</dd><dt>Font PS Name:</dt><dd>");
131 mPaint->append(descriptor.getPostscriptName());
132 mPaint->append("</dd><dt>Font File Name:</dt><dd>");
133 mPaint->append(descriptor.getFontFileName());
robertphillips@google.com735edb02013-01-10 18:54:11 +0000134 mPaint->append("</dd>");
humper@google.comf515ffc2013-01-07 15:48:19 +0000135 }
robertphillips@google.com195952f2012-10-23 12:13:35 +0000136
robertphillips@google.com735edb02013-01-10 18:54:11 +0000137 mPaint->append("<dt>TextSize:</dt><dd>");
138 mPaint->appendScalar(paint.getTextSize());
139 mPaint->append("</dd>");
140
141 mPaint->append("<dt>TextScaleX:</dt><dd>");
142 mPaint->appendScalar(paint.getTextScaleX());
143 mPaint->append("</dd>");
144
145 mPaint->append("<dt>TextSkewX:</dt><dd>");
146 mPaint->appendScalar(paint.getTextSkewX());
147 mPaint->append("</dd>");
148
149 SkPathEffect* pathEffect = paint.getPathEffect();
150 if (NULL != pathEffect) {
151 mPaint->append("<dt>PathEffect:</dt><dd>");
152 mPaint->append("</dd>");
153 }
154
155 SkShader* shader = paint.getShader();
156 if (NULL != shader) {
157 mPaint->append("<dt>Shader:</dt><dd>");
robertphillips@google.com76f9e932013-01-15 20:17:47 +0000158 SkDEVCODE(shader->toString(mPaint);)
robertphillips@google.com735edb02013-01-10 18:54:11 +0000159 mPaint->append("</dd>");
160 }
161
162 SkXfermode* xfer = paint.getXfermode();
163 if (NULL != xfer) {
164 mPaint->append("<dt>Xfermode:</dt><dd>");
robertphillips@google.comb83b6b42013-01-22 14:32:09 +0000165 SkDEVCODE(xfer->toString(mPaint);)
robertphillips@google.com735edb02013-01-10 18:54:11 +0000166 mPaint->append("</dd>");
167 }
168
169 SkMaskFilter* maskFilter = paint.getMaskFilter();
170 if (NULL != maskFilter) {
171 mPaint->append("<dt>MaskFilter:</dt><dd>");
172 mPaint->append("</dd>");
173 }
174
175 SkColorFilter* colorFilter = paint.getColorFilter();
176 if (NULL != colorFilter) {
177 mPaint->append("<dt>ColorFilter:</dt><dd>");
178 mPaint->append("</dd>");
179 }
180
181 SkRasterizer* rasterizer = paint.getRasterizer();
182 if (NULL != rasterizer) {
183 mPaint->append("<dt>Rasterizer:</dt><dd>");
184 mPaint->append("</dd>");
185 }
186
187 SkDrawLooper* looper = paint.getLooper();
188 if (NULL != looper) {
189 mPaint->append("<dt>DrawLooper:</dt><dd>");
190 mPaint->append("</dd>");
191 }
192
193 SkImageFilter* imageFilter = paint.getImageFilter();
194 if (NULL != imageFilter) {
195 mPaint->append("<dt>ImageFilter:</dt><dd>");
196 mPaint->append("</dd>");
197 }
198
199 SkAnnotation* annotation = paint.getAnnotation();
200 if (NULL != annotation) {
201 mPaint->append("<dt>Annotation:</dt><dd>");
202 mPaint->append("</dd>");
203 }
204
205 mPaint->append("<dt>Color:</dt><dd>0x");
206 SkColor color = paint.getColor();
207 mPaint->appendHex(color);
208 mPaint->append("</dd>");
209
210 mPaint->append("<dt>Stroke Width:</dt><dd>");
211 mPaint->appendScalar(paint.getStrokeWidth());
212 mPaint->append("</dd>");
213
214 mPaint->append("<dt>Stroke Miter:</dt><dd>");
215 mPaint->appendScalar(paint.getStrokeMiter());
216 mPaint->append("</dd>");
217
218 mPaint->append("<dt>Flags:</dt><dd>(");
219 if (paint.getFlags()) {
220 bool needSeparator = false;
221 add_flag_to_string(mPaint, paint.isAntiAlias(), "AntiAlias", &needSeparator);
222 add_flag_to_string(mPaint, paint.isFilterBitmap(), "FilterBitmap", &needSeparator);
223 add_flag_to_string(mPaint, paint.isDither(), "Dither", &needSeparator);
224 add_flag_to_string(mPaint, paint.isUnderlineText(), "UnderlineText", &needSeparator);
225 add_flag_to_string(mPaint, paint.isStrikeThruText(), "StrikeThruText", &needSeparator);
226 add_flag_to_string(mPaint, paint.isFakeBoldText(), "FakeBoldText", &needSeparator);
227 add_flag_to_string(mPaint, paint.isLinearText(), "LinearText", &needSeparator);
228 add_flag_to_string(mPaint, paint.isSubpixelText(), "SubpixelText", &needSeparator);
229 add_flag_to_string(mPaint, paint.isDevKernText(), "DevKernText", &needSeparator);
230 add_flag_to_string(mPaint, paint.isLCDRenderText(), "LCDRenderText", &needSeparator);
skia.committer@gmail.comf49b2872013-01-11 02:01:25 +0000231 add_flag_to_string(mPaint, paint.isEmbeddedBitmapText(),
robertphillips@google.com735edb02013-01-10 18:54:11 +0000232 "EmbeddedBitmapText", &needSeparator);
233 add_flag_to_string(mPaint, paint.isAutohinted(), "Autohinted", &needSeparator);
234 add_flag_to_string(mPaint, paint.isVerticalText(), "VerticalText", &needSeparator);
skia.committer@gmail.comf49b2872013-01-11 02:01:25 +0000235 add_flag_to_string(mPaint, SkToBool(paint.getFlags() & SkPaint::kGenA8FromLCD_Flag),
robertphillips@google.com735edb02013-01-10 18:54:11 +0000236 "GenA8FromLCD", &needSeparator);
237 } else {
238 mPaint->append("None");
239 }
240 mPaint->append(")</dd>");
241
242 mPaint->append("<dt>TextAlign:</dt><dd>");
243 static const char* gTextAlignStrings[SkPaint::kAlignCount] = { "Left", "Center", "Right" };
244 mPaint->append(gTextAlignStrings[paint.getTextAlign()]);
245 mPaint->append("</dd>");
246
247 mPaint->append("<dt>CapType:</dt><dd>");
248 static const char* gStrokeCapStrings[SkPaint::kCapCount] = { "Butt", "Round", "Square" };
249 mPaint->append(gStrokeCapStrings[paint.getStrokeCap()]);
250 mPaint->append("</dd>");
251
252 mPaint->append("<dt>JoinType:</dt><dd>");
253 static const char* gJoinStrings[SkPaint::kJoinCount] = { "Miter", "Round", "Bevel" };
254 mPaint->append(gJoinStrings[paint.getStrokeJoin()]);
255 mPaint->append("</dd>");
256
257 mPaint->append("<dt>Style:</dt><dd>");
258 static const char* gStyleStrings[SkPaint::kStyleCount] = { "Fill", "Stroke", "StrokeAndFill" };
259 mPaint->append(gStyleStrings[paint.getStyle()]);
260 mPaint->append("</dd>");
261
262 mPaint->append("<dt>TextEncoding:</dt><dd>");
263 static const char* gTextEncodingStrings[] = { "UTF8", "UTF16", "UTF32", "GlyphID" };
264 mPaint->append(gTextEncodingStrings[paint.getTextEncoding()]);
265 mPaint->append("</dd>");
266
267 mPaint->append("<dt>Hinting:</dt><dd>");
268 static const char* gHintingStrings[] = { "None", "Slight", "Normal", "Full" };
269 mPaint->append(gHintingStrings[paint.getHinting()]);
270 mPaint->append("</dd>");
271
272 mPaint->append("</dd></dl></dl>");
chudy@google.com97cee972012-08-07 20:41:37 +0000273 return mPaint;
274}
275
276SkString* SkObjectParser::PathToString(const SkPath& path) {
robertphillips@google.com87201762012-10-18 13:30:18 +0000277 SkString* mPath = new SkString("Path (");
278
robertphillips@google.com51185fe2012-12-05 19:34:33 +0000279 static const char* gFillStrings[] = {
280 "Winding", "EvenOdd", "InverseWinding", "InverseEvenOdd"
281 };
282
283 mPath->append(gFillStrings[path.getFillType()]);
284 mPath->append(", ");
285
robertphillips@google.com87201762012-10-18 13:30:18 +0000286 static const char* gConvexityStrings[] = {
skia.committer@gmail.com6a748ad2012-10-19 02:01:19 +0000287 "Unknown", "Convex", "Concave"
robertphillips@google.com87201762012-10-18 13:30:18 +0000288 };
289 SkASSERT(SkPath::kConcave_Convexity == 2);
290
291 mPath->append(gConvexityStrings[path.getConvexity()]);
292 mPath->append(", ");
293
robertphillips@google.com195952f2012-10-23 12:13:35 +0000294 if (path.isRect(NULL)) {
295 mPath->append("isRect, ");
296 } else {
297 mPath->append("isNotRect, ");
298 }
299
robertphillips@google.com87201762012-10-18 13:30:18 +0000300 mPath->appendS32(path.countVerbs());
301 mPath->append("V, ");
302 mPath->appendS32(path.countPoints());
303 mPath->append("P): ");
304
305 static const char* gVerbStrings[] = {
306 "Move", "Line", "Quad", "Cubic", "Close", "Done"
307 };
308 static const int gPtsPerVerb[] = { 1, 1, 2, 3, 0, 0 };
309 static const int gPtOffsetPerVerb[] = { 0, 1, 1, 1, 0, 0 };
310 SkASSERT(SkPath::kDone_Verb == 5);
311
312 SkPath::Iter iter(const_cast<SkPath&>(path), false);
313 SkPath::Verb verb;
314 SkPoint points[4];
315
skia.committer@gmail.com6a748ad2012-10-19 02:01:19 +0000316 for(verb = iter.next(points, false);
317 verb != SkPath::kDone_Verb;
robertphillips@google.com87201762012-10-18 13:30:18 +0000318 verb = iter.next(points, false)) {
319
320 mPath->append(gVerbStrings[verb]);
321 mPath->append(" ");
322
323 for (int i = 0; i < gPtsPerVerb[verb]; ++i) {
324 mPath->append("(");
325 mPath->appendScalar(points[gPtOffsetPerVerb[verb]+i].fX);
326 mPath->append(", ");
327 mPath->appendScalar(points[gPtOffsetPerVerb[verb]+i].fY);
328 mPath->append(") ");
329 }
chudy@google.com97cee972012-08-07 20:41:37 +0000330 }
robertphillips@google.com87201762012-10-18 13:30:18 +0000331
robertphillips@google.com30d35f22012-11-06 16:45:36 +0000332 SkString* boundStr = SkObjectParser::RectToString(path.getBounds(), " Bound: ");
333
334 if (NULL != boundStr) {
335 mPath->append(*boundStr);
336 SkDELETE(boundStr);
337 }
338
chudy@google.com97cee972012-08-07 20:41:37 +0000339 return mPath;
340}
341
342SkString* SkObjectParser::PointsToString(const SkPoint pts[], size_t count) {
343 SkString* mPoints = new SkString("SkPoints pts[]: ");
344 for (unsigned int i = 0; i < count; i++) {
345 mPoints->append("(");
346 mPoints->appendScalar(pts[i].fX);
347 mPoints->append(",");
348 mPoints->appendScalar(pts[i].fY);
349 mPoints->append(")");
350 }
351 return mPoints;
352}
353
354SkString* SkObjectParser::PointModeToString(SkCanvas::PointMode mode) {
355 SkString* mMode = new SkString("SkCanvas::PointMode: ");
356 if (mode == SkCanvas::kPoints_PointMode) {
357 mMode->append("kPoints_PointMode");
358 } else if (mode == SkCanvas::kLines_PointMode) {
359 mMode->append("kLines_Mode");
360 } else if (mode == SkCanvas::kPolygon_PointMode) {
361 mMode->append("kPolygon_PointMode");
362 }
363 return mMode;
364}
365
robertphillips@google.com30d35f22012-11-06 16:45:36 +0000366SkString* SkObjectParser::RectToString(const SkRect& rect, const char* title) {
367
368 SkString* mRect = new SkString;
skia.committer@gmail.com72b2e6f2012-11-08 02:03:56 +0000369
robertphillips@google.com30d35f22012-11-06 16:45:36 +0000370 if (NULL == title) {
371 mRect->append("SkRect: ");
372 } else {
373 mRect->append(title);
374 }
chudy@google.com97cee972012-08-07 20:41:37 +0000375 mRect->append("(");
376 mRect->appendScalar(rect.left());
377 mRect->append(", ");
378 mRect->appendScalar(rect.top());
379 mRect->append(", ");
380 mRect->appendScalar(rect.right());
381 mRect->append(", ");
382 mRect->appendScalar(rect.bottom());
383 mRect->append(")");
384 return mRect;
385}
386
robertphillips@google.com67baba42013-01-02 20:20:31 +0000387SkString* SkObjectParser::RRectToString(const SkRRect& rrect, const char* title) {
388
389 SkString* mRRect = new SkString;
390
391 if (NULL == title) {
392 mRRect->append("SkRRect (");
393 if (rrect.isEmpty()) {
394 mRRect->append("empty");
395 } else if (rrect.isRect()) {
396 mRRect->append("rect");
397 } else if (rrect.isOval()) {
398 mRRect->append("oval");
399 } else if (rrect.isSimple()) {
400 mRRect->append("simple");
401 } else {
402 SkASSERT(rrect.isComplex());
403 mRRect->append("complex");
404 }
405 mRRect->append("): ");
406 } else {
407 mRRect->append(title);
408 }
409 mRRect->append("(");
410 mRRect->appendScalar(rrect.rect().left());
411 mRRect->append(", ");
412 mRRect->appendScalar(rrect.rect().top());
413 mRRect->append(", ");
414 mRRect->appendScalar(rrect.rect().right());
415 mRRect->append(", ");
416 mRRect->appendScalar(rrect.rect().bottom());
417 mRRect->append(") radii: (");
418 for (int i = 0; i < 4; ++i) {
419 const SkVector& radii = rrect.radii((SkRRect::Corner) i);
420 mRRect->appendScalar(radii.fX);
421 mRRect->append(", ");
422 mRRect->appendScalar(radii.fY);
423 if (i < 3) {
424 mRRect->append(", ");
425 }
426 }
427 mRRect->append(")");
428 return mRRect;
429}
430
chudy@google.com97cee972012-08-07 20:41:37 +0000431SkString* SkObjectParser::RegionOpToString(SkRegion::Op op) {
432 SkString* mOp = new SkString("SkRegion::Op: ");
433 if (op == SkRegion::kDifference_Op) {
434 mOp->append("kDifference_Op");
435 } else if (op == SkRegion::kIntersect_Op) {
436 mOp->append("kIntersect_Op");
437 } else if (op == SkRegion::kUnion_Op) {
438 mOp->append("kUnion_Op");
439 } else if (op == SkRegion::kXOR_Op) {
440 mOp->append("kXOR_Op");
441 } else if (op == SkRegion::kReverseDifference_Op) {
442 mOp->append("kReverseDifference_Op");
443 } else if (op == SkRegion::kReplace_Op) {
444 mOp->append("kReplace_Op");
445 } else {
446 mOp->append("Unknown Type");
447 }
chudy@google.com902ebe52012-06-29 14:21:22 +0000448 return mOp;
449}
450
chudy@google.com97cee972012-08-07 20:41:37 +0000451SkString* SkObjectParser::RegionToString(const SkRegion& region) {
452 SkString* mRegion = new SkString("SkRegion: Data unavailable.");
453 return mRegion;
chudy@google.com902ebe52012-06-29 14:21:22 +0000454}
455
chudy@google.com97cee972012-08-07 20:41:37 +0000456SkString* SkObjectParser::SaveFlagsToString(SkCanvas::SaveFlags flags) {
457 SkString* mFlags = new SkString("SkCanvas::SaveFlags: ");
chudy@google.com902ebe52012-06-29 14:21:22 +0000458 if(flags == SkCanvas::kMatrixClip_SaveFlag) {
chudy@google.com97cee972012-08-07 20:41:37 +0000459 mFlags->append("kMatrixClip_SaveFlag");
chudy@google.com902ebe52012-06-29 14:21:22 +0000460 } else if (flags == SkCanvas::kClip_SaveFlag) {
chudy@google.com97cee972012-08-07 20:41:37 +0000461 mFlags->append("kClip_SaveFlag");
chudy@google.com902ebe52012-06-29 14:21:22 +0000462 } else if (flags == SkCanvas::kHasAlphaLayer_SaveFlag) {
chudy@google.com97cee972012-08-07 20:41:37 +0000463 mFlags->append("kHasAlphaLayer_SaveFlag");
chudy@google.com902ebe52012-06-29 14:21:22 +0000464 } else if (flags == SkCanvas::kFullColorLayer_SaveFlag) {
chudy@google.com97cee972012-08-07 20:41:37 +0000465 mFlags->append("kFullColorLayer_SaveFlag");
chudy@google.com902ebe52012-06-29 14:21:22 +0000466 } else if (flags == SkCanvas::kClipToLayer_SaveFlag) {
chudy@google.com97cee972012-08-07 20:41:37 +0000467 mFlags->append("kClipToLayer_SaveFlag");
chudy@google.com902ebe52012-06-29 14:21:22 +0000468 } else if (flags == SkCanvas::kMatrixClip_SaveFlag) {
chudy@google.com97cee972012-08-07 20:41:37 +0000469 mFlags->append("kMatrixClip_SaveFlag");
chudy@google.com902ebe52012-06-29 14:21:22 +0000470 } else if (flags == SkCanvas::kARGB_NoClipLayer_SaveFlag) {
chudy@google.com97cee972012-08-07 20:41:37 +0000471 mFlags->append("kARGB_NoClipLayer_SaveFlag");
chudy@google.com902ebe52012-06-29 14:21:22 +0000472 } else if (flags == SkCanvas::kARGB_ClipLayer_SaveFlag) {
chudy@google.com97cee972012-08-07 20:41:37 +0000473 mFlags->append("kARGB_ClipLayer_SaveFlag");
chudy@google.com902ebe52012-06-29 14:21:22 +0000474 } else {
chudy@google.com97cee972012-08-07 20:41:37 +0000475 mFlags->append("Data Unavailable");
chudy@google.com902ebe52012-06-29 14:21:22 +0000476 }
chudy@google.com902ebe52012-06-29 14:21:22 +0000477 return mFlags;
478}
479
chudy@google.com97cee972012-08-07 20:41:37 +0000480SkString* SkObjectParser::ScalarToString(SkScalar x, const char* text) {
481 SkString* mScalar = new SkString(text);
482 mScalar->append(" ");
483 mScalar->appendScalar(x);
chudy@google.com902ebe52012-06-29 14:21:22 +0000484 return mScalar;
485}
486
chudy@google.com97cee972012-08-07 20:41:37 +0000487SkString* SkObjectParser::TextToString(const void* text, size_t byteLength) {
robertphillips@google.com94acc702012-09-06 18:43:21 +0000488 SkString* mText = new SkString(6+byteLength+1);
489 mText->append("Text: ");
490 mText->append((char*) text, byteLength);
chudy@google.com97cee972012-08-07 20:41:37 +0000491 return mText;
chudy@google.com902ebe52012-06-29 14:21:22 +0000492}