| Index: sky/engine/platform/graphics/LoggingCanvas.cpp
|
| diff --git a/sky/engine/platform/graphics/LoggingCanvas.cpp b/sky/engine/platform/graphics/LoggingCanvas.cpp
|
| deleted file mode 100644
|
| index 8cb941fe45fd654eb3f7bce035545c95bec9924f..0000000000000000000000000000000000000000
|
| --- a/sky/engine/platform/graphics/LoggingCanvas.cpp
|
| +++ /dev/null
|
| @@ -1,845 +0,0 @@
|
| -/*
|
| - * Copyright (C) 2013 Google Inc. All rights reserved.
|
| - *
|
| - * Redistribution and use in source and binary forms, with or without
|
| - * modification, are permitted provided that the following conditions are
|
| - * met:
|
| - *
|
| - * * Redistributions of source code must retain the above copyright
|
| - * notice, this list of conditions and the following disclaimer.
|
| - * * Redistributions in binary form must reproduce the above
|
| - * copyright notice, this list of conditions and the following disclaimer
|
| - * in the documentation and/or other materials provided with the
|
| - * distribution.
|
| - * * Neither the name of Google Inc. nor the names of its
|
| - * contributors may be used to endorse or promote products derived from
|
| - * this software without specific prior written permission.
|
| - *
|
| - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
| - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
| - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
| - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
| - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
| - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
| - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
| - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
| - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
| - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
| - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| - */
|
| -
|
| -#include "sky/engine/config.h"
|
| -#include "sky/engine/platform/graphics/LoggingCanvas.h"
|
| -
|
| -#include "platform/image-encoders/skia/PNGImageEncoder.h"
|
| -#include "sky/engine/wtf/HexNumber.h"
|
| -#include "sky/engine/wtf/text/Base64.h"
|
| -#include "sky/engine/wtf/text/TextEncoding.h"
|
| -#include "third_party/skia/include/core/SkPicture.h"
|
| -
|
| -namespace blink {
|
| -
|
| -class AutoLogger {
|
| -public:
|
| - explicit AutoLogger(LoggingCanvas*);
|
| - PassRefPtr<JSONObject> logItem(const String& name);
|
| - PassRefPtr<JSONObject> logItemWithParams(const String& name);
|
| - ~AutoLogger();
|
| -
|
| -private:
|
| - LoggingCanvas* m_canvas;
|
| - RefPtr<JSONObject> m_logItem;
|
| -};
|
| -
|
| -AutoLogger::AutoLogger(LoggingCanvas* loggingCanvas) : m_canvas(loggingCanvas)
|
| -{
|
| - loggingCanvas->m_depthCount++;
|
| -}
|
| -
|
| -PassRefPtr<JSONObject> AutoLogger::logItem(const String& name)
|
| -{
|
| - RefPtr<JSONObject> item = JSONObject::create();
|
| - item->setString("method", name);
|
| - m_logItem = item;
|
| - return item.release();
|
| -}
|
| -
|
| -PassRefPtr<JSONObject> AutoLogger::logItemWithParams(const String& name)
|
| -{
|
| - RefPtr<JSONObject> item = logItem(name);
|
| - RefPtr<JSONObject> params = JSONObject::create();
|
| - item->setObject("params", params);
|
| - return params.release();
|
| -}
|
| -
|
| -AutoLogger::~AutoLogger()
|
| -{
|
| - m_canvas->m_depthCount--;
|
| - if (!m_canvas->m_depthCount)
|
| - m_canvas->m_log->pushObject(m_logItem);
|
| -}
|
| -
|
| -LoggingCanvas::LoggingCanvas(int width, int height) : InterceptingCanvas(width, height)
|
| -{
|
| - m_log = JSONArray::create();
|
| -}
|
| -
|
| -void LoggingCanvas::drawPaint(const SkPaint& paint)
|
| -{
|
| - AutoLogger logger(this);
|
| - logger.logItemWithParams("drawPaint")->setObject("paint", objectForSkPaint(paint));
|
| - this->SkCanvas::drawPaint(paint);
|
| -}
|
| -
|
| -void LoggingCanvas::drawPoints(PointMode mode, size_t count, const SkPoint pts[], const SkPaint& paint)
|
| -{
|
| - AutoLogger logger(this);
|
| - RefPtr<JSONObject> params = logger.logItemWithParams("drawPoints");
|
| - params->setString("pointMode", pointModeName(mode));
|
| - params->setArray("points", arrayForSkPoints(count, pts));
|
| - params->setObject("paint", objectForSkPaint(paint));
|
| - this->SkCanvas::drawPoints(mode, count, pts, paint);
|
| -}
|
| -
|
| -void LoggingCanvas::drawRect(const SkRect& rect, const SkPaint& paint)
|
| -{
|
| - AutoLogger logger(this);
|
| - RefPtr<JSONObject> params = logger.logItemWithParams("drawRect");
|
| - params->setObject("rect", objectForSkRect(rect));
|
| - params->setObject("paint", objectForSkPaint(paint));
|
| - this->SkCanvas::drawRect(rect, paint);
|
| -}
|
| -
|
| -void LoggingCanvas::drawOval(const SkRect& oval, const SkPaint& paint)
|
| -{
|
| - AutoLogger logger(this);
|
| - RefPtr<JSONObject> params = logger.logItemWithParams("drawOval");
|
| - params->setObject("oval", objectForSkRect(oval));
|
| - params->setObject("paint", objectForSkPaint(paint));
|
| - this->SkCanvas::drawOval(oval, paint);
|
| -}
|
| -
|
| -void LoggingCanvas::drawRRect(const SkRRect& rrect, const SkPaint& paint)
|
| -{
|
| - AutoLogger logger(this);
|
| - RefPtr<JSONObject> params = logger.logItemWithParams("drawRRect");
|
| - params->setObject("rrect", objectForSkRRect(rrect));
|
| - params->setObject("paint", objectForSkPaint(paint));
|
| - this->SkCanvas::drawRRect(rrect, paint);
|
| -}
|
| -
|
| -void LoggingCanvas::drawPath(const SkPath& path, const SkPaint& paint)
|
| -{
|
| - AutoLogger logger(this);
|
| - RefPtr<JSONObject> params = logger.logItemWithParams("drawPath");
|
| - params->setObject("path", objectForSkPath(path));
|
| - params->setObject("paint", objectForSkPaint(paint));
|
| - this->SkCanvas::drawPath(path, paint);
|
| -}
|
| -
|
| -void LoggingCanvas::drawBitmap(const SkBitmap& bitmap, SkScalar left, SkScalar top, const SkPaint* paint)
|
| -{
|
| - AutoLogger logger(this);
|
| - RefPtr<JSONObject> params = logger.logItemWithParams("drawBitmap");
|
| - params->setNumber("left", left);
|
| - params->setNumber("top", top);
|
| - params->setObject("bitmap", objectForSkBitmap(bitmap));
|
| - params->setObject("paint", objectForSkPaint(*paint));
|
| - this->SkCanvas::drawBitmap(bitmap, left, top, paint);
|
| -}
|
| -
|
| -void LoggingCanvas::drawBitmapRectToRect(const SkBitmap& bitmap, const SkRect* src, const SkRect& dst, const SkPaint* paint, DrawBitmapRectFlags flags)
|
| -{
|
| - AutoLogger logger(this);
|
| - RefPtr<JSONObject> params = logger.logItemWithParams("drawBitmapRectToRect");
|
| - params->setObject("bitmap", objectForSkBitmap(bitmap));
|
| - params->setObject("src", objectForSkRect(*src));
|
| - params->setObject("dst", objectForSkRect(dst));
|
| - params->setObject("paint", objectForSkPaint(*paint));
|
| - params->setNumber("flags", flags);
|
| - this->SkCanvas::drawBitmapRectToRect(bitmap, src, dst, paint, flags);
|
| -}
|
| -
|
| -void LoggingCanvas::drawBitmapNine(const SkBitmap& bitmap, const SkIRect& center, const SkRect& dst, const SkPaint* paint)
|
| -{
|
| - AutoLogger logger(this);
|
| - RefPtr<JSONObject> params = logger.logItemWithParams("drawBitmapNine");
|
| - params->setObject("bitmap", objectForSkBitmap(bitmap));
|
| - params->setObject("center", objectForSkIRect(center));
|
| - params->setObject("dst", objectForSkRect(dst));
|
| - params->setObject("paint", objectForSkPaint(*paint));
|
| - this->SkCanvas::drawBitmapNine(bitmap, center, dst, paint);
|
| -}
|
| -
|
| -void LoggingCanvas::drawSprite(const SkBitmap& bitmap, int left, int top, const SkPaint* paint)
|
| -{
|
| - AutoLogger logger(this);
|
| - RefPtr<JSONObject> params = logger.logItemWithParams("drawSprite");
|
| - params->setObject("bitmap", objectForSkBitmap(bitmap));
|
| - params->setNumber("left", left);
|
| - params->setNumber("top", top);
|
| - params->setObject("paint", objectForSkPaint(*paint));
|
| - this->SkCanvas::drawSprite(bitmap, left, top, paint);
|
| -}
|
| -
|
| -void LoggingCanvas::drawVertices(VertexMode vmode, int vertexCount, const SkPoint vertices[], const SkPoint texs[], const SkColor colors[], SkXfermode* xmode,
|
| - const uint16_t indices[], int indexCount, const SkPaint& paint)
|
| -{
|
| - AutoLogger logger(this);
|
| - RefPtr<JSONObject> params = logger.logItemWithParams("drawVertices");
|
| - params->setObject("paint", objectForSkPaint(paint));
|
| - this->SkCanvas::drawVertices(vmode, vertexCount, vertices, texs, colors, xmode, indices, indexCount, paint);
|
| -}
|
| -
|
| -void LoggingCanvas::drawData(const void* data, size_t length)
|
| -{
|
| - AutoLogger logger(this);
|
| - RefPtr<JSONObject> params = logger.logItemWithParams("drawData");
|
| - params->setNumber("length", length);
|
| - this->SkCanvas::drawData(data, length);
|
| -}
|
| -
|
| -void LoggingCanvas::beginCommentGroup(const char* description)
|
| -{
|
| - AutoLogger logger(this);
|
| - RefPtr<JSONObject> params = logger.logItemWithParams("beginCommentGroup");
|
| - params->setString("description", description);
|
| - this->SkCanvas::beginCommentGroup(description);
|
| -}
|
| -
|
| -void LoggingCanvas::addComment(const char* keyword, const char* value)
|
| -{
|
| - AutoLogger logger(this);
|
| - RefPtr<JSONObject> params = logger.logItemWithParams("addComment");
|
| - params->setString("key", keyword);
|
| - params->setString("value", value);
|
| - this->SkCanvas::addComment(keyword, value);
|
| -}
|
| -
|
| -void LoggingCanvas::endCommentGroup()
|
| -{
|
| - AutoLogger logger(this);
|
| - logger.logItem("endCommentGroup");
|
| - this->SkCanvas::endCommentGroup();
|
| -}
|
| -
|
| -void LoggingCanvas::onDrawDRRect(const SkRRect& outer, const SkRRect& inner, const SkPaint& paint)
|
| -{
|
| - AutoLogger logger(this);
|
| - RefPtr<JSONObject> params = logger.logItemWithParams("drawDRRect");
|
| - params->setObject("outer", objectForSkRRect(outer));
|
| - params->setObject("inner", objectForSkRRect(inner));
|
| - params->setObject("paint", objectForSkPaint(paint));
|
| - this->SkCanvas::onDrawDRRect(outer, inner, paint);
|
| -}
|
| -
|
| -void LoggingCanvas::onDrawText(const void* text, size_t byteLength, SkScalar x, SkScalar y, const SkPaint& paint)
|
| -{
|
| - AutoLogger logger(this);
|
| - RefPtr<JSONObject> params = logger.logItemWithParams("drawText");
|
| - params->setString("text", stringForText(text, byteLength, paint));
|
| - params->setNumber("x", x);
|
| - params->setNumber("y", y);
|
| - params->setObject("paint", objectForSkPaint(paint));
|
| - this->SkCanvas::onDrawText(text, byteLength, x, y, paint);
|
| -}
|
| -
|
| -void LoggingCanvas::onDrawPosText(const void* text, size_t byteLength, const SkPoint pos[], const SkPaint& paint)
|
| -{
|
| - AutoLogger logger(this);
|
| - RefPtr<JSONObject> params = logger.logItemWithParams("drawPosText");
|
| - params->setString("text", stringForText(text, byteLength, paint));
|
| - size_t pointsCount = paint.countText(text, byteLength);
|
| - params->setArray("pos", arrayForSkPoints(pointsCount, pos));
|
| - params->setObject("paint", objectForSkPaint(paint));
|
| - this->SkCanvas::onDrawPosText(text, byteLength, pos, paint);
|
| -}
|
| -
|
| -void LoggingCanvas::onDrawPosTextH(const void* text, size_t byteLength, const SkScalar xpos[], SkScalar constY, const SkPaint& paint)
|
| -{
|
| - AutoLogger logger(this);
|
| - RefPtr<JSONObject> params = logger.logItemWithParams("drawPosTextH");
|
| - params->setString("text", stringForText(text, byteLength, paint));
|
| - size_t pointsCount = paint.countText(text, byteLength);
|
| - params->setArray("xpos", arrayForSkScalars(pointsCount, xpos));
|
| - params->setNumber("constY", constY);
|
| - params->setObject("paint", objectForSkPaint(paint));
|
| - this->SkCanvas::onDrawPosTextH(text, byteLength, xpos, constY, paint);
|
| -}
|
| -
|
| -void LoggingCanvas::onDrawTextOnPath(const void* text, size_t byteLength, const SkPath& path, const SkMatrix* matrix, const SkPaint& paint)
|
| -{
|
| - AutoLogger logger(this);
|
| - RefPtr<JSONObject> params = logger.logItemWithParams("drawTextOnPath");
|
| - params->setString("text", stringForText(text, byteLength, paint));
|
| - params->setObject("path", objectForSkPath(path));
|
| - params->setArray("matrix", arrayForSkMatrix(*matrix));
|
| - params->setObject("paint", objectForSkPaint(paint));
|
| - this->SkCanvas::onDrawTextOnPath(text, byteLength, path, matrix, paint);
|
| -}
|
| -
|
| -void LoggingCanvas::onClipRect(const SkRect& rect, SkRegion::Op op, ClipEdgeStyle style)
|
| -{
|
| - AutoLogger logger(this);
|
| - RefPtr<JSONObject> params = logger.logItemWithParams("clipRect");
|
| - params->setObject("rect", objectForSkRect(rect));
|
| - params->setString("SkRegion::Op", regionOpName(op));
|
| - params->setBoolean("softClipEdgeStyle", kSoft_ClipEdgeStyle == style);
|
| - this->SkCanvas::onClipRect(rect, op, style);
|
| -}
|
| -
|
| -void LoggingCanvas::onClipRRect(const SkRRect& rrect, SkRegion::Op op, ClipEdgeStyle style)
|
| -{
|
| - AutoLogger logger(this);
|
| - RefPtr<JSONObject> params = logger.logItemWithParams("clipRRect");
|
| - params->setObject("rrect", objectForSkRRect(rrect));
|
| - params->setString("SkRegion::Op", regionOpName(op));
|
| - params->setBoolean("softClipEdgeStyle", kSoft_ClipEdgeStyle == style);
|
| - this->SkCanvas::onClipRRect(rrect, op, style);
|
| -}
|
| -
|
| -void LoggingCanvas::onClipPath(const SkPath& path, SkRegion::Op op, ClipEdgeStyle style)
|
| -{
|
| - AutoLogger logger(this);
|
| - RefPtr<JSONObject> params = logger.logItemWithParams("clipPath");
|
| - params->setObject("path", objectForSkPath(path));
|
| - params->setString("SkRegion::Op", regionOpName(op));
|
| - params->setBoolean("softClipEdgeStyle", kSoft_ClipEdgeStyle == style);
|
| - this->SkCanvas::onClipPath(path, op, style);
|
| -}
|
| -
|
| -void LoggingCanvas::onClipRegion(const SkRegion& region, SkRegion::Op op)
|
| -{
|
| - AutoLogger logger(this);
|
| - RefPtr<JSONObject> params = logger.logItemWithParams("clipRegion");
|
| - params->setString("op", regionOpName(op));
|
| - this->SkCanvas::onClipRegion(region, op);
|
| -}
|
| -
|
| -void LoggingCanvas::onDrawPicture(const SkPicture* picture, const SkMatrix* matrix, const SkPaint* paint)
|
| -{
|
| - AutoLogger logger(this);
|
| - logger.logItemWithParams("drawPicture")->setObject("picture", objectForSkPicture(*picture));
|
| - this->SkCanvas::onDrawPicture(picture, matrix, paint);
|
| -}
|
| -
|
| -void LoggingCanvas::didSetMatrix(const SkMatrix& matrix)
|
| -{
|
| - AutoLogger logger(this);
|
| - RefPtr<JSONObject> params = logger.logItemWithParams("setMatrix");
|
| - params->setArray("matrix", arrayForSkMatrix(matrix));
|
| - this->SkCanvas::didSetMatrix(matrix);
|
| -}
|
| -
|
| -void LoggingCanvas::didConcat(const SkMatrix& matrix)
|
| -{
|
| - AutoLogger logger(this);
|
| - RefPtr<JSONObject> params;
|
| -
|
| - switch (matrix.getType()) {
|
| - case SkMatrix::kTranslate_Mask:
|
| - params = logger.logItemWithParams("translate");
|
| - params->setNumber("dx", matrix.getTranslateX());
|
| - params->setNumber("dy", matrix.getTranslateY());
|
| - break;
|
| -
|
| - case SkMatrix::kScale_Mask:
|
| - params = logger.logItemWithParams("scale");
|
| - params->setNumber("scaleX", matrix.getScaleX());
|
| - params->setNumber("scaleY", matrix.getScaleY());
|
| - break;
|
| -
|
| - default:
|
| - params = logger.logItemWithParams("concat");
|
| - params->setArray("matrix", arrayForSkMatrix(matrix));
|
| - }
|
| - this->SkCanvas::didConcat(matrix);
|
| -}
|
| -
|
| -void LoggingCanvas::willSave()
|
| -{
|
| - AutoLogger logger(this);
|
| - RefPtr<JSONObject> params = logger.logItem("save");
|
| - this->SkCanvas::willSave();
|
| -}
|
| -
|
| -SkCanvas::SaveLayerStrategy LoggingCanvas::willSaveLayer(const SkRect* bounds, const SkPaint* paint, SaveFlags flags)
|
| -{
|
| - AutoLogger logger(this);
|
| - RefPtr<JSONObject> params = logger.logItemWithParams("saveLayer");
|
| - if (bounds)
|
| - params->setObject("bounds", objectForSkRect(*bounds));
|
| - params->setObject("paint", objectForSkPaint(*paint));
|
| - params->setString("saveFlags", saveFlagsToString(flags));
|
| - return this->SkCanvas::willSaveLayer(bounds, paint, flags);
|
| -}
|
| -
|
| -void LoggingCanvas::willRestore()
|
| -{
|
| - AutoLogger logger(this);
|
| - logger.logItem("restore");
|
| - this->SkCanvas::willRestore();
|
| -}
|
| -
|
| -PassRefPtr<JSONArray> LoggingCanvas::log()
|
| -{
|
| - return m_log;
|
| -}
|
| -
|
| -PassRefPtr<JSONObject> LoggingCanvas::objectForSkRect(const SkRect& rect)
|
| -{
|
| - RefPtr<JSONObject> rectItem = JSONObject::create();
|
| - rectItem->setNumber("left", rect.left());
|
| - rectItem->setNumber("top", rect.top());
|
| - rectItem->setNumber("right", rect.right());
|
| - rectItem->setNumber("bottom", rect.bottom());
|
| - return rectItem.release();
|
| -}
|
| -
|
| -PassRefPtr<JSONObject> LoggingCanvas::objectForSkIRect(const SkIRect& rect)
|
| -{
|
| - RefPtr<JSONObject> rectItem = JSONObject::create();
|
| - rectItem->setNumber("left", rect.left());
|
| - rectItem->setNumber("top", rect.top());
|
| - rectItem->setNumber("right", rect.right());
|
| - rectItem->setNumber("bottom", rect.bottom());
|
| - return rectItem.release();
|
| -}
|
| -
|
| -String LoggingCanvas::pointModeName(PointMode mode)
|
| -{
|
| - switch (mode) {
|
| - case SkCanvas::kPoints_PointMode: return "Points";
|
| - case SkCanvas::kLines_PointMode: return "Lines";
|
| - case SkCanvas::kPolygon_PointMode: return "Polygon";
|
| - default:
|
| - ASSERT_NOT_REACHED();
|
| - return "?";
|
| - };
|
| -}
|
| -
|
| -PassRefPtr<JSONObject> LoggingCanvas::objectForSkPoint(const SkPoint& point)
|
| -{
|
| - RefPtr<JSONObject> pointItem = JSONObject::create();
|
| - pointItem->setNumber("x", point.x());
|
| - pointItem->setNumber("y", point.y());
|
| - return pointItem.release();
|
| -}
|
| -
|
| -PassRefPtr<JSONArray> LoggingCanvas::arrayForSkPoints(size_t count, const SkPoint points[])
|
| -{
|
| - RefPtr<JSONArray> pointsArrayItem = JSONArray::create();
|
| - for (size_t i = 0; i < count; ++i)
|
| - pointsArrayItem->pushObject(objectForSkPoint(points[i]));
|
| - return pointsArrayItem.release();
|
| -}
|
| -
|
| -PassRefPtr<JSONObject> LoggingCanvas::objectForSkPicture(const SkPicture& picture)
|
| -{
|
| - const SkIRect bounds = picture.cullRect().roundOut();
|
| - RefPtr<JSONObject> pictureItem = JSONObject::create();
|
| - pictureItem->setNumber("width", bounds.width());
|
| - pictureItem->setNumber("height", bounds.height());
|
| - return pictureItem.release();
|
| -}
|
| -
|
| -PassRefPtr<JSONObject> LoggingCanvas::objectForRadius(const SkRRect& rrect, SkRRect::Corner corner)
|
| -{
|
| - RefPtr<JSONObject> radiusItem = JSONObject::create();
|
| - SkVector radius = rrect.radii(corner);
|
| - radiusItem->setNumber("xRadius", radius.x());
|
| - radiusItem->setNumber("yRadius", radius.y());
|
| - return radiusItem.release();
|
| -}
|
| -
|
| -String LoggingCanvas::rrectTypeName(SkRRect::Type type)
|
| -{
|
| - switch (type) {
|
| - case SkRRect::kEmpty_Type: return "Empty";
|
| - case SkRRect::kRect_Type: return "Rect";
|
| - case SkRRect::kOval_Type: return "Oval";
|
| - case SkRRect::kSimple_Type: return "Simple";
|
| - case SkRRect::kNinePatch_Type: return "Nine-patch";
|
| - case SkRRect::kComplex_Type: return "Complex";
|
| - default:
|
| - ASSERT_NOT_REACHED();
|
| - return "?";
|
| - };
|
| -}
|
| -
|
| -String LoggingCanvas::radiusName(SkRRect::Corner corner)
|
| -{
|
| - switch (corner) {
|
| - case SkRRect::kUpperLeft_Corner: return "upperLeftRadius";
|
| - case SkRRect::kUpperRight_Corner: return "upperRightRadius";
|
| - case SkRRect::kLowerRight_Corner: return "lowerRightRadius";
|
| - case SkRRect::kLowerLeft_Corner: return "lowerLeftRadius";
|
| - default:
|
| - ASSERT_NOT_REACHED();
|
| - return "?";
|
| - }
|
| -}
|
| -
|
| -PassRefPtr<JSONObject> LoggingCanvas::objectForSkRRect(const SkRRect& rrect)
|
| -{
|
| - RefPtr<JSONObject> rrectItem = JSONObject::create();
|
| - rrectItem->setString("type", rrectTypeName(rrect.type()));
|
| - rrectItem->setNumber("left", rrect.rect().left());
|
| - rrectItem->setNumber("top", rrect.rect().top());
|
| - rrectItem->setNumber("right", rrect.rect().right());
|
| - rrectItem->setNumber("bottom", rrect.rect().bottom());
|
| - for (int i = 0; i < 4; ++i)
|
| - rrectItem->setObject(radiusName((SkRRect::Corner) i), objectForRadius(rrect, (SkRRect::Corner) i));
|
| - return rrectItem.release();
|
| -}
|
| -
|
| -String LoggingCanvas::fillTypeName(SkPath::FillType type)
|
| -{
|
| - switch (type) {
|
| - case SkPath::kWinding_FillType: return "Winding";
|
| - case SkPath::kEvenOdd_FillType: return "EvenOdd";
|
| - case SkPath::kInverseWinding_FillType: return "InverseWinding";
|
| - case SkPath::kInverseEvenOdd_FillType: return "InverseEvenOdd";
|
| - default:
|
| - ASSERT_NOT_REACHED();
|
| - return "?";
|
| - };
|
| -}
|
| -
|
| -String LoggingCanvas::convexityName(SkPath::Convexity convexity)
|
| -{
|
| - switch (convexity) {
|
| - case SkPath::kUnknown_Convexity: return "Unknown";
|
| - case SkPath::kConvex_Convexity: return "Convex";
|
| - case SkPath::kConcave_Convexity: return "Concave";
|
| - default:
|
| - ASSERT_NOT_REACHED();
|
| - return "?";
|
| - };
|
| -}
|
| -
|
| -String LoggingCanvas::verbName(SkPath::Verb verb)
|
| -{
|
| - switch (verb) {
|
| - case SkPath::kMove_Verb: return "Move";
|
| - case SkPath::kLine_Verb: return "Line";
|
| - case SkPath::kQuad_Verb: return "Quad";
|
| - case SkPath::kConic_Verb: return "Conic";
|
| - case SkPath::kCubic_Verb: return "Cubic";
|
| - case SkPath::kClose_Verb: return "Close";
|
| - case SkPath::kDone_Verb: return "Done";
|
| - default:
|
| - ASSERT_NOT_REACHED();
|
| - return "?";
|
| - };
|
| -}
|
| -
|
| -LoggingCanvas::VerbParams LoggingCanvas::segmentParams(SkPath::Verb verb)
|
| -{
|
| - switch (verb) {
|
| - case SkPath::kMove_Verb: return VerbParams("Move", 1, 0);
|
| - case SkPath::kLine_Verb: return VerbParams("Line", 1, 1);
|
| - case SkPath::kQuad_Verb: return VerbParams("Quad", 2, 1);
|
| - case SkPath::kConic_Verb: return VerbParams("Conic", 2, 1);
|
| - case SkPath::kCubic_Verb: return VerbParams("Cubic", 3, 1);
|
| - case SkPath::kClose_Verb: return VerbParams("Close", 0, 0);
|
| - case SkPath::kDone_Verb: return VerbParams("Done", 0, 0);
|
| - default:
|
| - ASSERT_NOT_REACHED();
|
| - return VerbParams("?", 0, 0);
|
| - };
|
| -}
|
| -
|
| -PassRefPtr<JSONObject> LoggingCanvas::objectForSkPath(const SkPath& path)
|
| -{
|
| - RefPtr<JSONObject> pathItem = JSONObject::create();
|
| - pathItem->setString("fillType", fillTypeName(path.getFillType()));
|
| - pathItem->setString("convexity", convexityName(path.getConvexity()));
|
| - pathItem->setBoolean("isRect", path.isRect(0));
|
| - SkPath::Iter iter(path, false);
|
| - SkPoint points[4];
|
| - RefPtr<JSONArray> pathPointsArray = JSONArray::create();
|
| - for (SkPath::Verb verb = iter.next(points, false); verb != SkPath::kDone_Verb; verb = iter.next(points, false)) {
|
| - VerbParams verbParams = segmentParams(verb);
|
| - RefPtr<JSONObject> pathPointItem = JSONObject::create();
|
| - pathPointItem->setString("verb", verbParams.name);
|
| - ASSERT(verbParams.pointCount + verbParams.pointOffset <= WTF_ARRAY_LENGTH(points));
|
| - pathPointItem->setArray("points", arrayForSkPoints(verbParams.pointCount, points + verbParams.pointOffset));
|
| - if (SkPath::kConic_Verb == verb)
|
| - pathPointItem->setNumber("conicWeight", iter.conicWeight());
|
| - pathPointsArray->pushObject(pathPointItem);
|
| - }
|
| - pathItem->setArray("pathPoints", pathPointsArray);
|
| - pathItem->setObject("bounds", objectForSkRect(path.getBounds()));
|
| - return pathItem.release();
|
| -}
|
| -
|
| -String LoggingCanvas::colorTypeName(SkColorType colorType)
|
| -{
|
| - switch (colorType) {
|
| - case kUnknown_SkColorType: return "None";
|
| - case kAlpha_8_SkColorType: return "A8";
|
| - case kIndex_8_SkColorType: return "Index8";
|
| - case kRGB_565_SkColorType: return "RGB565";
|
| - case kARGB_4444_SkColorType: return "ARGB4444";
|
| - case kN32_SkColorType: return "ARGB8888";
|
| - default:
|
| - ASSERT_NOT_REACHED();
|
| - return "?";
|
| - };
|
| -}
|
| -
|
| -PassRefPtr<JSONObject> LoggingCanvas::objectForBitmapData(const SkBitmap& bitmap)
|
| -{
|
| - RefPtr<JSONObject> dataItem = JSONObject::create();
|
| - Vector<unsigned char> output;
|
| - PNGImageEncoder::encode(bitmap, &output);
|
| - dataItem->setString("base64", WTF::base64Encode(reinterpret_cast<char*>(output.data()), output.size()));
|
| - dataItem->setString("mimeType", "image/png");
|
| - return dataItem.release();
|
| -}
|
| -
|
| -PassRefPtr<JSONObject> LoggingCanvas::objectForSkBitmap(const SkBitmap& bitmap)
|
| -{
|
| - RefPtr<JSONObject> bitmapItem = JSONObject::create();
|
| - bitmapItem->setNumber("width", bitmap.width());
|
| - bitmapItem->setNumber("height", bitmap.height());
|
| - bitmapItem->setString("config", colorTypeName(bitmap.colorType()));
|
| - bitmapItem->setBoolean("opaque", bitmap.isOpaque());
|
| - bitmapItem->setBoolean("immutable", bitmap.isImmutable());
|
| - bitmapItem->setBoolean("volatile", bitmap.isVolatile());
|
| - bitmapItem->setNumber("genID", bitmap.getGenerationID());
|
| - bitmapItem->setObject("data", objectForBitmapData(bitmap));
|
| - return bitmapItem.release();
|
| -}
|
| -
|
| -PassRefPtr<JSONObject> LoggingCanvas::objectForSkShader(const SkShader& shader)
|
| -{
|
| - RefPtr<JSONObject> shaderItem = JSONObject::create();
|
| - const SkMatrix localMatrix = shader.getLocalMatrix();
|
| - if (!localMatrix.isIdentity())
|
| - shaderItem->setArray("localMatrix", arrayForSkMatrix(localMatrix));
|
| - return shaderItem.release();
|
| -}
|
| -
|
| -String LoggingCanvas::stringForSkColor(const SkColor& color)
|
| -{
|
| - String colorString = "#";
|
| - appendUnsignedAsHex(color, colorString);
|
| - return colorString;
|
| -}
|
| -
|
| -void LoggingCanvas::appendFlagToString(String* flagsString, bool isSet, const String& name)
|
| -{
|
| - if (!isSet)
|
| - return;
|
| - if (flagsString->length())
|
| - flagsString->append("|");
|
| - flagsString->append(name);
|
| -}
|
| -
|
| -String LoggingCanvas::stringForSkPaintFlags(const SkPaint& paint)
|
| -{
|
| - if (!paint.getFlags())
|
| - return "none";
|
| - String flagsString = "";
|
| - appendFlagToString(&flagsString, paint.isAntiAlias(), "AntiAlias");
|
| - appendFlagToString(&flagsString, paint.isDither(), "Dither");
|
| - appendFlagToString(&flagsString, paint.isUnderlineText(), "UnderlinText");
|
| - appendFlagToString(&flagsString, paint.isStrikeThruText(), "StrikeThruText");
|
| - appendFlagToString(&flagsString, paint.isFakeBoldText(), "FakeBoldText");
|
| - appendFlagToString(&flagsString, paint.isLinearText(), "LinearText");
|
| - appendFlagToString(&flagsString, paint.isSubpixelText(), "SubpixelText");
|
| - appendFlagToString(&flagsString, paint.isDevKernText(), "DevKernText");
|
| - appendFlagToString(&flagsString, paint.isLCDRenderText(), "LCDRenderText");
|
| - appendFlagToString(&flagsString, paint.isEmbeddedBitmapText(), "EmbeddedBitmapText");
|
| - appendFlagToString(&flagsString, paint.isAutohinted(), "Autohinted");
|
| - appendFlagToString(&flagsString, paint.isVerticalText(), "VerticalText");
|
| - appendFlagToString(&flagsString, paint.getFlags() & SkPaint::kGenA8FromLCD_Flag, "GenA8FromLCD");
|
| - return flagsString;
|
| -}
|
| -
|
| -String LoggingCanvas::filterLevelName(SkPaint::FilterLevel filterLevel)
|
| -{
|
| - switch (filterLevel) {
|
| - case SkPaint::kNone_FilterLevel: return "None";
|
| - case SkPaint::kLow_FilterLevel: return "Low";
|
| - case SkPaint::kMedium_FilterLevel: return "Medium";
|
| - case SkPaint::kHigh_FilterLevel: return "High";
|
| - default:
|
| - ASSERT_NOT_REACHED();
|
| - return "?";
|
| - };
|
| -}
|
| -
|
| -String LoggingCanvas::textAlignName(SkPaint::Align align)
|
| -{
|
| - switch (align) {
|
| - case SkPaint::kLeft_Align: return "Left";
|
| - case SkPaint::kCenter_Align: return "Center";
|
| - case SkPaint::kRight_Align: return "Right";
|
| - default:
|
| - ASSERT_NOT_REACHED();
|
| - return "?";
|
| - };
|
| -}
|
| -
|
| -String LoggingCanvas::strokeCapName(SkPaint::Cap cap)
|
| -{
|
| - switch (cap) {
|
| - case SkPaint::kButt_Cap: return "Butt";
|
| - case SkPaint::kRound_Cap: return "Round";
|
| - case SkPaint::kSquare_Cap: return "Square";
|
| - default:
|
| - ASSERT_NOT_REACHED();
|
| - return "?";
|
| - };
|
| -}
|
| -
|
| -String LoggingCanvas::strokeJoinName(SkPaint::Join join)
|
| -{
|
| - switch (join) {
|
| - case SkPaint::kMiter_Join: return "Miter";
|
| - case SkPaint::kRound_Join: return "Round";
|
| - case SkPaint::kBevel_Join: return "Bevel";
|
| - default:
|
| - ASSERT_NOT_REACHED();
|
| - return "?";
|
| - };
|
| -}
|
| -
|
| -String LoggingCanvas::styleName(SkPaint::Style style)
|
| -{
|
| - switch (style) {
|
| - case SkPaint::kFill_Style: return "Fill";
|
| - case SkPaint::kStroke_Style: return "Stroke";
|
| - case SkPaint::kStrokeAndFill_Style: return "StrokeAndFill";
|
| - default:
|
| - ASSERT_NOT_REACHED();
|
| - return "?";
|
| - };
|
| -}
|
| -
|
| -String LoggingCanvas::textEncodingName(SkPaint::TextEncoding encoding)
|
| -{
|
| - switch (encoding) {
|
| - case SkPaint::kUTF8_TextEncoding: return "UTF-8";
|
| - case SkPaint::kUTF16_TextEncoding: return "UTF-16";
|
| - case SkPaint::kUTF32_TextEncoding: return "UTF-32";
|
| - case SkPaint::kGlyphID_TextEncoding: return "GlyphID";
|
| - default:
|
| - ASSERT_NOT_REACHED();
|
| - return "?";
|
| - };
|
| -}
|
| -
|
| -String LoggingCanvas::hintingName(SkPaint::Hinting hinting)
|
| -{
|
| - switch (hinting) {
|
| - case SkPaint::kNo_Hinting: return "None";
|
| - case SkPaint::kSlight_Hinting: return "Slight";
|
| - case SkPaint::kNormal_Hinting: return "Normal";
|
| - case SkPaint::kFull_Hinting: return "Full";
|
| - default:
|
| - ASSERT_NOT_REACHED();
|
| - return "?";
|
| - };
|
| -}
|
| -
|
| -PassRefPtr<JSONObject> LoggingCanvas::objectForSkPaint(const SkPaint& paint)
|
| -{
|
| - RefPtr<JSONObject> paintItem = JSONObject::create();
|
| - paintItem->setNumber("textSize", paint.getTextSize());
|
| - paintItem->setNumber("textScaleX", paint.getTextScaleX());
|
| - paintItem->setNumber("textSkewX", paint.getTextSkewX());
|
| - if (SkShader* shader = paint.getShader())
|
| - paintItem->setObject("shader", objectForSkShader(*shader));
|
| - paintItem->setString("color", stringForSkColor(paint.getColor()));
|
| - paintItem->setNumber("strokeWidth", paint.getStrokeWidth());
|
| - paintItem->setNumber("strokeMiter", paint.getStrokeMiter());
|
| - paintItem->setString("flags", stringForSkPaintFlags(paint));
|
| - paintItem->setString("filterLevel", filterLevelName(paint.getFilterLevel()));
|
| - paintItem->setString("textAlign", textAlignName(paint.getTextAlign()));
|
| - paintItem->setString("strokeCap", strokeCapName(paint.getStrokeCap()));
|
| - paintItem->setString("strokeJoin", strokeJoinName(paint.getStrokeJoin()));
|
| - paintItem->setString("styleName", styleName(paint.getStyle()));
|
| - paintItem->setString("textEncoding", textEncodingName(paint.getTextEncoding()));
|
| - paintItem->setString("hinting", hintingName(paint.getHinting()));
|
| - return paintItem.release();
|
| -}
|
| -
|
| -PassRefPtr<JSONArray> LoggingCanvas::arrayForSkMatrix(const SkMatrix& matrix)
|
| -{
|
| - RefPtr<JSONArray> matrixArray = JSONArray::create();
|
| - for (int i = 0; i < 9; ++i)
|
| - matrixArray->pushNumber(matrix[i]);
|
| - return matrixArray.release();
|
| -}
|
| -
|
| -PassRefPtr<JSONArray> LoggingCanvas::arrayForSkScalars(size_t n, const SkScalar scalars[])
|
| -{
|
| - RefPtr<JSONArray> scalarsArray = JSONArray::create();
|
| - for (size_t i = 0; i < n; ++i)
|
| - scalarsArray->pushNumber(scalars[i]);
|
| - return scalarsArray.release();
|
| -}
|
| -
|
| -String LoggingCanvas::regionOpName(SkRegion::Op op)
|
| -{
|
| - switch (op) {
|
| - case SkRegion::kDifference_Op: return "kDifference_Op";
|
| - case SkRegion::kIntersect_Op: return "kIntersect_Op";
|
| - case SkRegion::kUnion_Op: return "kUnion_Op";
|
| - case SkRegion::kXOR_Op: return "kXOR_Op";
|
| - case SkRegion::kReverseDifference_Op: return "kReverseDifference_Op";
|
| - case SkRegion::kReplace_Op: return "kReplace_Op";
|
| - default: return "Unknown type";
|
| - };
|
| -}
|
| -
|
| -String LoggingCanvas::saveFlagsToString(SkCanvas::SaveFlags flags)
|
| -{
|
| - String flagsString = "";
|
| - if (flags & SkCanvas::kHasAlphaLayer_SaveFlag)
|
| - flagsString.append("kHasAlphaLayer_SaveFlag ");
|
| - if (flags & SkCanvas::kFullColorLayer_SaveFlag)
|
| - flagsString.append("kFullColorLayer_SaveFlag ");
|
| - if (flags & SkCanvas::kClipToLayer_SaveFlag)
|
| - flagsString.append("kClipToLayer_SaveFlag ");
|
| - return flagsString;
|
| -}
|
| -
|
| -String LoggingCanvas::textEncodingCanonicalName(SkPaint::TextEncoding encoding)
|
| -{
|
| - String name = textEncodingName(encoding);
|
| - if (encoding == SkPaint::kUTF16_TextEncoding || encoding == SkPaint::kUTF32_TextEncoding)
|
| - name.append("LE");
|
| - return name;
|
| -}
|
| -
|
| -String LoggingCanvas::stringForUTFText(const void* text, size_t length, SkPaint::TextEncoding encoding)
|
| -{
|
| - return WTF::TextEncoding(textEncodingCanonicalName(encoding)).decode((const char*)text, length);
|
| -}
|
| -
|
| -String LoggingCanvas::stringForText(const void* text, size_t byteLength, const SkPaint& paint)
|
| -{
|
| - SkPaint::TextEncoding encoding = paint.getTextEncoding();
|
| - switch (encoding) {
|
| - case SkPaint::kUTF8_TextEncoding:
|
| - case SkPaint::kUTF16_TextEncoding:
|
| - case SkPaint::kUTF32_TextEncoding:
|
| - return stringForUTFText(text, byteLength, encoding);
|
| - case SkPaint::kGlyphID_TextEncoding: {
|
| - WTF::Vector<SkUnichar> dataVector(byteLength / 2);
|
| - SkUnichar* textData = dataVector.data();
|
| - paint.glyphsToUnichars(static_cast<const uint16_t*>(text), byteLength / 2, textData);
|
| - return WTF::UTF32LittleEndianEncoding().decode(reinterpret_cast<const char*>(textData), byteLength * 2);
|
| - }
|
| - default:
|
| - ASSERT_NOT_REACHED();
|
| - return "?";
|
| - }
|
| -}
|
| -
|
| -} // namespace blink
|
|
|