| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 55 String name; | 55 String name; |
| 56 unsigned pointCount; | 56 unsigned pointCount; |
| 57 unsigned pointOffset; | 57 unsigned pointOffset; |
| 58 | 58 |
| 59 VerbParams(const String& name, unsigned pointCount, unsigned pointOffset) | 59 VerbParams(const String& name, unsigned pointCount, unsigned pointOffset) |
| 60 : name(name) | 60 : name(name) |
| 61 , pointCount(pointCount) | 61 , pointCount(pointCount) |
| 62 , pointOffset(pointOffset) { } | 62 , pointOffset(pointOffset) { } |
| 63 }; | 63 }; |
| 64 | 64 |
| 65 PassRefPtr<JSONObject> objectForSkRect(const SkRect& rect) | 65 std::unique_ptr<JSONObject> objectForSkRect(const SkRect& rect) |
| 66 { | 66 { |
| 67 RefPtr<JSONObject> rectItem = JSONObject::create(); | 67 std::unique_ptr<JSONObject> rectItem = JSONObject::create(); |
| 68 rectItem->setNumber("left", rect.left()); | 68 rectItem->setDouble("left", rect.left()); |
| 69 rectItem->setNumber("top", rect.top()); | 69 rectItem->setDouble("top", rect.top()); |
| 70 rectItem->setNumber("right", rect.right()); | 70 rectItem->setDouble("right", rect.right()); |
| 71 rectItem->setNumber("bottom", rect.bottom()); | 71 rectItem->setDouble("bottom", rect.bottom()); |
| 72 return rectItem.release(); | 72 return rectItem; |
| 73 } | 73 } |
| 74 | 74 |
| 75 PassRefPtr<JSONObject> objectForSkIRect(const SkIRect& rect) | 75 std::unique_ptr<JSONObject> objectForSkIRect(const SkIRect& rect) |
| 76 { | 76 { |
| 77 RefPtr<JSONObject> rectItem = JSONObject::create(); | 77 std::unique_ptr<JSONObject> rectItem = JSONObject::create(); |
| 78 rectItem->setNumber("left", rect.left()); | 78 rectItem->setDouble("left", rect.left()); |
| 79 rectItem->setNumber("top", rect.top()); | 79 rectItem->setDouble("top", rect.top()); |
| 80 rectItem->setNumber("right", rect.right()); | 80 rectItem->setDouble("right", rect.right()); |
| 81 rectItem->setNumber("bottom", rect.bottom()); | 81 rectItem->setDouble("bottom", rect.bottom()); |
| 82 return rectItem.release(); | 82 return rectItem; |
| 83 } | 83 } |
| 84 | 84 |
| 85 String pointModeName(SkCanvas::PointMode mode) | 85 String pointModeName(SkCanvas::PointMode mode) |
| 86 { | 86 { |
| 87 switch (mode) { | 87 switch (mode) { |
| 88 case SkCanvas::kPoints_PointMode: return "Points"; | 88 case SkCanvas::kPoints_PointMode: return "Points"; |
| 89 case SkCanvas::kLines_PointMode: return "Lines"; | 89 case SkCanvas::kLines_PointMode: return "Lines"; |
| 90 case SkCanvas::kPolygon_PointMode: return "Polygon"; | 90 case SkCanvas::kPolygon_PointMode: return "Polygon"; |
| 91 default: | 91 default: |
| 92 ASSERT_NOT_REACHED(); | 92 ASSERT_NOT_REACHED(); |
| 93 return "?"; | 93 return "?"; |
| 94 }; | 94 }; |
| 95 } | 95 } |
| 96 | 96 |
| 97 PassRefPtr<JSONObject> objectForSkPoint(const SkPoint& point) | 97 std::unique_ptr<JSONObject> objectForSkPoint(const SkPoint& point) |
| 98 { | 98 { |
| 99 RefPtr<JSONObject> pointItem = JSONObject::create(); | 99 std::unique_ptr<JSONObject> pointItem = JSONObject::create(); |
| 100 pointItem->setNumber("x", point.x()); | 100 pointItem->setDouble("x", point.x()); |
| 101 pointItem->setNumber("y", point.y()); | 101 pointItem->setDouble("y", point.y()); |
| 102 return pointItem.release(); | 102 return pointItem; |
| 103 } | 103 } |
| 104 | 104 |
| 105 PassRefPtr<JSONArray> arrayForSkPoints(size_t count, const SkPoint points[]) | 105 std::unique_ptr<JSONArray> arrayForSkPoints(size_t count, const SkPoint points[]
) |
| 106 { | 106 { |
| 107 RefPtr<JSONArray> pointsArrayItem = JSONArray::create(); | 107 std::unique_ptr<JSONArray> pointsArrayItem = JSONArray::create(); |
| 108 for (size_t i = 0; i < count; ++i) | 108 for (size_t i = 0; i < count; ++i) |
| 109 pointsArrayItem->pushObject(objectForSkPoint(points[i])); | 109 pointsArrayItem->pushObject(objectForSkPoint(points[i])); |
| 110 return pointsArrayItem.release(); | 110 return pointsArrayItem; |
| 111 } | 111 } |
| 112 | 112 |
| 113 PassRefPtr<JSONObject> objectForRadius(const SkRRect& rrect, SkRRect::Corner cor
ner) | 113 std::unique_ptr<JSONObject> objectForRadius(const SkRRect& rrect, SkRRect::Corne
r corner) |
| 114 { | 114 { |
| 115 RefPtr<JSONObject> radiusItem = JSONObject::create(); | 115 std::unique_ptr<JSONObject> radiusItem = JSONObject::create(); |
| 116 SkVector radius = rrect.radii(corner); | 116 SkVector radius = rrect.radii(corner); |
| 117 radiusItem->setNumber("xRadius", radius.x()); | 117 radiusItem->setDouble("xRadius", radius.x()); |
| 118 radiusItem->setNumber("yRadius", radius.y()); | 118 radiusItem->setDouble("yRadius", radius.y()); |
| 119 return radiusItem.release(); | 119 return radiusItem; |
| 120 } | 120 } |
| 121 | 121 |
| 122 String rrectTypeName(SkRRect::Type type) | 122 String rrectTypeName(SkRRect::Type type) |
| 123 { | 123 { |
| 124 switch (type) { | 124 switch (type) { |
| 125 case SkRRect::kEmpty_Type: return "Empty"; | 125 case SkRRect::kEmpty_Type: return "Empty"; |
| 126 case SkRRect::kRect_Type: return "Rect"; | 126 case SkRRect::kRect_Type: return "Rect"; |
| 127 case SkRRect::kOval_Type: return "Oval"; | 127 case SkRRect::kOval_Type: return "Oval"; |
| 128 case SkRRect::kSimple_Type: return "Simple"; | 128 case SkRRect::kSimple_Type: return "Simple"; |
| 129 case SkRRect::kNinePatch_Type: return "Nine-patch"; | 129 case SkRRect::kNinePatch_Type: return "Nine-patch"; |
| (...skipping 10 matching lines...) Expand all Loading... |
| 140 case SkRRect::kUpperLeft_Corner: return "upperLeftRadius"; | 140 case SkRRect::kUpperLeft_Corner: return "upperLeftRadius"; |
| 141 case SkRRect::kUpperRight_Corner: return "upperRightRadius"; | 141 case SkRRect::kUpperRight_Corner: return "upperRightRadius"; |
| 142 case SkRRect::kLowerRight_Corner: return "lowerRightRadius"; | 142 case SkRRect::kLowerRight_Corner: return "lowerRightRadius"; |
| 143 case SkRRect::kLowerLeft_Corner: return "lowerLeftRadius"; | 143 case SkRRect::kLowerLeft_Corner: return "lowerLeftRadius"; |
| 144 default: | 144 default: |
| 145 ASSERT_NOT_REACHED(); | 145 ASSERT_NOT_REACHED(); |
| 146 return "?"; | 146 return "?"; |
| 147 } | 147 } |
| 148 } | 148 } |
| 149 | 149 |
| 150 PassRefPtr<JSONObject> objectForSkRRect(const SkRRect& rrect) | 150 std::unique_ptr<JSONObject> objectForSkRRect(const SkRRect& rrect) |
| 151 { | 151 { |
| 152 RefPtr<JSONObject> rrectItem = JSONObject::create(); | 152 std::unique_ptr<JSONObject> rrectItem = JSONObject::create(); |
| 153 rrectItem->setString("type", rrectTypeName(rrect.type())); | 153 rrectItem->setString("type", rrectTypeName(rrect.type())); |
| 154 rrectItem->setNumber("left", rrect.rect().left()); | 154 rrectItem->setDouble("left", rrect.rect().left()); |
| 155 rrectItem->setNumber("top", rrect.rect().top()); | 155 rrectItem->setDouble("top", rrect.rect().top()); |
| 156 rrectItem->setNumber("right", rrect.rect().right()); | 156 rrectItem->setDouble("right", rrect.rect().right()); |
| 157 rrectItem->setNumber("bottom", rrect.rect().bottom()); | 157 rrectItem->setDouble("bottom", rrect.rect().bottom()); |
| 158 for (int i = 0; i < 4; ++i) | 158 for (int i = 0; i < 4; ++i) |
| 159 rrectItem->setObject(radiusName((SkRRect::Corner) i), objectForRadius(rr
ect, (SkRRect::Corner) i)); | 159 rrectItem->setObject(radiusName((SkRRect::Corner) i), objectForRadius(rr
ect, (SkRRect::Corner) i)); |
| 160 return rrectItem.release(); | 160 return rrectItem; |
| 161 } | 161 } |
| 162 | 162 |
| 163 String fillTypeName(SkPath::FillType type) | 163 String fillTypeName(SkPath::FillType type) |
| 164 { | 164 { |
| 165 switch (type) { | 165 switch (type) { |
| 166 case SkPath::kWinding_FillType: return "Winding"; | 166 case SkPath::kWinding_FillType: return "Winding"; |
| 167 case SkPath::kEvenOdd_FillType: return "EvenOdd"; | 167 case SkPath::kEvenOdd_FillType: return "EvenOdd"; |
| 168 case SkPath::kInverseWinding_FillType: return "InverseWinding"; | 168 case SkPath::kInverseWinding_FillType: return "InverseWinding"; |
| 169 case SkPath::kInverseEvenOdd_FillType: return "InverseEvenOdd"; | 169 case SkPath::kInverseEvenOdd_FillType: return "InverseEvenOdd"; |
| 170 default: | 170 default: |
| (...skipping 23 matching lines...) Expand all Loading... |
| 194 case SkPath::kConic_Verb: return VerbParams("Conic", 2, 1); | 194 case SkPath::kConic_Verb: return VerbParams("Conic", 2, 1); |
| 195 case SkPath::kCubic_Verb: return VerbParams("Cubic", 3, 1); | 195 case SkPath::kCubic_Verb: return VerbParams("Cubic", 3, 1); |
| 196 case SkPath::kClose_Verb: return VerbParams("Close", 0, 0); | 196 case SkPath::kClose_Verb: return VerbParams("Close", 0, 0); |
| 197 case SkPath::kDone_Verb: return VerbParams("Done", 0, 0); | 197 case SkPath::kDone_Verb: return VerbParams("Done", 0, 0); |
| 198 default: | 198 default: |
| 199 ASSERT_NOT_REACHED(); | 199 ASSERT_NOT_REACHED(); |
| 200 return VerbParams("?", 0, 0); | 200 return VerbParams("?", 0, 0); |
| 201 }; | 201 }; |
| 202 } | 202 } |
| 203 | 203 |
| 204 PassRefPtr<JSONObject> objectForSkPath(const SkPath& path) | 204 std::unique_ptr<JSONObject> objectForSkPath(const SkPath& path) |
| 205 { | 205 { |
| 206 RefPtr<JSONObject> pathItem = JSONObject::create(); | 206 std::unique_ptr<JSONObject> pathItem = JSONObject::create(); |
| 207 pathItem->setString("fillType", fillTypeName(path.getFillType())); | 207 pathItem->setString("fillType", fillTypeName(path.getFillType())); |
| 208 pathItem->setString("convexity", convexityName(path.getConvexity())); | 208 pathItem->setString("convexity", convexityName(path.getConvexity())); |
| 209 pathItem->setBoolean("isRect", path.isRect(0)); | 209 pathItem->setBoolean("isRect", path.isRect(0)); |
| 210 SkPath::Iter iter(path, false); | 210 SkPath::Iter iter(path, false); |
| 211 SkPoint points[4]; | 211 SkPoint points[4]; |
| 212 RefPtr<JSONArray> pathPointsArray = JSONArray::create(); | 212 std::unique_ptr<JSONArray> pathPointsArray = JSONArray::create(); |
| 213 for (SkPath::Verb verb = iter.next(points, false); verb != SkPath::kDone_Ver
b; verb = iter.next(points, false)) { | 213 for (SkPath::Verb verb = iter.next(points, false); verb != SkPath::kDone_Ver
b; verb = iter.next(points, false)) { |
| 214 VerbParams verbParams = segmentParams(verb); | 214 VerbParams verbParams = segmentParams(verb); |
| 215 RefPtr<JSONObject> pathPointItem = JSONObject::create(); | 215 std::unique_ptr<JSONObject> pathPointItem = JSONObject::create(); |
| 216 pathPointItem->setString("verb", verbParams.name); | 216 pathPointItem->setString("verb", verbParams.name); |
| 217 ASSERT(verbParams.pointCount + verbParams.pointOffset <= WTF_ARRAY_LENGT
H(points)); | 217 ASSERT(verbParams.pointCount + verbParams.pointOffset <= WTF_ARRAY_LENGT
H(points)); |
| 218 pathPointItem->setArray("points", arrayForSkPoints(verbParams.pointCount
, points + verbParams.pointOffset)); | 218 pathPointItem->setArray("points", arrayForSkPoints(verbParams.pointCount
, points + verbParams.pointOffset)); |
| 219 if (SkPath::kConic_Verb == verb) | 219 if (SkPath::kConic_Verb == verb) |
| 220 pathPointItem->setNumber("conicWeight", iter.conicWeight()); | 220 pathPointItem->setDouble("conicWeight", iter.conicWeight()); |
| 221 pathPointsArray->pushObject(pathPointItem); | 221 pathPointsArray->pushObject(std::move(pathPointItem)); |
| 222 } | 222 } |
| 223 pathItem->setArray("pathPoints", pathPointsArray); | 223 pathItem->setArray("pathPoints", std::move(pathPointsArray)); |
| 224 pathItem->setObject("bounds", objectForSkRect(path.getBounds())); | 224 pathItem->setObject("bounds", objectForSkRect(path.getBounds())); |
| 225 return pathItem.release(); | 225 return pathItem; |
| 226 } | 226 } |
| 227 | 227 |
| 228 String colorTypeName(SkColorType colorType) | 228 String colorTypeName(SkColorType colorType) |
| 229 { | 229 { |
| 230 switch (colorType) { | 230 switch (colorType) { |
| 231 case kUnknown_SkColorType: return "None"; | 231 case kUnknown_SkColorType: return "None"; |
| 232 case kAlpha_8_SkColorType: return "A8"; | 232 case kAlpha_8_SkColorType: return "A8"; |
| 233 case kIndex_8_SkColorType: return "Index8"; | 233 case kIndex_8_SkColorType: return "Index8"; |
| 234 case kRGB_565_SkColorType: return "RGB565"; | 234 case kRGB_565_SkColorType: return "RGB565"; |
| 235 case kARGB_4444_SkColorType: return "ARGB4444"; | 235 case kARGB_4444_SkColorType: return "ARGB4444"; |
| 236 case kN32_SkColorType: return "ARGB8888"; | 236 case kN32_SkColorType: return "ARGB8888"; |
| 237 default: | 237 default: |
| 238 ASSERT_NOT_REACHED(); | 238 ASSERT_NOT_REACHED(); |
| 239 return "?"; | 239 return "?"; |
| 240 }; | 240 }; |
| 241 } | 241 } |
| 242 | 242 |
| 243 PassRefPtr<JSONObject> objectForBitmapData(const SkBitmap& bitmap) | 243 std::unique_ptr<JSONObject> objectForBitmapData(const SkBitmap& bitmap) |
| 244 { | 244 { |
| 245 Vector<unsigned char> output; | 245 Vector<unsigned char> output; |
| 246 | 246 |
| 247 if (RefPtr<SkImage> image = fromSkSp(SkImage::MakeFromBitmap(bitmap))) { | 247 if (RefPtr<SkImage> image = fromSkSp(SkImage::MakeFromBitmap(bitmap))) { |
| 248 ImagePixelLocker pixelLocker(image, kUnpremul_SkAlphaType, kRGBA_8888_Sk
ColorType); | 248 ImagePixelLocker pixelLocker(image, kUnpremul_SkAlphaType, kRGBA_8888_Sk
ColorType); |
| 249 ImageDataBuffer imageData(IntSize(image->width(), image->height()), | 249 ImageDataBuffer imageData(IntSize(image->width(), image->height()), |
| 250 static_cast<const unsigned char*>(pixelLocker.pixels())); | 250 static_cast<const unsigned char*>(pixelLocker.pixels())); |
| 251 | 251 |
| 252 PNGImageEncoder::encode(imageData, &output); | 252 PNGImageEncoder::encode(imageData, &output); |
| 253 } | 253 } |
| 254 | 254 |
| 255 RefPtr<JSONObject> dataItem = JSONObject::create(); | 255 std::unique_ptr<JSONObject> dataItem = JSONObject::create(); |
| 256 dataItem->setString("base64", WTF::base64Encode(reinterpret_cast<char*>(outp
ut.data()), output.size())); | 256 dataItem->setString("base64", WTF::base64Encode(reinterpret_cast<char*>(outp
ut.data()), output.size())); |
| 257 dataItem->setString("mimeType", "image/png"); | 257 dataItem->setString("mimeType", "image/png"); |
| 258 return dataItem.release(); | 258 return dataItem; |
| 259 } | 259 } |
| 260 | 260 |
| 261 PassRefPtr<JSONObject> objectForSkBitmap(const SkBitmap& bitmap) | 261 std::unique_ptr<JSONObject> objectForSkBitmap(const SkBitmap& bitmap) |
| 262 { | 262 { |
| 263 RefPtr<JSONObject> bitmapItem = JSONObject::create(); | 263 std::unique_ptr<JSONObject> bitmapItem = JSONObject::create(); |
| 264 bitmapItem->setNumber("width", bitmap.width()); | 264 bitmapItem->setInteger("width", bitmap.width()); |
| 265 bitmapItem->setNumber("height", bitmap.height()); | 265 bitmapItem->setInteger("height", bitmap.height()); |
| 266 bitmapItem->setString("config", colorTypeName(bitmap.colorType())); | 266 bitmapItem->setString("config", colorTypeName(bitmap.colorType())); |
| 267 bitmapItem->setBoolean("opaque", bitmap.isOpaque()); | 267 bitmapItem->setBoolean("opaque", bitmap.isOpaque()); |
| 268 bitmapItem->setBoolean("immutable", bitmap.isImmutable()); | 268 bitmapItem->setBoolean("immutable", bitmap.isImmutable()); |
| 269 bitmapItem->setBoolean("volatile", bitmap.isVolatile()); | 269 bitmapItem->setBoolean("volatile", bitmap.isVolatile()); |
| 270 bitmapItem->setNumber("genID", bitmap.getGenerationID()); | 270 bitmapItem->setInteger("genID", bitmap.getGenerationID()); |
| 271 bitmapItem->setObject("data", objectForBitmapData(bitmap)); | 271 bitmapItem->setObject("data", objectForBitmapData(bitmap)); |
| 272 return bitmapItem.release(); | 272 return bitmapItem; |
| 273 } | 273 } |
| 274 | 274 |
| 275 PassRefPtr<JSONObject> objectForSkImage(const SkImage* image) | 275 std::unique_ptr<JSONObject> objectForSkImage(const SkImage* image) |
| 276 { | 276 { |
| 277 RefPtr<JSONObject> imageItem = JSONObject::create(); | 277 std::unique_ptr<JSONObject> imageItem = JSONObject::create(); |
| 278 imageItem->setNumber("width", image->width()); | 278 imageItem->setInteger("width", image->width()); |
| 279 imageItem->setNumber("height", image->height()); | 279 imageItem->setInteger("height", image->height()); |
| 280 imageItem->setBoolean("opaque", image->isOpaque()); | 280 imageItem->setBoolean("opaque", image->isOpaque()); |
| 281 imageItem->setNumber("uniqueID", image->uniqueID()); | 281 imageItem->setInteger("uniqueID", image->uniqueID()); |
| 282 return imageItem.release(); | 282 return imageItem; |
| 283 } | 283 } |
| 284 | 284 |
| 285 PassRefPtr<JSONArray> arrayForSkMatrix(const SkMatrix& matrix) | 285 std::unique_ptr<JSONArray> arrayForSkMatrix(const SkMatrix& matrix) |
| 286 { | 286 { |
| 287 RefPtr<JSONArray> matrixArray = JSONArray::create(); | 287 std::unique_ptr<JSONArray> matrixArray = JSONArray::create(); |
| 288 for (int i = 0; i < 9; ++i) | 288 for (int i = 0; i < 9; ++i) |
| 289 matrixArray->pushNumber(matrix[i]); | 289 matrixArray->pushDouble(matrix[i]); |
| 290 return matrixArray.release(); | 290 return matrixArray; |
| 291 } | 291 } |
| 292 | 292 |
| 293 PassRefPtr<JSONObject> objectForSkShader(const SkShader& shader) | 293 std::unique_ptr<JSONObject> objectForSkShader(const SkShader& shader) |
| 294 { | 294 { |
| 295 RefPtr<JSONObject> shaderItem = JSONObject::create(); | 295 std::unique_ptr<JSONObject> shaderItem = JSONObject::create(); |
| 296 const SkMatrix localMatrix = shader.getLocalMatrix(); | 296 const SkMatrix localMatrix = shader.getLocalMatrix(); |
| 297 if (!localMatrix.isIdentity()) | 297 if (!localMatrix.isIdentity()) |
| 298 shaderItem->setArray("localMatrix", arrayForSkMatrix(localMatrix)); | 298 shaderItem->setArray("localMatrix", arrayForSkMatrix(localMatrix)); |
| 299 return shaderItem.release(); | 299 return shaderItem; |
| 300 } | 300 } |
| 301 | 301 |
| 302 String stringForSkColor(const SkColor& color) | 302 String stringForSkColor(const SkColor& color) |
| 303 { | 303 { |
| 304 String colorString = "#"; | 304 String colorString = "#"; |
| 305 appendUnsignedAsHex(color, colorString); | 305 appendUnsignedAsHex(color, colorString); |
| 306 return colorString; | 306 return colorString; |
| 307 } | 307 } |
| 308 | 308 |
| 309 void appendFlagToString(String* flagsString, bool isSet, const String& name) | 309 void appendFlagToString(String* flagsString, bool isSet, const String& name) |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 415 case SkPaint::kNo_Hinting: return "None"; | 415 case SkPaint::kNo_Hinting: return "None"; |
| 416 case SkPaint::kSlight_Hinting: return "Slight"; | 416 case SkPaint::kSlight_Hinting: return "Slight"; |
| 417 case SkPaint::kNormal_Hinting: return "Normal"; | 417 case SkPaint::kNormal_Hinting: return "Normal"; |
| 418 case SkPaint::kFull_Hinting: return "Full"; | 418 case SkPaint::kFull_Hinting: return "Full"; |
| 419 default: | 419 default: |
| 420 ASSERT_NOT_REACHED(); | 420 ASSERT_NOT_REACHED(); |
| 421 return "?"; | 421 return "?"; |
| 422 }; | 422 }; |
| 423 } | 423 } |
| 424 | 424 |
| 425 PassRefPtr<JSONObject> objectForSkPaint(const SkPaint& paint) | 425 std::unique_ptr<JSONObject> objectForSkPaint(const SkPaint& paint) |
| 426 { | 426 { |
| 427 RefPtr<JSONObject> paintItem = JSONObject::create(); | 427 std::unique_ptr<JSONObject> paintItem = JSONObject::create(); |
| 428 paintItem->setNumber("textSize", paint.getTextSize()); | 428 paintItem->setDouble("textSize", paint.getTextSize()); |
| 429 paintItem->setNumber("textScaleX", paint.getTextScaleX()); | 429 paintItem->setDouble("textScaleX", paint.getTextScaleX()); |
| 430 paintItem->setNumber("textSkewX", paint.getTextSkewX()); | 430 paintItem->setDouble("textSkewX", paint.getTextSkewX()); |
| 431 if (SkShader* shader = paint.getShader()) | 431 if (SkShader* shader = paint.getShader()) |
| 432 paintItem->setObject("shader", objectForSkShader(*shader)); | 432 paintItem->setObject("shader", objectForSkShader(*shader)); |
| 433 paintItem->setString("color", stringForSkColor(paint.getColor())); | 433 paintItem->setString("color", stringForSkColor(paint.getColor())); |
| 434 paintItem->setNumber("strokeWidth", paint.getStrokeWidth()); | 434 paintItem->setDouble("strokeWidth", paint.getStrokeWidth()); |
| 435 paintItem->setNumber("strokeMiter", paint.getStrokeMiter()); | 435 paintItem->setDouble("strokeMiter", paint.getStrokeMiter()); |
| 436 paintItem->setString("flags", stringForSkPaintFlags(paint)); | 436 paintItem->setString("flags", stringForSkPaintFlags(paint)); |
| 437 paintItem->setString("filterLevel", filterQualityName(paint.getFilterQuality
())); | 437 paintItem->setString("filterLevel", filterQualityName(paint.getFilterQuality
())); |
| 438 paintItem->setString("textAlign", textAlignName(paint.getTextAlign())); | 438 paintItem->setString("textAlign", textAlignName(paint.getTextAlign())); |
| 439 paintItem->setString("strokeCap", strokeCapName(paint.getStrokeCap())); | 439 paintItem->setString("strokeCap", strokeCapName(paint.getStrokeCap())); |
| 440 paintItem->setString("strokeJoin", strokeJoinName(paint.getStrokeJoin())); | 440 paintItem->setString("strokeJoin", strokeJoinName(paint.getStrokeJoin())); |
| 441 paintItem->setString("styleName", styleName(paint.getStyle())); | 441 paintItem->setString("styleName", styleName(paint.getStyle())); |
| 442 paintItem->setString("textEncoding", textEncodingName(paint.getTextEncoding(
))); | 442 paintItem->setString("textEncoding", textEncodingName(paint.getTextEncoding(
))); |
| 443 paintItem->setString("hinting", hintingName(paint.getHinting())); | 443 paintItem->setString("hinting", hintingName(paint.getHinting())); |
| 444 return paintItem.release(); | 444 return paintItem; |
| 445 } | 445 } |
| 446 | 446 |
| 447 PassRefPtr<JSONArray> arrayForSkScalars(size_t n, const SkScalar scalars[]) | 447 std::unique_ptr<JSONArray> arrayForSkScalars(size_t n, const SkScalar scalars[]) |
| 448 { | 448 { |
| 449 RefPtr<JSONArray> scalarsArray = JSONArray::create(); | 449 std::unique_ptr<JSONArray> scalarsArray = JSONArray::create(); |
| 450 for (size_t i = 0; i < n; ++i) | 450 for (size_t i = 0; i < n; ++i) |
| 451 scalarsArray->pushNumber(scalars[i]); | 451 scalarsArray->pushDouble(scalars[i]); |
| 452 return scalarsArray.release(); | 452 return scalarsArray; |
| 453 } | 453 } |
| 454 | 454 |
| 455 String regionOpName(SkRegion::Op op) | 455 String regionOpName(SkRegion::Op op) |
| 456 { | 456 { |
| 457 switch (op) { | 457 switch (op) { |
| 458 case SkRegion::kDifference_Op: return "kDifference_Op"; | 458 case SkRegion::kDifference_Op: return "kDifference_Op"; |
| 459 case SkRegion::kIntersect_Op: return "kIntersect_Op"; | 459 case SkRegion::kIntersect_Op: return "kIntersect_Op"; |
| 460 case SkRegion::kUnion_Op: return "kUnion_Op"; | 460 case SkRegion::kUnion_Op: return "kUnion_Op"; |
| 461 case SkRegion::kXOR_Op: return "kXOR_Op"; | 461 case SkRegion::kXOR_Op: return "kXOR_Op"; |
| 462 case SkRegion::kReverseDifference_Op: return "kReverseDifference_Op"; | 462 case SkRegion::kReverseDifference_Op: return "kReverseDifference_Op"; |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 507 return "?"; | 507 return "?"; |
| 508 } | 508 } |
| 509 } | 509 } |
| 510 | 510 |
| 511 } // namespace | 511 } // namespace |
| 512 | 512 |
| 513 class AutoLogger : InterceptingCanvasBase::CanvasInterceptorBase<LoggingCanvas>
{ | 513 class AutoLogger : InterceptingCanvasBase::CanvasInterceptorBase<LoggingCanvas>
{ |
| 514 public: | 514 public: |
| 515 explicit AutoLogger(LoggingCanvas* canvas) : InterceptingCanvasBase::CanvasI
nterceptorBase<LoggingCanvas>(canvas) { } | 515 explicit AutoLogger(LoggingCanvas* canvas) : InterceptingCanvasBase::CanvasI
nterceptorBase<LoggingCanvas>(canvas) { } |
| 516 | 516 |
| 517 PassRefPtr<JSONObject> logItem(const String& name); | 517 JSONObject* logItem(const String& name); |
| 518 PassRefPtr<JSONObject> logItemWithParams(const String& name); | 518 JSONObject* logItemWithParams(const String& name); |
| 519 ~AutoLogger() | 519 ~AutoLogger() |
| 520 { | 520 { |
| 521 if (topLevelCall()) | 521 if (topLevelCall()) |
| 522 canvas()->m_log->pushObject(m_logItem); | 522 canvas()->m_log->pushObject(std::move(m_logItem)); |
| 523 } | 523 } |
| 524 | 524 |
| 525 private: | 525 private: |
| 526 RefPtr<JSONObject> m_logItem; | 526 std::unique_ptr<JSONObject> m_logItem; |
| 527 }; | 527 }; |
| 528 | 528 |
| 529 PassRefPtr<JSONObject> AutoLogger::logItem(const String& name) | 529 JSONObject* AutoLogger::logItem(const String& name) |
| 530 { | 530 { |
| 531 RefPtr<JSONObject> item = JSONObject::create(); | 531 std::unique_ptr<JSONObject> item = JSONObject::create(); |
| 532 item->setString("method", name); | 532 item->setString("method", name); |
| 533 m_logItem = item; | 533 m_logItem = std::move(item); |
| 534 return item.release(); | 534 return m_logItem.get(); |
| 535 } | 535 } |
| 536 | 536 |
| 537 PassRefPtr<JSONObject> AutoLogger::logItemWithParams(const String& name) | 537 JSONObject* AutoLogger::logItemWithParams(const String& name) |
| 538 { | 538 { |
| 539 RefPtr<JSONObject> item = logItem(name); | 539 JSONObject* item = logItem(name); |
| 540 RefPtr<JSONObject> params = JSONObject::create(); | 540 std::unique_ptr<JSONObject> params = JSONObject::create(); |
| 541 item->setObject("params", params); | 541 item->setObject("params", std::move(params)); |
| 542 return params.release(); | 542 return item->getObject("params"); |
| 543 } | 543 } |
| 544 | 544 |
| 545 LoggingCanvas::LoggingCanvas(int width, int height) | 545 LoggingCanvas::LoggingCanvas(int width, int height) |
| 546 : InterceptingCanvasBase(width, height) | 546 : InterceptingCanvasBase(width, height) |
| 547 , m_log(JSONArray::create()) | 547 , m_log(JSONArray::create()) |
| 548 { | 548 { |
| 549 } | 549 } |
| 550 | 550 |
| 551 void LoggingCanvas::onDrawPaint(const SkPaint& paint) | 551 void LoggingCanvas::onDrawPaint(const SkPaint& paint) |
| 552 { | 552 { |
| 553 AutoLogger logger(this); | 553 AutoLogger logger(this); |
| 554 logger.logItemWithParams("drawPaint")->setObject("paint", objectForSkPaint(p
aint)); | 554 logger.logItemWithParams("drawPaint")->setObject("paint", objectForSkPaint(p
aint)); |
| 555 this->SkCanvas::onDrawPaint(paint); | 555 this->SkCanvas::onDrawPaint(paint); |
| 556 } | 556 } |
| 557 | 557 |
| 558 void LoggingCanvas::onDrawPoints(PointMode mode, size_t count, const SkPoint pts
[], const SkPaint& paint) | 558 void LoggingCanvas::onDrawPoints(PointMode mode, size_t count, const SkPoint pts
[], const SkPaint& paint) |
| 559 { | 559 { |
| 560 AutoLogger logger(this); | 560 AutoLogger logger(this); |
| 561 RefPtr<JSONObject> params = logger.logItemWithParams("drawPoints"); | 561 JSONObject* params = logger.logItemWithParams("drawPoints"); |
| 562 params->setString("pointMode", pointModeName(mode)); | 562 params->setString("pointMode", pointModeName(mode)); |
| 563 params->setArray("points", arrayForSkPoints(count, pts)); | 563 params->setArray("points", arrayForSkPoints(count, pts)); |
| 564 params->setObject("paint", objectForSkPaint(paint)); | 564 params->setObject("paint", objectForSkPaint(paint)); |
| 565 this->SkCanvas::onDrawPoints(mode, count, pts, paint); | 565 this->SkCanvas::onDrawPoints(mode, count, pts, paint); |
| 566 } | 566 } |
| 567 | 567 |
| 568 void LoggingCanvas::onDrawRect(const SkRect& rect, const SkPaint& paint) | 568 void LoggingCanvas::onDrawRect(const SkRect& rect, const SkPaint& paint) |
| 569 { | 569 { |
| 570 AutoLogger logger(this); | 570 AutoLogger logger(this); |
| 571 RefPtr<JSONObject> params = logger.logItemWithParams("drawRect"); | 571 JSONObject* params = logger.logItemWithParams("drawRect"); |
| 572 params->setObject("rect", objectForSkRect(rect)); | 572 params->setObject("rect", objectForSkRect(rect)); |
| 573 params->setObject("paint", objectForSkPaint(paint)); | 573 params->setObject("paint", objectForSkPaint(paint)); |
| 574 this->SkCanvas::onDrawRect(rect, paint); | 574 this->SkCanvas::onDrawRect(rect, paint); |
| 575 } | 575 } |
| 576 | 576 |
| 577 void LoggingCanvas::onDrawOval(const SkRect& oval, const SkPaint& paint) | 577 void LoggingCanvas::onDrawOval(const SkRect& oval, const SkPaint& paint) |
| 578 { | 578 { |
| 579 AutoLogger logger(this); | 579 AutoLogger logger(this); |
| 580 RefPtr<JSONObject> params = logger.logItemWithParams("drawOval"); | 580 JSONObject* params = logger.logItemWithParams("drawOval"); |
| 581 params->setObject("oval", objectForSkRect(oval)); | 581 params->setObject("oval", objectForSkRect(oval)); |
| 582 params->setObject("paint", objectForSkPaint(paint)); | 582 params->setObject("paint", objectForSkPaint(paint)); |
| 583 this->SkCanvas::onDrawOval(oval, paint); | 583 this->SkCanvas::onDrawOval(oval, paint); |
| 584 } | 584 } |
| 585 | 585 |
| 586 void LoggingCanvas::onDrawRRect(const SkRRect& rrect, const SkPaint& paint) | 586 void LoggingCanvas::onDrawRRect(const SkRRect& rrect, const SkPaint& paint) |
| 587 { | 587 { |
| 588 AutoLogger logger(this); | 588 AutoLogger logger(this); |
| 589 RefPtr<JSONObject> params = logger.logItemWithParams("drawRRect"); | 589 JSONObject* params = logger.logItemWithParams("drawRRect"); |
| 590 params->setObject("rrect", objectForSkRRect(rrect)); | 590 params->setObject("rrect", objectForSkRRect(rrect)); |
| 591 params->setObject("paint", objectForSkPaint(paint)); | 591 params->setObject("paint", objectForSkPaint(paint)); |
| 592 this->SkCanvas::onDrawRRect(rrect, paint); | 592 this->SkCanvas::onDrawRRect(rrect, paint); |
| 593 } | 593 } |
| 594 | 594 |
| 595 void LoggingCanvas::onDrawPath(const SkPath& path, const SkPaint& paint) | 595 void LoggingCanvas::onDrawPath(const SkPath& path, const SkPaint& paint) |
| 596 { | 596 { |
| 597 AutoLogger logger(this); | 597 AutoLogger logger(this); |
| 598 RefPtr<JSONObject> params = logger.logItemWithParams("drawPath"); | 598 JSONObject* params = logger.logItemWithParams("drawPath"); |
| 599 params->setObject("path", objectForSkPath(path)); | 599 params->setObject("path", objectForSkPath(path)); |
| 600 params->setObject("paint", objectForSkPaint(paint)); | 600 params->setObject("paint", objectForSkPaint(paint)); |
| 601 this->SkCanvas::onDrawPath(path, paint); | 601 this->SkCanvas::onDrawPath(path, paint); |
| 602 } | 602 } |
| 603 | 603 |
| 604 void LoggingCanvas::onDrawBitmap(const SkBitmap& bitmap, SkScalar left, SkScalar
top, const SkPaint* paint) | 604 void LoggingCanvas::onDrawBitmap(const SkBitmap& bitmap, SkScalar left, SkScalar
top, const SkPaint* paint) |
| 605 { | 605 { |
| 606 AutoLogger logger(this); | 606 AutoLogger logger(this); |
| 607 RefPtr<JSONObject> params = logger.logItemWithParams("drawBitmap"); | 607 JSONObject* params = logger.logItemWithParams("drawBitmap"); |
| 608 params->setNumber("left", left); | 608 params->setDouble("left", left); |
| 609 params->setNumber("top", top); | 609 params->setDouble("top", top); |
| 610 params->setObject("bitmap", objectForSkBitmap(bitmap)); | 610 params->setObject("bitmap", objectForSkBitmap(bitmap)); |
| 611 if (paint) | 611 if (paint) |
| 612 params->setObject("paint", objectForSkPaint(*paint)); | 612 params->setObject("paint", objectForSkPaint(*paint)); |
| 613 this->SkCanvas::onDrawBitmap(bitmap, left, top, paint); | 613 this->SkCanvas::onDrawBitmap(bitmap, left, top, paint); |
| 614 } | 614 } |
| 615 | 615 |
| 616 void LoggingCanvas::onDrawBitmapRect(const SkBitmap& bitmap, const SkRect* src,
const SkRect& dst, const SkPaint* paint, SrcRectConstraint constraint) | 616 void LoggingCanvas::onDrawBitmapRect(const SkBitmap& bitmap, const SkRect* src,
const SkRect& dst, const SkPaint* paint, SrcRectConstraint constraint) |
| 617 { | 617 { |
| 618 AutoLogger logger(this); | 618 AutoLogger logger(this); |
| 619 RefPtr<JSONObject> params = logger.logItemWithParams("drawBitmapRectToRect")
; | 619 JSONObject* params = logger.logItemWithParams("drawBitmapRectToRect"); |
| 620 params->setObject("bitmap", objectForSkBitmap(bitmap)); | 620 params->setObject("bitmap", objectForSkBitmap(bitmap)); |
| 621 if (src) | 621 if (src) |
| 622 params->setObject("src", objectForSkRect(*src)); | 622 params->setObject("src", objectForSkRect(*src)); |
| 623 params->setObject("dst", objectForSkRect(dst)); | 623 params->setObject("dst", objectForSkRect(dst)); |
| 624 if (paint) | 624 if (paint) |
| 625 params->setObject("paint", objectForSkPaint(*paint)); | 625 params->setObject("paint", objectForSkPaint(*paint)); |
| 626 params->setNumber("flags", constraint); | 626 params->setInteger("flags", constraint); |
| 627 this->SkCanvas::onDrawBitmapRect(bitmap, src, dst, paint, constraint); | 627 this->SkCanvas::onDrawBitmapRect(bitmap, src, dst, paint, constraint); |
| 628 } | 628 } |
| 629 | 629 |
| 630 void LoggingCanvas::onDrawBitmapNine(const SkBitmap& bitmap, const SkIRect& cent
er, const SkRect& dst, const SkPaint* paint) | 630 void LoggingCanvas::onDrawBitmapNine(const SkBitmap& bitmap, const SkIRect& cent
er, const SkRect& dst, const SkPaint* paint) |
| 631 { | 631 { |
| 632 AutoLogger logger(this); | 632 AutoLogger logger(this); |
| 633 RefPtr<JSONObject> params = logger.logItemWithParams("drawBitmapNine"); | 633 JSONObject* params = logger.logItemWithParams("drawBitmapNine"); |
| 634 params->setObject("bitmap", objectForSkBitmap(bitmap)); | 634 params->setObject("bitmap", objectForSkBitmap(bitmap)); |
| 635 params->setObject("center", objectForSkIRect(center)); | 635 params->setObject("center", objectForSkIRect(center)); |
| 636 params->setObject("dst", objectForSkRect(dst)); | 636 params->setObject("dst", objectForSkRect(dst)); |
| 637 if (paint) | 637 if (paint) |
| 638 params->setObject("paint", objectForSkPaint(*paint)); | 638 params->setObject("paint", objectForSkPaint(*paint)); |
| 639 this->SkCanvas::onDrawBitmapNine(bitmap, center, dst, paint); | 639 this->SkCanvas::onDrawBitmapNine(bitmap, center, dst, paint); |
| 640 } | 640 } |
| 641 | 641 |
| 642 void LoggingCanvas::onDrawImage(const SkImage* image, SkScalar left, SkScalar to
p, const SkPaint* paint) | 642 void LoggingCanvas::onDrawImage(const SkImage* image, SkScalar left, SkScalar to
p, const SkPaint* paint) |
| 643 { | 643 { |
| 644 AutoLogger logger(this); | 644 AutoLogger logger(this); |
| 645 RefPtr<JSONObject> params = logger.logItemWithParams("drawImage"); | 645 JSONObject* params = logger.logItemWithParams("drawImage"); |
| 646 params->setNumber("left", left); | 646 params->setDouble("left", left); |
| 647 params->setNumber("top", top); | 647 params->setDouble("top", top); |
| 648 params->setObject("image", objectForSkImage(image)); | 648 params->setObject("image", objectForSkImage(image)); |
| 649 if (paint) | 649 if (paint) |
| 650 params->setObject("paint", objectForSkPaint(*paint)); | 650 params->setObject("paint", objectForSkPaint(*paint)); |
| 651 this->SkCanvas::onDrawImage(image, left, top, paint); | 651 this->SkCanvas::onDrawImage(image, left, top, paint); |
| 652 } | 652 } |
| 653 | 653 |
| 654 void LoggingCanvas::onDrawImageRect(const SkImage* image, const SkRect* src, con
st SkRect& dst, const SkPaint* paint, SrcRectConstraint constraint) | 654 void LoggingCanvas::onDrawImageRect(const SkImage* image, const SkRect* src, con
st SkRect& dst, const SkPaint* paint, SrcRectConstraint constraint) |
| 655 { | 655 { |
| 656 AutoLogger logger(this); | 656 AutoLogger logger(this); |
| 657 RefPtr<JSONObject> params = logger.logItemWithParams("drawImageRect"); | 657 JSONObject* params = logger.logItemWithParams("drawImageRect"); |
| 658 params->setObject("image", objectForSkImage(image)); | 658 params->setObject("image", objectForSkImage(image)); |
| 659 if (src) | 659 if (src) |
| 660 params->setObject("src", objectForSkRect(*src)); | 660 params->setObject("src", objectForSkRect(*src)); |
| 661 params->setObject("dst", objectForSkRect(dst)); | 661 params->setObject("dst", objectForSkRect(dst)); |
| 662 if (paint) | 662 if (paint) |
| 663 params->setObject("paint", objectForSkPaint(*paint)); | 663 params->setObject("paint", objectForSkPaint(*paint)); |
| 664 this->SkCanvas::onDrawImageRect(image, src, dst, paint, constraint); | 664 this->SkCanvas::onDrawImageRect(image, src, dst, paint, constraint); |
| 665 } | 665 } |
| 666 | 666 |
| 667 void LoggingCanvas::onDrawVertices(VertexMode vmode, int vertexCount, const SkPo
int vertices[], const SkPoint texs[], const SkColor colors[], SkXfermode* xmode, | 667 void LoggingCanvas::onDrawVertices(VertexMode vmode, int vertexCount, const SkPo
int vertices[], const SkPoint texs[], const SkColor colors[], SkXfermode* xmode, |
| 668 const uint16_t indices[], int indexCount, const SkPaint& paint) | 668 const uint16_t indices[], int indexCount, const SkPaint& paint) |
| 669 { | 669 { |
| 670 AutoLogger logger(this); | 670 AutoLogger logger(this); |
| 671 RefPtr<JSONObject> params = logger.logItemWithParams("drawVertices"); | 671 JSONObject* params = logger.logItemWithParams("drawVertices"); |
| 672 params->setObject("paint", objectForSkPaint(paint)); | 672 params->setObject("paint", objectForSkPaint(paint)); |
| 673 this->SkCanvas::onDrawVertices(vmode, vertexCount, vertices, texs, colors, x
mode, indices, indexCount, paint); | 673 this->SkCanvas::onDrawVertices(vmode, vertexCount, vertices, texs, colors, x
mode, indices, indexCount, paint); |
| 674 } | 674 } |
| 675 | 675 |
| 676 void LoggingCanvas::onDrawDRRect(const SkRRect& outer, const SkRRect& inner, con
st SkPaint& paint) | 676 void LoggingCanvas::onDrawDRRect(const SkRRect& outer, const SkRRect& inner, con
st SkPaint& paint) |
| 677 { | 677 { |
| 678 AutoLogger logger(this); | 678 AutoLogger logger(this); |
| 679 RefPtr<JSONObject> params = logger.logItemWithParams("drawDRRect"); | 679 JSONObject* params = logger.logItemWithParams("drawDRRect"); |
| 680 params->setObject("outer", objectForSkRRect(outer)); | 680 params->setObject("outer", objectForSkRRect(outer)); |
| 681 params->setObject("inner", objectForSkRRect(inner)); | 681 params->setObject("inner", objectForSkRRect(inner)); |
| 682 params->setObject("paint", objectForSkPaint(paint)); | 682 params->setObject("paint", objectForSkPaint(paint)); |
| 683 this->SkCanvas::onDrawDRRect(outer, inner, paint); | 683 this->SkCanvas::onDrawDRRect(outer, inner, paint); |
| 684 } | 684 } |
| 685 | 685 |
| 686 void LoggingCanvas::onDrawText(const void* text, size_t byteLength, SkScalar x,
SkScalar y, const SkPaint& paint) | 686 void LoggingCanvas::onDrawText(const void* text, size_t byteLength, SkScalar x,
SkScalar y, const SkPaint& paint) |
| 687 { | 687 { |
| 688 AutoLogger logger(this); | 688 AutoLogger logger(this); |
| 689 RefPtr<JSONObject> params = logger.logItemWithParams("drawText"); | 689 JSONObject* params = logger.logItemWithParams("drawText"); |
| 690 params->setString("text", stringForText(text, byteLength, paint)); | 690 params->setString("text", stringForText(text, byteLength, paint)); |
| 691 params->setNumber("x", x); | 691 params->setDouble("x", x); |
| 692 params->setNumber("y", y); | 692 params->setDouble("y", y); |
| 693 params->setObject("paint", objectForSkPaint(paint)); | 693 params->setObject("paint", objectForSkPaint(paint)); |
| 694 this->SkCanvas::onDrawText(text, byteLength, x, y, paint); | 694 this->SkCanvas::onDrawText(text, byteLength, x, y, paint); |
| 695 } | 695 } |
| 696 | 696 |
| 697 void LoggingCanvas::onDrawPosText(const void* text, size_t byteLength, const SkP
oint pos[], const SkPaint& paint) | 697 void LoggingCanvas::onDrawPosText(const void* text, size_t byteLength, const SkP
oint pos[], const SkPaint& paint) |
| 698 { | 698 { |
| 699 AutoLogger logger(this); | 699 AutoLogger logger(this); |
| 700 RefPtr<JSONObject> params = logger.logItemWithParams("drawPosText"); | 700 JSONObject* params = logger.logItemWithParams("drawPosText"); |
| 701 params->setString("text", stringForText(text, byteLength, paint)); | 701 params->setString("text", stringForText(text, byteLength, paint)); |
| 702 size_t pointsCount = paint.countText(text, byteLength); | 702 size_t pointsCount = paint.countText(text, byteLength); |
| 703 params->setArray("pos", arrayForSkPoints(pointsCount, pos)); | 703 params->setArray("pos", arrayForSkPoints(pointsCount, pos)); |
| 704 params->setObject("paint", objectForSkPaint(paint)); | 704 params->setObject("paint", objectForSkPaint(paint)); |
| 705 this->SkCanvas::onDrawPosText(text, byteLength, pos, paint); | 705 this->SkCanvas::onDrawPosText(text, byteLength, pos, paint); |
| 706 } | 706 } |
| 707 | 707 |
| 708 void LoggingCanvas::onDrawPosTextH(const void* text, size_t byteLength, const Sk
Scalar xpos[], SkScalar constY, const SkPaint& paint) | 708 void LoggingCanvas::onDrawPosTextH(const void* text, size_t byteLength, const Sk
Scalar xpos[], SkScalar constY, const SkPaint& paint) |
| 709 { | 709 { |
| 710 AutoLogger logger(this); | 710 AutoLogger logger(this); |
| 711 RefPtr<JSONObject> params = logger.logItemWithParams("drawPosTextH"); | 711 JSONObject* params = logger.logItemWithParams("drawPosTextH"); |
| 712 params->setString("text", stringForText(text, byteLength, paint)); | 712 params->setString("text", stringForText(text, byteLength, paint)); |
| 713 size_t pointsCount = paint.countText(text, byteLength); | 713 size_t pointsCount = paint.countText(text, byteLength); |
| 714 params->setArray("xpos", arrayForSkScalars(pointsCount, xpos)); | 714 params->setArray("xpos", arrayForSkScalars(pointsCount, xpos)); |
| 715 params->setNumber("constY", constY); | 715 params->setDouble("constY", constY); |
| 716 params->setObject("paint", objectForSkPaint(paint)); | 716 params->setObject("paint", objectForSkPaint(paint)); |
| 717 this->SkCanvas::onDrawPosTextH(text, byteLength, xpos, constY, paint); | 717 this->SkCanvas::onDrawPosTextH(text, byteLength, xpos, constY, paint); |
| 718 } | 718 } |
| 719 | 719 |
| 720 void LoggingCanvas::onDrawTextOnPath(const void* text, size_t byteLength, const
SkPath& path, const SkMatrix* matrix, const SkPaint& paint) | 720 void LoggingCanvas::onDrawTextOnPath(const void* text, size_t byteLength, const
SkPath& path, const SkMatrix* matrix, const SkPaint& paint) |
| 721 { | 721 { |
| 722 AutoLogger logger(this); | 722 AutoLogger logger(this); |
| 723 RefPtr<JSONObject> params = logger.logItemWithParams("drawTextOnPath"); | 723 JSONObject* params = logger.logItemWithParams("drawTextOnPath"); |
| 724 params->setString("text", stringForText(text, byteLength, paint)); | 724 params->setString("text", stringForText(text, byteLength, paint)); |
| 725 params->setObject("path", objectForSkPath(path)); | 725 params->setObject("path", objectForSkPath(path)); |
| 726 if (matrix) | 726 if (matrix) |
| 727 params->setArray("matrix", arrayForSkMatrix(*matrix)); | 727 params->setArray("matrix", arrayForSkMatrix(*matrix)); |
| 728 params->setObject("paint", objectForSkPaint(paint)); | 728 params->setObject("paint", objectForSkPaint(paint)); |
| 729 this->SkCanvas::onDrawTextOnPath(text, byteLength, path, matrix, paint); | 729 this->SkCanvas::onDrawTextOnPath(text, byteLength, path, matrix, paint); |
| 730 } | 730 } |
| 731 | 731 |
| 732 void LoggingCanvas::onDrawTextBlob(const SkTextBlob *blob, SkScalar x, SkScalar
y, const SkPaint &paint) | 732 void LoggingCanvas::onDrawTextBlob(const SkTextBlob *blob, SkScalar x, SkScalar
y, const SkPaint &paint) |
| 733 { | 733 { |
| 734 AutoLogger logger(this); | 734 AutoLogger logger(this); |
| 735 RefPtr<JSONObject> params = logger.logItemWithParams("drawTextBlob"); | 735 JSONObject* params = logger.logItemWithParams("drawTextBlob"); |
| 736 params->setNumber("x", x); | 736 params->setDouble("x", x); |
| 737 params->setNumber("y", y); | 737 params->setDouble("y", y); |
| 738 params->setObject("paint", objectForSkPaint(paint)); | 738 params->setObject("paint", objectForSkPaint(paint)); |
| 739 this->SkCanvas::onDrawTextBlob(blob, x, y, paint); | 739 this->SkCanvas::onDrawTextBlob(blob, x, y, paint); |
| 740 } | 740 } |
| 741 | 741 |
| 742 void LoggingCanvas::onClipRect(const SkRect& rect, SkRegion::Op op, ClipEdgeStyl
e style) | 742 void LoggingCanvas::onClipRect(const SkRect& rect, SkRegion::Op op, ClipEdgeStyl
e style) |
| 743 { | 743 { |
| 744 AutoLogger logger(this); | 744 AutoLogger logger(this); |
| 745 RefPtr<JSONObject> params = logger.logItemWithParams("clipRect"); | 745 JSONObject* params = logger.logItemWithParams("clipRect"); |
| 746 params->setObject("rect", objectForSkRect(rect)); | 746 params->setObject("rect", objectForSkRect(rect)); |
| 747 params->setString("SkRegion::Op", regionOpName(op)); | 747 params->setString("SkRegion::Op", regionOpName(op)); |
| 748 params->setBoolean("softClipEdgeStyle", kSoft_ClipEdgeStyle == style); | 748 params->setBoolean("softClipEdgeStyle", kSoft_ClipEdgeStyle == style); |
| 749 this->SkCanvas::onClipRect(rect, op, style); | 749 this->SkCanvas::onClipRect(rect, op, style); |
| 750 } | 750 } |
| 751 | 751 |
| 752 void LoggingCanvas::onClipRRect(const SkRRect& rrect, SkRegion::Op op, ClipEdgeS
tyle style) | 752 void LoggingCanvas::onClipRRect(const SkRRect& rrect, SkRegion::Op op, ClipEdgeS
tyle style) |
| 753 { | 753 { |
| 754 AutoLogger logger(this); | 754 AutoLogger logger(this); |
| 755 RefPtr<JSONObject> params = logger.logItemWithParams("clipRRect"); | 755 JSONObject* params = logger.logItemWithParams("clipRRect"); |
| 756 params->setObject("rrect", objectForSkRRect(rrect)); | 756 params->setObject("rrect", objectForSkRRect(rrect)); |
| 757 params->setString("SkRegion::Op", regionOpName(op)); | 757 params->setString("SkRegion::Op", regionOpName(op)); |
| 758 params->setBoolean("softClipEdgeStyle", kSoft_ClipEdgeStyle == style); | 758 params->setBoolean("softClipEdgeStyle", kSoft_ClipEdgeStyle == style); |
| 759 this->SkCanvas::onClipRRect(rrect, op, style); | 759 this->SkCanvas::onClipRRect(rrect, op, style); |
| 760 } | 760 } |
| 761 | 761 |
| 762 void LoggingCanvas::onClipPath(const SkPath& path, SkRegion::Op op, ClipEdgeStyl
e style) | 762 void LoggingCanvas::onClipPath(const SkPath& path, SkRegion::Op op, ClipEdgeStyl
e style) |
| 763 { | 763 { |
| 764 AutoLogger logger(this); | 764 AutoLogger logger(this); |
| 765 RefPtr<JSONObject> params = logger.logItemWithParams("clipPath"); | 765 JSONObject* params = logger.logItemWithParams("clipPath"); |
| 766 params->setObject("path", objectForSkPath(path)); | 766 params->setObject("path", objectForSkPath(path)); |
| 767 params->setString("SkRegion::Op", regionOpName(op)); | 767 params->setString("SkRegion::Op", regionOpName(op)); |
| 768 params->setBoolean("softClipEdgeStyle", kSoft_ClipEdgeStyle == style); | 768 params->setBoolean("softClipEdgeStyle", kSoft_ClipEdgeStyle == style); |
| 769 this->SkCanvas::onClipPath(path, op, style); | 769 this->SkCanvas::onClipPath(path, op, style); |
| 770 } | 770 } |
| 771 | 771 |
| 772 void LoggingCanvas::onClipRegion(const SkRegion& region, SkRegion::Op op) | 772 void LoggingCanvas::onClipRegion(const SkRegion& region, SkRegion::Op op) |
| 773 { | 773 { |
| 774 AutoLogger logger(this); | 774 AutoLogger logger(this); |
| 775 RefPtr<JSONObject> params = logger.logItemWithParams("clipRegion"); | 775 JSONObject* params = logger.logItemWithParams("clipRegion"); |
| 776 params->setString("op", regionOpName(op)); | 776 params->setString("op", regionOpName(op)); |
| 777 this->SkCanvas::onClipRegion(region, op); | 777 this->SkCanvas::onClipRegion(region, op); |
| 778 } | 778 } |
| 779 | 779 |
| 780 void LoggingCanvas::onDrawPicture(const SkPicture* picture, const SkMatrix* matr
ix, const SkPaint* paint) | 780 void LoggingCanvas::onDrawPicture(const SkPicture* picture, const SkMatrix* matr
ix, const SkPaint* paint) |
| 781 { | 781 { |
| 782 this->unrollDrawPicture(picture, matrix, paint, nullptr); | 782 this->unrollDrawPicture(picture, matrix, paint, nullptr); |
| 783 } | 783 } |
| 784 | 784 |
| 785 void LoggingCanvas::didSetMatrix(const SkMatrix& matrix) | 785 void LoggingCanvas::didSetMatrix(const SkMatrix& matrix) |
| 786 { | 786 { |
| 787 AutoLogger logger(this); | 787 AutoLogger logger(this); |
| 788 RefPtr<JSONObject> params = logger.logItemWithParams("setMatrix"); | 788 JSONObject* params = logger.logItemWithParams("setMatrix"); |
| 789 params->setArray("matrix", arrayForSkMatrix(matrix)); | 789 params->setArray("matrix", arrayForSkMatrix(matrix)); |
| 790 this->SkCanvas::didSetMatrix(matrix); | 790 this->SkCanvas::didSetMatrix(matrix); |
| 791 } | 791 } |
| 792 | 792 |
| 793 void LoggingCanvas::didConcat(const SkMatrix& matrix) | 793 void LoggingCanvas::didConcat(const SkMatrix& matrix) |
| 794 { | 794 { |
| 795 AutoLogger logger(this); | 795 AutoLogger logger(this); |
| 796 RefPtr<JSONObject> params; | 796 JSONObject* params; |
| 797 | 797 |
| 798 switch (matrix.getType()) { | 798 switch (matrix.getType()) { |
| 799 case SkMatrix::kTranslate_Mask: | 799 case SkMatrix::kTranslate_Mask: |
| 800 params = logger.logItemWithParams("translate"); | 800 params = logger.logItemWithParams("translate"); |
| 801 params->setNumber("dx", matrix.getTranslateX()); | 801 params->setDouble("dx", matrix.getTranslateX()); |
| 802 params->setNumber("dy", matrix.getTranslateY()); | 802 params->setDouble("dy", matrix.getTranslateY()); |
| 803 break; | 803 break; |
| 804 | 804 |
| 805 case SkMatrix::kScale_Mask: | 805 case SkMatrix::kScale_Mask: |
| 806 params = logger.logItemWithParams("scale"); | 806 params = logger.logItemWithParams("scale"); |
| 807 params->setNumber("scaleX", matrix.getScaleX()); | 807 params->setDouble("scaleX", matrix.getScaleX()); |
| 808 params->setNumber("scaleY", matrix.getScaleY()); | 808 params->setDouble("scaleY", matrix.getScaleY()); |
| 809 break; | 809 break; |
| 810 | 810 |
| 811 default: | 811 default: |
| 812 params = logger.logItemWithParams("concat"); | 812 params = logger.logItemWithParams("concat"); |
| 813 params->setArray("matrix", arrayForSkMatrix(matrix)); | 813 params->setArray("matrix", arrayForSkMatrix(matrix)); |
| 814 } | 814 } |
| 815 this->SkCanvas::didConcat(matrix); | 815 this->SkCanvas::didConcat(matrix); |
| 816 } | 816 } |
| 817 | 817 |
| 818 void LoggingCanvas::willSave() | 818 void LoggingCanvas::willSave() |
| 819 { | 819 { |
| 820 AutoLogger logger(this); | 820 AutoLogger logger(this); |
| 821 RefPtr<JSONObject> params = logger.logItem("save"); | 821 logger.logItem("save"); |
| 822 this->SkCanvas::willSave(); | 822 this->SkCanvas::willSave(); |
| 823 } | 823 } |
| 824 | 824 |
| 825 SkCanvas::SaveLayerStrategy LoggingCanvas::getSaveLayerStrategy(const SaveLayerR
ec& rec) | 825 SkCanvas::SaveLayerStrategy LoggingCanvas::getSaveLayerStrategy(const SaveLayerR
ec& rec) |
| 826 { | 826 { |
| 827 AutoLogger logger(this); | 827 AutoLogger logger(this); |
| 828 RefPtr<JSONObject> params = logger.logItemWithParams("saveLayer"); | 828 JSONObject* params = logger.logItemWithParams("saveLayer"); |
| 829 if (rec.fBounds) | 829 if (rec.fBounds) |
| 830 params->setObject("bounds", objectForSkRect(*rec.fBounds)); | 830 params->setObject("bounds", objectForSkRect(*rec.fBounds)); |
| 831 if (rec.fPaint) | 831 if (rec.fPaint) |
| 832 params->setObject("paint", objectForSkPaint(*rec.fPaint)); | 832 params->setObject("paint", objectForSkPaint(*rec.fPaint)); |
| 833 params->setString("saveFlags", saveLayerFlagsToString(rec.fSaveLayerFlags)); | 833 params->setString("saveFlags", saveLayerFlagsToString(rec.fSaveLayerFlags)); |
| 834 return this->SkCanvas::getSaveLayerStrategy(rec); | 834 return this->SkCanvas::getSaveLayerStrategy(rec); |
| 835 } | 835 } |
| 836 | 836 |
| 837 void LoggingCanvas::willRestore() | 837 void LoggingCanvas::willRestore() |
| 838 { | 838 { |
| 839 AutoLogger logger(this); | 839 AutoLogger logger(this); |
| 840 logger.logItem("restore"); | 840 logger.logItem("restore"); |
| 841 this->SkCanvas::willRestore(); | 841 this->SkCanvas::willRestore(); |
| 842 } | 842 } |
| 843 | 843 |
| 844 PassRefPtr<JSONArray> LoggingCanvas::log() | 844 std::unique_ptr<JSONArray> LoggingCanvas::log() |
| 845 { | 845 { |
| 846 return m_log; | 846 return JSONArray::cast(m_log->clone()); |
| 847 } | 847 } |
| 848 | 848 |
| 849 #ifndef NDEBUG | 849 #ifndef NDEBUG |
| 850 String pictureAsDebugString(const SkPicture* picture) | 850 String pictureAsDebugString(const SkPicture* picture) |
| 851 { | 851 { |
| 852 const SkIRect bounds = picture->cullRect().roundOut(); | 852 const SkIRect bounds = picture->cullRect().roundOut(); |
| 853 LoggingCanvas canvas(bounds.width(), bounds.height()); | 853 LoggingCanvas canvas(bounds.width(), bounds.height()); |
| 854 picture->playback(&canvas); | 854 picture->playback(&canvas); |
| 855 RefPtr<JSONObject> pictureAsJSON = JSONObject::create(); | 855 std::unique_ptr<JSONObject> pictureAsJSON = JSONObject::create(); |
| 856 pictureAsJSON->setObject("cullRect", objectForSkRect(picture->cullRect())); | 856 pictureAsJSON->setObject("cullRect", objectForSkRect(picture->cullRect())); |
| 857 pictureAsJSON->setArray("operations", canvas.log()); | 857 pictureAsJSON->setArray("operations", canvas.log()); |
| 858 RefPtr<JSONArray> operationsInJson = canvas.log(); | |
| 859 return pictureAsJSON->toPrettyJSONString(); | 858 return pictureAsJSON->toPrettyJSONString(); |
| 860 } | 859 } |
| 861 | 860 |
| 862 void showSkPicture(const SkPicture* picture) | 861 void showSkPicture(const SkPicture* picture) |
| 863 { | 862 { |
| 864 WTFLogAlways("%s\n", pictureAsDebugString(picture).utf8().data()); | 863 WTFLogAlways("%s\n", pictureAsDebugString(picture).utf8().data()); |
| 865 } | 864 } |
| 866 #endif | 865 #endif |
| 867 | 866 |
| 868 } // namespace blink | 867 } // namespace blink |
| OLD | NEW |