| Index: debugger/SkDrawCommand.cpp
|
| ===================================================================
|
| --- debugger/SkDrawCommand.cpp (revision 9448)
|
| +++ debugger/SkDrawCommand.cpp (working copy)
|
| @@ -87,12 +87,97 @@
|
| canvas->clear(fColor);
|
| }
|
|
|
| -ClipPath::ClipPath(const SkPath& path, SkRegion::Op op, bool doAA, SkBitmap& bitmap) {
|
| +namespace {
|
| +
|
| +void xlate_and_scale_to_bounds(SkCanvas* canvas, const SkRect& bounds) {
|
| + const SkISize& size = canvas->getDeviceSize();
|
| +
|
| + static const SkScalar kInsetFrac = 0.9f; // Leave a border around object
|
| +
|
| + canvas->translate(size.fWidth/2.0f, size.fHeight/2.0f);
|
| + if (bounds.width() > bounds.height()) {
|
| + canvas->scale(SkDoubleToScalar((kInsetFrac*size.fWidth)/bounds.width()),
|
| + SkDoubleToScalar((kInsetFrac*size.fHeight)/bounds.width()));
|
| + } else {
|
| + canvas->scale(SkDoubleToScalar((kInsetFrac*size.fWidth)/bounds.height()),
|
| + SkDoubleToScalar((kInsetFrac*size.fHeight)/bounds.height()));
|
| + }
|
| + canvas->translate(-bounds.centerX(), -bounds.centerY());
|
| +}
|
| +
|
| +
|
| +void render_path(SkCanvas* canvas, const SkPath& path) {
|
| + canvas->clear(0xFFFFFFFF);
|
| + canvas->save();
|
| +
|
| + const SkRect& bounds = path.getBounds();
|
| +
|
| + xlate_and_scale_to_bounds(canvas, bounds);
|
| +
|
| + SkPaint p;
|
| + p.setColor(SK_ColorBLACK);
|
| + p.setStyle(SkPaint::kStroke_Style);
|
| +
|
| + canvas->drawPath(path, p);
|
| + canvas->restore();
|
| +}
|
| +
|
| +void render_bitmap(SkCanvas* canvas, const SkBitmap& input, const SkRect* srcRect = NULL) {
|
| + const SkISize& size = canvas->getDeviceSize();
|
| +
|
| + SkScalar xScale = SkIntToScalar(size.fWidth-2) / input.width();
|
| + SkScalar yScale = SkIntToScalar(size.fHeight-2) / input.height();
|
| +
|
| + if (input.width() > input.height()) {
|
| + yScale *= input.height() / (float) input.width();
|
| + } else {
|
| + xScale *= input.width() / (float) input.height();
|
| + }
|
| +
|
| + SkRect dst = SkRect::MakeXYWH(SK_Scalar1, SK_Scalar1,
|
| + xScale * input.width(),
|
| + yScale * input.height());
|
| +
|
| + canvas->clear(0xFFFFFFFF);
|
| + canvas->drawBitmapRect(input, NULL, dst);
|
| +
|
| + if (NULL != srcRect) {
|
| + SkRect r = SkRect::MakeLTRB(srcRect->fLeft * xScale + SK_Scalar1,
|
| + srcRect->fTop * yScale + SK_Scalar1,
|
| + srcRect->fRight * xScale + SK_Scalar1,
|
| + srcRect->fBottom * yScale + SK_Scalar1);
|
| + SkPaint p;
|
| + p.setColor(SK_ColorRED);
|
| + p.setStyle(SkPaint::kStroke_Style);
|
| +
|
| + canvas->drawRect(r, p);
|
| + }
|
| +}
|
| +
|
| +void render_rrect(SkCanvas* canvas, const SkRRect& rrect) {
|
| + canvas->clear(0xFFFFFFFF);
|
| + canvas->save();
|
| +
|
| + const SkRect& bounds = rrect.getBounds();
|
| +
|
| + xlate_and_scale_to_bounds(canvas, bounds);
|
| +
|
| + SkPaint p;
|
| + p.setColor(SK_ColorBLACK);
|
| + p.setStyle(SkPaint::kStroke_Style);
|
| +
|
| + canvas->drawRRect(rrect, p);
|
| + canvas->restore();
|
| +}
|
| +
|
| +};
|
| +
|
| +
|
| +ClipPath::ClipPath(const SkPath& path, SkRegion::Op op, bool doAA) {
|
| fPath = path;
|
| fOp = op;
|
| fDoAA = doAA;
|
| fDrawType = CLIP_PATH;
|
| - fBitmap = bitmap;
|
|
|
| fInfo.push(SkObjectParser::PathToString(path));
|
| fInfo.push(SkObjectParser::RegionOpToString(op));
|
| @@ -103,8 +188,9 @@
|
| canvas->clipPath(fPath, fOp, fDoAA);
|
| }
|
|
|
| -const SkBitmap* ClipPath::getBitmap() const {
|
| - return &fBitmap;
|
| +bool ClipPath::render(SkCanvas* canvas) const {
|
| + render_path(canvas, fPath);
|
| + return true;
|
| }
|
|
|
| ClipRegion::ClipRegion(const SkRegion& region, SkRegion::Op op) {
|
| @@ -150,6 +236,11 @@
|
| canvas->clipRRect(fRRect, fOp, fDoAA);
|
| }
|
|
|
| +bool ClipRRect::render(SkCanvas* canvas) const {
|
| + render_rrect(canvas, fRRect);
|
| + return true;
|
| +}
|
| +
|
| Concat::Concat(const SkMatrix& matrix) {
|
| fMatrix = matrix;
|
| fDrawType = CONCAT;
|
| @@ -162,7 +253,7 @@
|
| }
|
|
|
| DrawBitmap::DrawBitmap(const SkBitmap& bitmap, SkScalar left, SkScalar top,
|
| - const SkPaint* paint, SkBitmap& resizedBitmap) {
|
| + const SkPaint* paint) {
|
| fBitmap = bitmap;
|
| fLeft = left;
|
| fTop = top;
|
| @@ -173,7 +264,6 @@
|
| fPaintPtr = NULL;
|
| }
|
| fDrawType = DRAW_BITMAP;
|
| - fResizedBitmap = resizedBitmap;
|
|
|
| fInfo.push(SkObjectParser::BitmapToString(bitmap));
|
| fInfo.push(SkObjectParser::ScalarToString(left, "SkScalar left: "));
|
| @@ -187,14 +277,14 @@
|
| canvas->drawBitmap(fBitmap, fLeft, fTop, fPaintPtr);
|
| }
|
|
|
| -const SkBitmap* DrawBitmap::getBitmap() const {
|
| - return &fResizedBitmap;
|
| +bool DrawBitmap::render(SkCanvas* canvas) const {
|
| + render_bitmap(canvas, fBitmap);
|
| + return true;
|
| }
|
|
|
| DrawBitmapMatrix::DrawBitmapMatrix(const SkBitmap& bitmap,
|
| const SkMatrix& matrix,
|
| - const SkPaint* paint,
|
| - SkBitmap& resizedBitmap) {
|
| + const SkPaint* paint) {
|
| fBitmap = bitmap;
|
| fMatrix = matrix;
|
| if (NULL != paint) {
|
| @@ -204,7 +294,6 @@
|
| fPaintPtr = NULL;
|
| }
|
| fDrawType = DRAW_BITMAP_MATRIX;
|
| - fResizedBitmap = resizedBitmap;
|
|
|
| fInfo.push(SkObjectParser::BitmapToString(bitmap));
|
| fInfo.push(SkObjectParser::MatrixToString(matrix));
|
| @@ -217,13 +306,13 @@
|
| canvas->drawBitmapMatrix(fBitmap, fMatrix, fPaintPtr);
|
| }
|
|
|
| -const SkBitmap* DrawBitmapMatrix::getBitmap() const {
|
| - return &fResizedBitmap;
|
| +bool DrawBitmapMatrix::render(SkCanvas* canvas) const {
|
| + render_bitmap(canvas, fBitmap);
|
| + return true;
|
| }
|
|
|
| DrawBitmapNine::DrawBitmapNine(const SkBitmap& bitmap, const SkIRect& center,
|
| - const SkRect& dst, const SkPaint* paint,
|
| - SkBitmap& resizedBitmap) {
|
| + const SkRect& dst, const SkPaint* paint) {
|
| fBitmap = bitmap;
|
| fCenter = center;
|
| fDst = dst;
|
| @@ -234,7 +323,6 @@
|
| fPaintPtr = NULL;
|
| }
|
| fDrawType = DRAW_BITMAP_NINE;
|
| - fResizedBitmap = resizedBitmap;
|
|
|
| fInfo.push(SkObjectParser::BitmapToString(bitmap));
|
| fInfo.push(SkObjectParser::IRectToString(center));
|
| @@ -248,13 +336,13 @@
|
| canvas->drawBitmapNine(fBitmap, fCenter, fDst, fPaintPtr);
|
| }
|
|
|
| -const SkBitmap* DrawBitmapNine::getBitmap() const {
|
| - return &fResizedBitmap;
|
| +bool DrawBitmapNine::render(SkCanvas* canvas) const {
|
| + render_bitmap(canvas, fBitmap);
|
| + return true;
|
| }
|
|
|
| DrawBitmapRect::DrawBitmapRect(const SkBitmap& bitmap, const SkRect* src,
|
| - const SkRect& dst, const SkPaint* paint,
|
| - SkBitmap& resizedBitmap) {
|
| + const SkRect& dst, const SkPaint* paint) {
|
| fBitmap = bitmap;
|
| if (NULL != src) {
|
| fSrc = *src;
|
| @@ -270,7 +358,6 @@
|
| fPaintPtr = NULL;
|
| }
|
| fDrawType = DRAW_BITMAP_RECT_TO_RECT;
|
| - fResizedBitmap = resizedBitmap;
|
|
|
| fInfo.push(SkObjectParser::BitmapToString(bitmap));
|
| if (NULL != src) {
|
| @@ -286,8 +373,9 @@
|
| canvas->drawBitmapRectToRect(fBitmap, this->srcRect(), fDst, fPaintPtr);
|
| }
|
|
|
| -const SkBitmap* DrawBitmapRect::getBitmap() const {
|
| - return &fResizedBitmap;
|
| +bool DrawBitmapRect::render(SkCanvas* canvas) const {
|
| + render_bitmap(canvas, fBitmap, this->srcRect());
|
| + return true;
|
| }
|
|
|
| DrawData::DrawData(const void* data, size_t length) {
|
| @@ -339,6 +427,22 @@
|
| canvas->drawOval(fOval, fPaint);
|
| }
|
|
|
| +bool DrawOval::render(SkCanvas* canvas) const {
|
| + canvas->clear(0xFFFFFFFF);
|
| + canvas->save();
|
| +
|
| + xlate_and_scale_to_bounds(canvas, fOval);
|
| +
|
| + SkPaint p;
|
| + p.setColor(SK_ColorBLACK);
|
| + p.setStyle(SkPaint::kStroke_Style);
|
| +
|
| + canvas->drawOval(fOval, p);
|
| + canvas->restore();
|
| +
|
| + return true;
|
| +}
|
| +
|
| DrawPaint::DrawPaint(const SkPaint& paint) {
|
| fPaint = paint;
|
| fDrawType = DRAW_PAINT;
|
| @@ -350,10 +454,15 @@
|
| canvas->drawPaint(fPaint);
|
| }
|
|
|
| -DrawPath::DrawPath(const SkPath& path, const SkPaint& paint, SkBitmap& bitmap) {
|
| +bool DrawPaint::render(SkCanvas* canvas) const {
|
| + canvas->clear(0xFFFFFFFF);
|
| + canvas->drawPaint(fPaint);
|
| + return true;
|
| +}
|
| +
|
| +DrawPath::DrawPath(const SkPath& path, const SkPaint& paint) {
|
| fPath = path;
|
| fPaint = paint;
|
| - fBitmap = bitmap;
|
| fDrawType = DRAW_PATH;
|
|
|
| fInfo.push(SkObjectParser::PathToString(path));
|
| @@ -364,8 +473,9 @@
|
| canvas->drawPath(fPath, fPaint);
|
| }
|
|
|
| -const SkBitmap* DrawPath::getBitmap() const {
|
| - return &fBitmap;
|
| +bool DrawPath::render(SkCanvas* canvas) const {
|
| + render_path(canvas, fPath);
|
| + return true;
|
| }
|
|
|
| DrawPicture::DrawPicture(SkPicture& picture) :
|
| @@ -398,6 +508,29 @@
|
| canvas->drawPoints(fMode, fCount, fPts, fPaint);
|
| }
|
|
|
| +bool DrawPoints::render(SkCanvas* canvas) const {
|
| + canvas->clear(0xFFFFFFFF);
|
| + canvas->save();
|
| +
|
| + SkRect bounds;
|
| +
|
| + bounds.setEmpty();
|
| + for (unsigned int i = 0; i < fCount; ++i) {
|
| + bounds.growToInclude(fPts[i].fX, fPts[i].fY);
|
| + }
|
| +
|
| + xlate_and_scale_to_bounds(canvas, bounds);
|
| +
|
| + SkPaint p;
|
| + p.setColor(SK_ColorBLACK);
|
| + p.setStyle(SkPaint::kStroke_Style);
|
| +
|
| + canvas->drawPoints(fMode, fCount, fPts, p);
|
| + canvas->restore();
|
| +
|
| + return true;
|
| +}
|
| +
|
| DrawPosText::DrawPosText(const void* text, size_t byteLength, const SkPoint pos[],
|
| const SkPaint& paint) {
|
| size_t numPts = paint.countText(text, byteLength);
|
| @@ -475,8 +608,13 @@
|
| canvas->drawRRect(fRRect, fPaint);
|
| }
|
|
|
| +bool DrawRRect::render(SkCanvas* canvas) const {
|
| + render_rrect(canvas, fRRect);
|
| + return true;
|
| +}
|
| +
|
| DrawSprite::DrawSprite(const SkBitmap& bitmap, int left, int top,
|
| - const SkPaint* paint, SkBitmap& resizedBitmap) {
|
| + const SkPaint* paint) {
|
| fBitmap = bitmap;
|
| fLeft = left;
|
| fTop = top;
|
| @@ -487,7 +625,6 @@
|
| fPaintPtr = NULL;
|
| }
|
| fDrawType = DRAW_SPRITE;
|
| - fResizedBitmap = resizedBitmap;
|
|
|
| fInfo.push(SkObjectParser::BitmapToString(bitmap));
|
| fInfo.push(SkObjectParser::IntToString(left, "Left: "));
|
| @@ -501,8 +638,9 @@
|
| canvas->drawSprite(fBitmap, fLeft, fTop, fPaintPtr);
|
| }
|
|
|
| -const SkBitmap* DrawSprite::getBitmap() const {
|
| - return &fResizedBitmap;
|
| +bool DrawSprite::render(SkCanvas* canvas) const {
|
| + render_bitmap(canvas, fBitmap);
|
| + return true;
|
| }
|
|
|
| DrawTextC::DrawTextC(const void* text, size_t byteLength, SkScalar x, SkScalar y,
|
|
|