blob: c53d3b5a31b28d1d429a983eaab82237267e3f40 [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"
humper@google.comf515ffc2013-01-07 15:48:19 +000010#include "SkData.h"
11#include "SkFontDescriptor.h"
robertphillips@google.com4991b8f2013-01-28 20:21:59 +000012#include "SkRRect.h"
13#include "SkShader.h"
14#include "SkStream.h"
15#include "SkStringUtils.h"
16#include "SkTypeface.h"
chudy@google.com902ebe52012-06-29 14:21:22 +000017
18/* TODO(chudy): Replace all std::strings with char */
19
chudy@google.com97cee972012-08-07 20:41:37 +000020SkString* SkObjectParser::BitmapToString(const SkBitmap& bitmap) {
robertphillips@google.com195952f2012-10-23 12:13:35 +000021 SkString* mBitmap = new SkString("SkBitmap: ");
22 mBitmap->append("W: ");
23 mBitmap->appendS32(bitmap.width());
24 mBitmap->append(" H: ");
25 mBitmap->appendS32(bitmap.height());
26
27 const char* gConfigStrings[] = {
skia.committer@gmail.com1e34ff72012-10-24 02:01:24 +000028 "None", "A1", "A8", "Index8", "RGB565", "ARGB4444", "ARGB8888", "RLE8"
robertphillips@google.com195952f2012-10-23 12:13:35 +000029 };
30 SkASSERT(SkBitmap::kConfigCount == 8);
31
32 mBitmap->append(" Config: ");
33 mBitmap->append(gConfigStrings[bitmap.getConfig()]);
34
35 if (bitmap.isOpaque()) {
36 mBitmap->append(" opaque");
37 } else {
38 mBitmap->append(" not-opaque");
39 }
40
41 if (bitmap.isImmutable()) {
42 mBitmap->append(" immutable");
43 } else {
44 mBitmap->append(" not-immutable");
45 }
46
47 if (bitmap.isVolatile()) {
48 mBitmap->append(" volatile");
49 } else {
50 mBitmap->append(" not-volatile");
51 }
52
53 mBitmap->append(" genID: ");
54 mBitmap->appendS32(bitmap.getGenerationID());
55
chudy@google.com902ebe52012-06-29 14:21:22 +000056 return mBitmap;
57}
58
chudy@google.com97cee972012-08-07 20:41:37 +000059SkString* SkObjectParser::BoolToString(bool doAA) {
60 SkString* mBool = new SkString("Bool doAA: ");
chudy@google.com902ebe52012-06-29 14:21:22 +000061 if (doAA) {
chudy@google.com97cee972012-08-07 20:41:37 +000062 mBool->append("True");
chudy@google.com902ebe52012-06-29 14:21:22 +000063 } else {
chudy@google.com97cee972012-08-07 20:41:37 +000064 mBool->append("False");
chudy@google.com902ebe52012-06-29 14:21:22 +000065 }
chudy@google.com97cee972012-08-07 20:41:37 +000066 return mBool;
chudy@google.com902ebe52012-06-29 14:21:22 +000067}
68
chudy@google.com97cee972012-08-07 20:41:37 +000069SkString* SkObjectParser::CustomTextToString(const char* text) {
70 SkString* mText = new SkString(text);
71 return mText;
chudy@google.com902ebe52012-06-29 14:21:22 +000072}
73
chudy@google.com97cee972012-08-07 20:41:37 +000074SkString* SkObjectParser::IntToString(int x, const char* text) {
75 SkString* mInt = new SkString(text);
76 mInt->append(" ");
77 mInt->appendScalar(SkIntToScalar(x));
78 return mInt;
chudy@google.com902ebe52012-06-29 14:21:22 +000079}
80
chudy@google.com97cee972012-08-07 20:41:37 +000081SkString* SkObjectParser::IRectToString(const SkIRect& rect) {
82 SkString* mRect = new SkString("SkIRect: ");
83 mRect->append("L: ");
robertphillips@google.com195952f2012-10-23 12:13:35 +000084 mRect->appendS32(rect.left());
chudy@google.com97cee972012-08-07 20:41:37 +000085 mRect->append(", T: ");
robertphillips@google.com195952f2012-10-23 12:13:35 +000086 mRect->appendS32(rect.top());
chudy@google.com97cee972012-08-07 20:41:37 +000087 mRect->append(", R: ");
robertphillips@google.com195952f2012-10-23 12:13:35 +000088 mRect->appendS32(rect.right());
chudy@google.com97cee972012-08-07 20:41:37 +000089 mRect->append(", B: ");
robertphillips@google.com195952f2012-10-23 12:13:35 +000090 mRect->appendS32(rect.bottom());
chudy@google.com902ebe52012-06-29 14:21:22 +000091 return mRect;
92}
93
chudy@google.com97cee972012-08-07 20:41:37 +000094SkString* SkObjectParser::MatrixToString(const SkMatrix& matrix) {
95 SkString* mMatrix = new SkString("SkMatrix: (");
96 for (int i = 0; i < 8; i++) {
97 mMatrix->appendScalar(matrix.get(i));
98 mMatrix->append("), (");
chudy@google.com902ebe52012-06-29 14:21:22 +000099 }
chudy@google.com97cee972012-08-07 20:41:37 +0000100 mMatrix->appendScalar(matrix.get(8));
101 mMatrix->append(")");
102 return mMatrix;
103}
chudy@google.com902ebe52012-06-29 14:21:22 +0000104
robertphillips@google.com735edb02013-01-10 18:54:11 +0000105SkString* SkObjectParser::PaintToString(const SkPaint& paint) {
106 SkString* mPaint = new SkString("<dl><dt>SkPaint:</dt><dd><dl>");
107
108 SkTypeface* typeface = paint.getTypeface();
109 if (NULL != typeface) {
humper@google.comf515ffc2013-01-07 15:48:19 +0000110 SkDynamicMemoryWStream ostream;
111 typeface->serialize(&ostream);
robertphillips@google.com444a4012013-01-14 17:40:15 +0000112 SkAutoTUnref<SkData> data(ostream.copyToData());
skia.committer@gmail.com4e8ef332013-01-08 02:01:29 +0000113
humper@google.comf515ffc2013-01-07 15:48:19 +0000114 SkMemoryStream stream(data);
115 SkFontDescriptor descriptor(&stream);
skia.committer@gmail.com4e8ef332013-01-08 02:01:29 +0000116
humper@google.comf515ffc2013-01-07 15:48:19 +0000117 mPaint->append("<dt>Font Family Name:</dt><dd>");
118 mPaint->append(descriptor.getFamilyName());
119 mPaint->append("</dd><dt>Font Full Name:</dt><dd>");
120 mPaint->append(descriptor.getFullName());
121 mPaint->append("</dd><dt>Font PS Name:</dt><dd>");
122 mPaint->append(descriptor.getPostscriptName());
123 mPaint->append("</dd><dt>Font File Name:</dt><dd>");
124 mPaint->append(descriptor.getFontFileName());
robertphillips@google.com735edb02013-01-10 18:54:11 +0000125 mPaint->append("</dd>");
humper@google.comf515ffc2013-01-07 15:48:19 +0000126 }
robertphillips@google.com195952f2012-10-23 12:13:35 +0000127
robertphillips@google.com735edb02013-01-10 18:54:11 +0000128 mPaint->append("<dt>TextSize:</dt><dd>");
129 mPaint->appendScalar(paint.getTextSize());
130 mPaint->append("</dd>");
131
132 mPaint->append("<dt>TextScaleX:</dt><dd>");
133 mPaint->appendScalar(paint.getTextScaleX());
134 mPaint->append("</dd>");
135
136 mPaint->append("<dt>TextSkewX:</dt><dd>");
137 mPaint->appendScalar(paint.getTextSkewX());
138 mPaint->append("</dd>");
139
140 SkPathEffect* pathEffect = paint.getPathEffect();
141 if (NULL != pathEffect) {
142 mPaint->append("<dt>PathEffect:</dt><dd>");
143 mPaint->append("</dd>");
144 }
145
146 SkShader* shader = paint.getShader();
147 if (NULL != shader) {
148 mPaint->append("<dt>Shader:</dt><dd>");
robertphillips@google.com76f9e932013-01-15 20:17:47 +0000149 SkDEVCODE(shader->toString(mPaint);)
robertphillips@google.com735edb02013-01-10 18:54:11 +0000150 mPaint->append("</dd>");
151 }
152
153 SkXfermode* xfer = paint.getXfermode();
154 if (NULL != xfer) {
155 mPaint->append("<dt>Xfermode:</dt><dd>");
robertphillips@google.comb83b6b42013-01-22 14:32:09 +0000156 SkDEVCODE(xfer->toString(mPaint);)
robertphillips@google.com735edb02013-01-10 18:54:11 +0000157 mPaint->append("</dd>");
158 }
159
160 SkMaskFilter* maskFilter = paint.getMaskFilter();
161 if (NULL != maskFilter) {
162 mPaint->append("<dt>MaskFilter:</dt><dd>");
163 mPaint->append("</dd>");
164 }
165
166 SkColorFilter* colorFilter = paint.getColorFilter();
167 if (NULL != colorFilter) {
168 mPaint->append("<dt>ColorFilter:</dt><dd>");
169 mPaint->append("</dd>");
170 }
171
172 SkRasterizer* rasterizer = paint.getRasterizer();
173 if (NULL != rasterizer) {
174 mPaint->append("<dt>Rasterizer:</dt><dd>");
175 mPaint->append("</dd>");
176 }
177
178 SkDrawLooper* looper = paint.getLooper();
179 if (NULL != looper) {
180 mPaint->append("<dt>DrawLooper:</dt><dd>");
robertphillips@google.com4991b8f2013-01-28 20:21:59 +0000181 SkDEVCODE(looper->toString(mPaint);)
robertphillips@google.com735edb02013-01-10 18:54:11 +0000182 mPaint->append("</dd>");
183 }
184
185 SkImageFilter* imageFilter = paint.getImageFilter();
186 if (NULL != imageFilter) {
187 mPaint->append("<dt>ImageFilter:</dt><dd>");
188 mPaint->append("</dd>");
189 }
190
191 SkAnnotation* annotation = paint.getAnnotation();
192 if (NULL != annotation) {
193 mPaint->append("<dt>Annotation:</dt><dd>");
194 mPaint->append("</dd>");
195 }
196
197 mPaint->append("<dt>Color:</dt><dd>0x");
198 SkColor color = paint.getColor();
199 mPaint->appendHex(color);
200 mPaint->append("</dd>");
201
202 mPaint->append("<dt>Stroke Width:</dt><dd>");
203 mPaint->appendScalar(paint.getStrokeWidth());
204 mPaint->append("</dd>");
205
206 mPaint->append("<dt>Stroke Miter:</dt><dd>");
207 mPaint->appendScalar(paint.getStrokeMiter());
208 mPaint->append("</dd>");
209
210 mPaint->append("<dt>Flags:</dt><dd>(");
211 if (paint.getFlags()) {
212 bool needSeparator = false;
robertphillips@google.com4991b8f2013-01-28 20:21:59 +0000213 SkAddFlagToString(mPaint, paint.isAntiAlias(), "AntiAlias", &needSeparator);
214 SkAddFlagToString(mPaint, paint.isFilterBitmap(), "FilterBitmap", &needSeparator);
215 SkAddFlagToString(mPaint, paint.isDither(), "Dither", &needSeparator);
216 SkAddFlagToString(mPaint, paint.isUnderlineText(), "UnderlineText", &needSeparator);
217 SkAddFlagToString(mPaint, paint.isStrikeThruText(), "StrikeThruText", &needSeparator);
218 SkAddFlagToString(mPaint, paint.isFakeBoldText(), "FakeBoldText", &needSeparator);
219 SkAddFlagToString(mPaint, paint.isLinearText(), "LinearText", &needSeparator);
220 SkAddFlagToString(mPaint, paint.isSubpixelText(), "SubpixelText", &needSeparator);
221 SkAddFlagToString(mPaint, paint.isDevKernText(), "DevKernText", &needSeparator);
222 SkAddFlagToString(mPaint, paint.isLCDRenderText(), "LCDRenderText", &needSeparator);
223 SkAddFlagToString(mPaint, paint.isEmbeddedBitmapText(),
224 "EmbeddedBitmapText", &needSeparator);
225 SkAddFlagToString(mPaint, paint.isAutohinted(), "Autohinted", &needSeparator);
226 SkAddFlagToString(mPaint, paint.isVerticalText(), "VerticalText", &needSeparator);
227 SkAddFlagToString(mPaint, SkToBool(paint.getFlags() & SkPaint::kGenA8FromLCD_Flag),
228 "GenA8FromLCD", &needSeparator);
robertphillips@google.com735edb02013-01-10 18:54:11 +0000229 } else {
230 mPaint->append("None");
231 }
232 mPaint->append(")</dd>");
233
234 mPaint->append("<dt>TextAlign:</dt><dd>");
235 static const char* gTextAlignStrings[SkPaint::kAlignCount] = { "Left", "Center", "Right" };
236 mPaint->append(gTextAlignStrings[paint.getTextAlign()]);
237 mPaint->append("</dd>");
238
239 mPaint->append("<dt>CapType:</dt><dd>");
240 static const char* gStrokeCapStrings[SkPaint::kCapCount] = { "Butt", "Round", "Square" };
241 mPaint->append(gStrokeCapStrings[paint.getStrokeCap()]);
242 mPaint->append("</dd>");
243
244 mPaint->append("<dt>JoinType:</dt><dd>");
245 static const char* gJoinStrings[SkPaint::kJoinCount] = { "Miter", "Round", "Bevel" };
246 mPaint->append(gJoinStrings[paint.getStrokeJoin()]);
247 mPaint->append("</dd>");
248
249 mPaint->append("<dt>Style:</dt><dd>");
250 static const char* gStyleStrings[SkPaint::kStyleCount] = { "Fill", "Stroke", "StrokeAndFill" };
251 mPaint->append(gStyleStrings[paint.getStyle()]);
252 mPaint->append("</dd>");
253
254 mPaint->append("<dt>TextEncoding:</dt><dd>");
255 static const char* gTextEncodingStrings[] = { "UTF8", "UTF16", "UTF32", "GlyphID" };
256 mPaint->append(gTextEncodingStrings[paint.getTextEncoding()]);
257 mPaint->append("</dd>");
258
259 mPaint->append("<dt>Hinting:</dt><dd>");
260 static const char* gHintingStrings[] = { "None", "Slight", "Normal", "Full" };
261 mPaint->append(gHintingStrings[paint.getHinting()]);
262 mPaint->append("</dd>");
263
264 mPaint->append("</dd></dl></dl>");
chudy@google.com97cee972012-08-07 20:41:37 +0000265 return mPaint;
266}
267
268SkString* SkObjectParser::PathToString(const SkPath& path) {
robertphillips@google.com87201762012-10-18 13:30:18 +0000269 SkString* mPath = new SkString("Path (");
270
robertphillips@google.com51185fe2012-12-05 19:34:33 +0000271 static const char* gFillStrings[] = {
272 "Winding", "EvenOdd", "InverseWinding", "InverseEvenOdd"
273 };
274
275 mPath->append(gFillStrings[path.getFillType()]);
276 mPath->append(", ");
277
robertphillips@google.com87201762012-10-18 13:30:18 +0000278 static const char* gConvexityStrings[] = {
skia.committer@gmail.com6a748ad2012-10-19 02:01:19 +0000279 "Unknown", "Convex", "Concave"
robertphillips@google.com87201762012-10-18 13:30:18 +0000280 };
281 SkASSERT(SkPath::kConcave_Convexity == 2);
282
283 mPath->append(gConvexityStrings[path.getConvexity()]);
284 mPath->append(", ");
285
robertphillips@google.com195952f2012-10-23 12:13:35 +0000286 if (path.isRect(NULL)) {
287 mPath->append("isRect, ");
288 } else {
289 mPath->append("isNotRect, ");
290 }
291
robertphillips@google.com87201762012-10-18 13:30:18 +0000292 mPath->appendS32(path.countVerbs());
293 mPath->append("V, ");
294 mPath->appendS32(path.countPoints());
295 mPath->append("P): ");
296
297 static const char* gVerbStrings[] = {
298 "Move", "Line", "Quad", "Cubic", "Close", "Done"
299 };
300 static const int gPtsPerVerb[] = { 1, 1, 2, 3, 0, 0 };
301 static const int gPtOffsetPerVerb[] = { 0, 1, 1, 1, 0, 0 };
302 SkASSERT(SkPath::kDone_Verb == 5);
303
304 SkPath::Iter iter(const_cast<SkPath&>(path), false);
305 SkPath::Verb verb;
306 SkPoint points[4];
307
skia.committer@gmail.com6a748ad2012-10-19 02:01:19 +0000308 for(verb = iter.next(points, false);
309 verb != SkPath::kDone_Verb;
robertphillips@google.com87201762012-10-18 13:30:18 +0000310 verb = iter.next(points, false)) {
311
312 mPath->append(gVerbStrings[verb]);
313 mPath->append(" ");
314
315 for (int i = 0; i < gPtsPerVerb[verb]; ++i) {
316 mPath->append("(");
317 mPath->appendScalar(points[gPtOffsetPerVerb[verb]+i].fX);
318 mPath->append(", ");
319 mPath->appendScalar(points[gPtOffsetPerVerb[verb]+i].fY);
320 mPath->append(") ");
321 }
chudy@google.com97cee972012-08-07 20:41:37 +0000322 }
robertphillips@google.com87201762012-10-18 13:30:18 +0000323
robertphillips@google.com30d35f22012-11-06 16:45:36 +0000324 SkString* boundStr = SkObjectParser::RectToString(path.getBounds(), " Bound: ");
325
326 if (NULL != boundStr) {
327 mPath->append(*boundStr);
328 SkDELETE(boundStr);
329 }
330
chudy@google.com97cee972012-08-07 20:41:37 +0000331 return mPath;
332}
333
334SkString* SkObjectParser::PointsToString(const SkPoint pts[], size_t count) {
335 SkString* mPoints = new SkString("SkPoints pts[]: ");
336 for (unsigned int i = 0; i < count; i++) {
337 mPoints->append("(");
338 mPoints->appendScalar(pts[i].fX);
339 mPoints->append(",");
340 mPoints->appendScalar(pts[i].fY);
341 mPoints->append(")");
342 }
343 return mPoints;
344}
345
346SkString* SkObjectParser::PointModeToString(SkCanvas::PointMode mode) {
347 SkString* mMode = new SkString("SkCanvas::PointMode: ");
348 if (mode == SkCanvas::kPoints_PointMode) {
349 mMode->append("kPoints_PointMode");
350 } else if (mode == SkCanvas::kLines_PointMode) {
351 mMode->append("kLines_Mode");
352 } else if (mode == SkCanvas::kPolygon_PointMode) {
353 mMode->append("kPolygon_PointMode");
354 }
355 return mMode;
356}
357
robertphillips@google.com30d35f22012-11-06 16:45:36 +0000358SkString* SkObjectParser::RectToString(const SkRect& rect, const char* title) {
359
360 SkString* mRect = new SkString;
skia.committer@gmail.com72b2e6f2012-11-08 02:03:56 +0000361
robertphillips@google.com30d35f22012-11-06 16:45:36 +0000362 if (NULL == title) {
363 mRect->append("SkRect: ");
364 } else {
365 mRect->append(title);
366 }
chudy@google.com97cee972012-08-07 20:41:37 +0000367 mRect->append("(");
368 mRect->appendScalar(rect.left());
369 mRect->append(", ");
370 mRect->appendScalar(rect.top());
371 mRect->append(", ");
372 mRect->appendScalar(rect.right());
373 mRect->append(", ");
374 mRect->appendScalar(rect.bottom());
375 mRect->append(")");
376 return mRect;
377}
378
robertphillips@google.com67baba42013-01-02 20:20:31 +0000379SkString* SkObjectParser::RRectToString(const SkRRect& rrect, const char* title) {
380
381 SkString* mRRect = new SkString;
382
383 if (NULL == title) {
384 mRRect->append("SkRRect (");
385 if (rrect.isEmpty()) {
386 mRRect->append("empty");
387 } else if (rrect.isRect()) {
388 mRRect->append("rect");
389 } else if (rrect.isOval()) {
390 mRRect->append("oval");
391 } else if (rrect.isSimple()) {
392 mRRect->append("simple");
393 } else {
394 SkASSERT(rrect.isComplex());
395 mRRect->append("complex");
396 }
397 mRRect->append("): ");
398 } else {
399 mRRect->append(title);
400 }
401 mRRect->append("(");
402 mRRect->appendScalar(rrect.rect().left());
403 mRRect->append(", ");
404 mRRect->appendScalar(rrect.rect().top());
405 mRRect->append(", ");
406 mRRect->appendScalar(rrect.rect().right());
407 mRRect->append(", ");
408 mRRect->appendScalar(rrect.rect().bottom());
409 mRRect->append(") radii: (");
410 for (int i = 0; i < 4; ++i) {
411 const SkVector& radii = rrect.radii((SkRRect::Corner) i);
412 mRRect->appendScalar(radii.fX);
413 mRRect->append(", ");
414 mRRect->appendScalar(radii.fY);
415 if (i < 3) {
416 mRRect->append(", ");
417 }
418 }
419 mRRect->append(")");
420 return mRRect;
421}
422
chudy@google.com97cee972012-08-07 20:41:37 +0000423SkString* SkObjectParser::RegionOpToString(SkRegion::Op op) {
424 SkString* mOp = new SkString("SkRegion::Op: ");
425 if (op == SkRegion::kDifference_Op) {
426 mOp->append("kDifference_Op");
427 } else if (op == SkRegion::kIntersect_Op) {
428 mOp->append("kIntersect_Op");
429 } else if (op == SkRegion::kUnion_Op) {
430 mOp->append("kUnion_Op");
431 } else if (op == SkRegion::kXOR_Op) {
432 mOp->append("kXOR_Op");
433 } else if (op == SkRegion::kReverseDifference_Op) {
434 mOp->append("kReverseDifference_Op");
435 } else if (op == SkRegion::kReplace_Op) {
436 mOp->append("kReplace_Op");
437 } else {
438 mOp->append("Unknown Type");
439 }
chudy@google.com902ebe52012-06-29 14:21:22 +0000440 return mOp;
441}
442
chudy@google.com97cee972012-08-07 20:41:37 +0000443SkString* SkObjectParser::RegionToString(const SkRegion& region) {
444 SkString* mRegion = new SkString("SkRegion: Data unavailable.");
445 return mRegion;
chudy@google.com902ebe52012-06-29 14:21:22 +0000446}
447
chudy@google.com97cee972012-08-07 20:41:37 +0000448SkString* SkObjectParser::SaveFlagsToString(SkCanvas::SaveFlags flags) {
449 SkString* mFlags = new SkString("SkCanvas::SaveFlags: ");
chudy@google.com902ebe52012-06-29 14:21:22 +0000450 if(flags == SkCanvas::kMatrixClip_SaveFlag) {
chudy@google.com97cee972012-08-07 20:41:37 +0000451 mFlags->append("kMatrixClip_SaveFlag");
chudy@google.com902ebe52012-06-29 14:21:22 +0000452 } else if (flags == SkCanvas::kClip_SaveFlag) {
chudy@google.com97cee972012-08-07 20:41:37 +0000453 mFlags->append("kClip_SaveFlag");
chudy@google.com902ebe52012-06-29 14:21:22 +0000454 } else if (flags == SkCanvas::kHasAlphaLayer_SaveFlag) {
chudy@google.com97cee972012-08-07 20:41:37 +0000455 mFlags->append("kHasAlphaLayer_SaveFlag");
chudy@google.com902ebe52012-06-29 14:21:22 +0000456 } else if (flags == SkCanvas::kFullColorLayer_SaveFlag) {
chudy@google.com97cee972012-08-07 20:41:37 +0000457 mFlags->append("kFullColorLayer_SaveFlag");
chudy@google.com902ebe52012-06-29 14:21:22 +0000458 } else if (flags == SkCanvas::kClipToLayer_SaveFlag) {
chudy@google.com97cee972012-08-07 20:41:37 +0000459 mFlags->append("kClipToLayer_SaveFlag");
chudy@google.com902ebe52012-06-29 14:21:22 +0000460 } else if (flags == SkCanvas::kMatrixClip_SaveFlag) {
chudy@google.com97cee972012-08-07 20:41:37 +0000461 mFlags->append("kMatrixClip_SaveFlag");
chudy@google.com902ebe52012-06-29 14:21:22 +0000462 } else if (flags == SkCanvas::kARGB_NoClipLayer_SaveFlag) {
chudy@google.com97cee972012-08-07 20:41:37 +0000463 mFlags->append("kARGB_NoClipLayer_SaveFlag");
chudy@google.com902ebe52012-06-29 14:21:22 +0000464 } else if (flags == SkCanvas::kARGB_ClipLayer_SaveFlag) {
chudy@google.com97cee972012-08-07 20:41:37 +0000465 mFlags->append("kARGB_ClipLayer_SaveFlag");
chudy@google.com902ebe52012-06-29 14:21:22 +0000466 } else {
chudy@google.com97cee972012-08-07 20:41:37 +0000467 mFlags->append("Data Unavailable");
chudy@google.com902ebe52012-06-29 14:21:22 +0000468 }
chudy@google.com902ebe52012-06-29 14:21:22 +0000469 return mFlags;
470}
471
chudy@google.com97cee972012-08-07 20:41:37 +0000472SkString* SkObjectParser::ScalarToString(SkScalar x, const char* text) {
473 SkString* mScalar = new SkString(text);
474 mScalar->append(" ");
475 mScalar->appendScalar(x);
chudy@google.com902ebe52012-06-29 14:21:22 +0000476 return mScalar;
477}
478
chudy@google.com97cee972012-08-07 20:41:37 +0000479SkString* SkObjectParser::TextToString(const void* text, size_t byteLength) {
robertphillips@google.com94acc702012-09-06 18:43:21 +0000480 SkString* mText = new SkString(6+byteLength+1);
481 mText->append("Text: ");
482 mText->append((char*) text, byteLength);
chudy@google.com97cee972012-08-07 20:41:37 +0000483 return mText;
chudy@google.com902ebe52012-06-29 14:21:22 +0000484}