| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2012 Google Inc. | 3 * Copyright 2012 Google Inc. |
| 4 * | 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
| 7 */ | 7 */ |
| 8 | 8 |
| 9 | 9 |
| 10 #include "SkColorPriv.h" | 10 #include "SkColorPriv.h" |
| 11 #include "SkDebugCanvas.h" | 11 #include "SkDebugCanvas.h" |
| 12 #include "SkDrawCommand.h" | 12 #include "SkDrawCommand.h" |
| 13 #include "SkDrawFilter.h" | 13 #include "SkDrawFilter.h" |
| 14 #include "SkDevice.h" | 14 #include "SkDevice.h" |
| 15 #include "SkXfermode.h" | 15 #include "SkXfermode.h" |
| 16 | 16 |
| 17 SkDebugCanvas::SkDebugCanvas(int width, int height) | 17 SkDebugCanvas::SkDebugCanvas(int width, int height) |
| 18 : INHERITED(width, height) | 18 : INHERITED(width, height) |
| 19 , fPicture(NULL) |
| 19 , fWidth(width) | 20 , fWidth(width) |
| 20 , fHeight(height) | 21 , fHeight(height) |
| 21 , fFilter(false) | 22 , fFilter(false) |
| 22 , fMegaVizMode(false) | 23 , fMegaVizMode(false) |
| 23 , fIndex(0) | 24 , fIndex(0) |
| 24 , fOverdrawViz(false) | 25 , fOverdrawViz(false) |
| 25 , fOverdrawFilter(NULL) | 26 , fOverdrawFilter(NULL) |
| 26 , fOverrideTexFiltering(false) | 27 , fOverrideTexFiltering(false) |
| 27 , fTexOverrideFilter(NULL) | 28 , fTexOverrideFilter(NULL) |
| 28 , fOutstandingSaveCount(0) { | 29 , fOutstandingSaveCount(0) { |
| (...skipping 19 matching lines...) Expand all Loading... |
| 48 this->INHERITED::onClipRect(large, SkRegion::kReplace_Op, kHard_ClipEdgeStyl
e); | 49 this->INHERITED::onClipRect(large, SkRegion::kReplace_Op, kHard_ClipEdgeStyl
e); |
| 49 } | 50 } |
| 50 | 51 |
| 51 SkDebugCanvas::~SkDebugCanvas() { | 52 SkDebugCanvas::~SkDebugCanvas() { |
| 52 fCommandVector.deleteAll(); | 53 fCommandVector.deleteAll(); |
| 53 SkSafeUnref(fOverdrawFilter); | 54 SkSafeUnref(fOverdrawFilter); |
| 54 SkSafeUnref(fTexOverrideFilter); | 55 SkSafeUnref(fTexOverrideFilter); |
| 55 } | 56 } |
| 56 | 57 |
| 57 void SkDebugCanvas::addDrawCommand(SkDrawCommand* command) { | 58 void SkDebugCanvas::addDrawCommand(SkDrawCommand* command) { |
| 59 command->setOffset(this->getOpID()); |
| 58 fCommandVector.push(command); | 60 fCommandVector.push(command); |
| 59 } | 61 } |
| 60 | 62 |
| 61 void SkDebugCanvas::draw(SkCanvas* canvas) { | 63 void SkDebugCanvas::draw(SkCanvas* canvas) { |
| 62 if (!fCommandVector.isEmpty()) { | 64 if (!fCommandVector.isEmpty()) { |
| 63 drawTo(canvas, fCommandVector.count() - 1); | 65 this->drawTo(canvas, fCommandVector.count() - 1); |
| 64 } | 66 } |
| 65 } | 67 } |
| 66 | 68 |
| 67 void SkDebugCanvas::applyUserTransform(SkCanvas* canvas) { | 69 void SkDebugCanvas::applyUserTransform(SkCanvas* canvas) { |
| 68 canvas->concat(fUserMatrix); | 70 canvas->concat(fUserMatrix); |
| 69 } | 71 } |
| 70 | 72 |
| 71 int SkDebugCanvas::getCommandAtPoint(int x, int y, int index) { | 73 int SkDebugCanvas::getCommandAtPoint(int x, int y, int index) { |
| 72 SkBitmap bitmap; | 74 SkBitmap bitmap; |
| 73 bitmap.allocPixels(SkImageInfo::MakeN32Premul(1, 1)); | 75 bitmap.allocPixels(SkImageInfo::MakeN32Premul(1, 1)); |
| (...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 373 SkTArray<SkString>* SkDebugCanvas::getDrawCommandsAsStrings() const { | 375 SkTArray<SkString>* SkDebugCanvas::getDrawCommandsAsStrings() const { |
| 374 SkTArray<SkString>* commandString = new SkTArray<SkString>(fCommandVector.co
unt()); | 376 SkTArray<SkString>* commandString = new SkTArray<SkString>(fCommandVector.co
unt()); |
| 375 if (!fCommandVector.isEmpty()) { | 377 if (!fCommandVector.isEmpty()) { |
| 376 for (int i = 0; i < fCommandVector.count(); i ++) { | 378 for (int i = 0; i < fCommandVector.count(); i ++) { |
| 377 commandString->push_back() = fCommandVector[i]->toString(); | 379 commandString->push_back() = fCommandVector[i]->toString(); |
| 378 } | 380 } |
| 379 } | 381 } |
| 380 return commandString; | 382 return commandString; |
| 381 } | 383 } |
| 382 | 384 |
| 385 SkTDArray<size_t>* SkDebugCanvas::getDrawCommandOffsets() const { |
| 386 SkTDArray<size_t>* commandOffsets = new SkTDArray<size_t>; |
| 387 if (!fCommandVector.isEmpty()) { |
| 388 for (int i = 0; i < fCommandVector.count(); i ++) { |
| 389 *commandOffsets->push() = fCommandVector[i]->offset(); |
| 390 } |
| 391 } |
| 392 return commandOffsets; |
| 393 } |
| 394 |
| 383 void SkDebugCanvas::overrideTexFiltering(bool overrideTexFiltering, SkPaint::Fil
terLevel level) { | 395 void SkDebugCanvas::overrideTexFiltering(bool overrideTexFiltering, SkPaint::Fil
terLevel level) { |
| 384 if (NULL == fTexOverrideFilter) { | 396 if (NULL == fTexOverrideFilter) { |
| 385 fTexOverrideFilter = new SkTexOverrideFilter; | 397 fTexOverrideFilter = new SkTexOverrideFilter; |
| 386 } | 398 } |
| 387 | 399 |
| 388 fOverrideTexFiltering = overrideTexFiltering; | 400 fOverrideTexFiltering = overrideTexFiltering; |
| 389 fTexOverrideFilter->setFilterLevel(level); | 401 fTexOverrideFilter->setFilterLevel(level); |
| 390 } | 402 } |
| 391 | 403 |
| 392 void SkDebugCanvas::clear(SkColor color) { | 404 void SkDebugCanvas::clear(SkColor color) { |
| 393 addDrawCommand(new SkClearCommand(color)); | 405 this->addDrawCommand(new SkClearCommand(color)); |
| 394 } | 406 } |
| 395 | 407 |
| 396 void SkDebugCanvas::onClipPath(const SkPath& path, SkRegion::Op op, ClipEdgeStyl
e edgeStyle) { | 408 void SkDebugCanvas::onClipPath(const SkPath& path, SkRegion::Op op, ClipEdgeStyl
e edgeStyle) { |
| 397 this->addDrawCommand(new SkClipPathCommand(path, op, kSoft_ClipEdgeStyle ==
edgeStyle)); | 409 this->addDrawCommand(new SkClipPathCommand(path, op, kSoft_ClipEdgeStyle ==
edgeStyle)); |
| 398 } | 410 } |
| 399 | 411 |
| 400 void SkDebugCanvas::onClipRect(const SkRect& rect, SkRegion::Op op, ClipEdgeStyl
e edgeStyle) { | 412 void SkDebugCanvas::onClipRect(const SkRect& rect, SkRegion::Op op, ClipEdgeStyl
e edgeStyle) { |
| 401 this->addDrawCommand(new SkClipRectCommand(rect, op, kSoft_ClipEdgeStyle ==
edgeStyle)); | 413 this->addDrawCommand(new SkClipRectCommand(rect, op, kSoft_ClipEdgeStyle ==
edgeStyle)); |
| 402 } | 414 } |
| 403 | 415 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 422 default: | 434 default: |
| 423 this->addDrawCommand(new SkConcatCommand(matrix)); | 435 this->addDrawCommand(new SkConcatCommand(matrix)); |
| 424 break; | 436 break; |
| 425 } | 437 } |
| 426 | 438 |
| 427 this->INHERITED::didConcat(matrix); | 439 this->INHERITED::didConcat(matrix); |
| 428 } | 440 } |
| 429 | 441 |
| 430 void SkDebugCanvas::drawBitmap(const SkBitmap& bitmap, SkScalar left, | 442 void SkDebugCanvas::drawBitmap(const SkBitmap& bitmap, SkScalar left, |
| 431 SkScalar top, const SkPaint* paint = NULL) { | 443 SkScalar top, const SkPaint* paint = NULL) { |
| 432 addDrawCommand(new SkDrawBitmapCommand(bitmap, left, top, paint)); | 444 this->addDrawCommand(new SkDrawBitmapCommand(bitmap, left, top, paint)); |
| 433 } | 445 } |
| 434 | 446 |
| 435 void SkDebugCanvas::drawBitmapRectToRect(const SkBitmap& bitmap, | 447 void SkDebugCanvas::drawBitmapRectToRect(const SkBitmap& bitmap, |
| 436 const SkRect* src, const SkRect& dst, | 448 const SkRect* src, const SkRect& dst, |
| 437 const SkPaint* paint, | 449 const SkPaint* paint, |
| 438 SkCanvas::DrawBitmapRectFlags flags) { | 450 SkCanvas::DrawBitmapRectFlags flags) { |
| 439 addDrawCommand(new SkDrawBitmapRectCommand(bitmap, src, dst, paint, flags)); | 451 this->addDrawCommand(new SkDrawBitmapRectCommand(bitmap, src, dst, paint, fl
ags)); |
| 440 } | 452 } |
| 441 | 453 |
| 442 void SkDebugCanvas::drawBitmapMatrix(const SkBitmap& bitmap, | 454 void SkDebugCanvas::drawBitmapMatrix(const SkBitmap& bitmap, |
| 443 const SkMatrix& matrix, const SkPaint* pain
t) { | 455 const SkMatrix& matrix, const SkPaint* pain
t) { |
| 444 addDrawCommand(new SkDrawBitmapMatrixCommand(bitmap, matrix, paint)); | 456 this->addDrawCommand(new SkDrawBitmapMatrixCommand(bitmap, matrix, paint)); |
| 445 } | 457 } |
| 446 | 458 |
| 447 void SkDebugCanvas::drawBitmapNine(const SkBitmap& bitmap, | 459 void SkDebugCanvas::drawBitmapNine(const SkBitmap& bitmap, |
| 448 const SkIRect& center, const SkRect& dst, const SkPaint* paint) { | 460 const SkIRect& center, const SkRect& dst, const SkPaint* paint) { |
| 449 addDrawCommand(new SkDrawBitmapNineCommand(bitmap, center, dst, paint)); | 461 this->addDrawCommand(new SkDrawBitmapNineCommand(bitmap, center, dst, paint)
); |
| 450 } | 462 } |
| 451 | 463 |
| 452 void SkDebugCanvas::drawData(const void* data, size_t length) { | 464 void SkDebugCanvas::drawData(const void* data, size_t length) { |
| 453 addDrawCommand(new SkDrawDataCommand(data, length)); | 465 this->addDrawCommand(new SkDrawDataCommand(data, length)); |
| 454 } | 466 } |
| 455 | 467 |
| 456 void SkDebugCanvas::beginCommentGroup(const char* description) { | 468 void SkDebugCanvas::beginCommentGroup(const char* description) { |
| 457 addDrawCommand(new SkBeginCommentGroupCommand(description)); | 469 this->addDrawCommand(new SkBeginCommentGroupCommand(description)); |
| 458 } | 470 } |
| 459 | 471 |
| 460 void SkDebugCanvas::addComment(const char* kywd, const char* value) { | 472 void SkDebugCanvas::addComment(const char* kywd, const char* value) { |
| 461 addDrawCommand(new SkCommentCommand(kywd, value)); | 473 this->addDrawCommand(new SkCommentCommand(kywd, value)); |
| 462 } | 474 } |
| 463 | 475 |
| 464 void SkDebugCanvas::endCommentGroup() { | 476 void SkDebugCanvas::endCommentGroup() { |
| 465 addDrawCommand(new SkEndCommentGroupCommand()); | 477 this->addDrawCommand(new SkEndCommentGroupCommand()); |
| 466 } | 478 } |
| 467 | 479 |
| 468 void SkDebugCanvas::drawOval(const SkRect& oval, const SkPaint& paint) { | 480 void SkDebugCanvas::drawOval(const SkRect& oval, const SkPaint& paint) { |
| 469 addDrawCommand(new SkDrawOvalCommand(oval, paint)); | 481 this->addDrawCommand(new SkDrawOvalCommand(oval, paint)); |
| 470 } | 482 } |
| 471 | 483 |
| 472 void SkDebugCanvas::drawPaint(const SkPaint& paint) { | 484 void SkDebugCanvas::drawPaint(const SkPaint& paint) { |
| 473 addDrawCommand(new SkDrawPaintCommand(paint)); | 485 this->addDrawCommand(new SkDrawPaintCommand(paint)); |
| 474 } | 486 } |
| 475 | 487 |
| 476 void SkDebugCanvas::drawPath(const SkPath& path, const SkPaint& paint) { | 488 void SkDebugCanvas::drawPath(const SkPath& path, const SkPaint& paint) { |
| 477 addDrawCommand(new SkDrawPathCommand(path, paint)); | 489 this->addDrawCommand(new SkDrawPathCommand(path, paint)); |
| 478 } | 490 } |
| 479 | 491 |
| 480 void SkDebugCanvas::drawPicture(SkPicture& picture) { | 492 void SkDebugCanvas::drawPicture(SkPicture& picture) { |
| 481 addDrawCommand(new SkDrawPictureCommand(picture)); | 493 this->addDrawCommand(new SkDrawPictureCommand(picture)); |
| 482 } | 494 } |
| 483 | 495 |
| 484 void SkDebugCanvas::drawPoints(PointMode mode, size_t count, | 496 void SkDebugCanvas::drawPoints(PointMode mode, size_t count, |
| 485 const SkPoint pts[], const SkPaint& paint) { | 497 const SkPoint pts[], const SkPaint& paint) { |
| 486 addDrawCommand(new SkDrawPointsCommand(mode, count, pts, paint)); | 498 this->addDrawCommand(new SkDrawPointsCommand(mode, count, pts, paint)); |
| 487 } | 499 } |
| 488 | 500 |
| 489 void SkDebugCanvas::drawPosText(const void* text, size_t byteLength, | 501 void SkDebugCanvas::drawPosText(const void* text, size_t byteLength, |
| 490 const SkPoint pos[], const SkPaint& paint) { | 502 const SkPoint pos[], const SkPaint& paint) { |
| 491 addDrawCommand(new SkDrawPosTextCommand(text, byteLength, pos, paint)); | 503 this->addDrawCommand(new SkDrawPosTextCommand(text, byteLength, pos, paint))
; |
| 492 } | 504 } |
| 493 | 505 |
| 494 void SkDebugCanvas::drawPosTextH(const void* text, size_t byteLength, | 506 void SkDebugCanvas::drawPosTextH(const void* text, size_t byteLength, |
| 495 const SkScalar xpos[], SkScalar constY, const SkPaint& paint) { | 507 const SkScalar xpos[], SkScalar constY, const SkPaint& paint) { |
| 496 addDrawCommand( | 508 this->addDrawCommand( |
| 497 new SkDrawPosTextHCommand(text, byteLength, xpos, constY, paint)); | 509 new SkDrawPosTextHCommand(text, byteLength, xpos, constY, paint)); |
| 498 } | 510 } |
| 499 | 511 |
| 500 void SkDebugCanvas::drawRect(const SkRect& rect, const SkPaint& paint) { | 512 void SkDebugCanvas::drawRect(const SkRect& rect, const SkPaint& paint) { |
| 501 // NOTE(chudy): Messing up when renamed to DrawRect... Why? | 513 // NOTE(chudy): Messing up when renamed to DrawRect... Why? |
| 502 addDrawCommand(new SkDrawRectCommand(rect, paint)); | 514 addDrawCommand(new SkDrawRectCommand(rect, paint)); |
| 503 } | 515 } |
| 504 | 516 |
| 505 void SkDebugCanvas::drawRRect(const SkRRect& rrect, const SkPaint& paint) { | 517 void SkDebugCanvas::drawRRect(const SkRRect& rrect, const SkPaint& paint) { |
| 506 addDrawCommand(new SkDrawRRectCommand(rrect, paint)); | 518 this->addDrawCommand(new SkDrawRRectCommand(rrect, paint)); |
| 507 } | 519 } |
| 508 | 520 |
| 509 void SkDebugCanvas::onDrawDRRect(const SkRRect& outer, const SkRRect& inner, | 521 void SkDebugCanvas::onDrawDRRect(const SkRRect& outer, const SkRRect& inner, |
| 510 const SkPaint& paint) { | 522 const SkPaint& paint) { |
| 511 this->addDrawCommand(new SkDrawDRRectCommand(outer, inner, paint)); | 523 this->addDrawCommand(new SkDrawDRRectCommand(outer, inner, paint)); |
| 512 } | 524 } |
| 513 | 525 |
| 514 void SkDebugCanvas::drawSprite(const SkBitmap& bitmap, int left, int top, | 526 void SkDebugCanvas::drawSprite(const SkBitmap& bitmap, int left, int top, |
| 515 const SkPaint* paint = NULL) { | 527 const SkPaint* paint = NULL) { |
| 516 addDrawCommand(new SkDrawSpriteCommand(bitmap, left, top, paint)); | 528 this->addDrawCommand(new SkDrawSpriteCommand(bitmap, left, top, paint)); |
| 517 } | 529 } |
| 518 | 530 |
| 519 void SkDebugCanvas::drawText(const void* text, size_t byteLength, SkScalar x, | 531 void SkDebugCanvas::drawText(const void* text, size_t byteLength, SkScalar x, |
| 520 SkScalar y, const SkPaint& paint) { | 532 SkScalar y, const SkPaint& paint) { |
| 521 addDrawCommand(new SkDrawTextCommand(text, byteLength, x, y, paint)); | 533 this->addDrawCommand(new SkDrawTextCommand(text, byteLength, x, y, paint)); |
| 522 } | 534 } |
| 523 | 535 |
| 524 void SkDebugCanvas::drawTextOnPath(const void* text, size_t byteLength, | 536 void SkDebugCanvas::drawTextOnPath(const void* text, size_t byteLength, |
| 525 const SkPath& path, const SkMatrix* matrix, const SkPaint& paint) { | 537 const SkPath& path, const SkMatrix* matrix, const SkPaint& paint) { |
| 526 addDrawCommand( | 538 this->addDrawCommand( |
| 527 new SkDrawTextOnPathCommand(text, byteLength, path, matrix, paint)); | 539 new SkDrawTextOnPathCommand(text, byteLength, path, matrix, paint)); |
| 528 } | 540 } |
| 529 | 541 |
| 530 void SkDebugCanvas::drawVertices(VertexMode vmode, int vertexCount, | 542 void SkDebugCanvas::drawVertices(VertexMode vmode, int vertexCount, |
| 531 const SkPoint vertices[], const SkPoint texs[], const SkColor colors[], | 543 const SkPoint vertices[], const SkPoint texs[], const SkColor colors[], |
| 532 SkXfermode*, const uint16_t indices[], int indexCount, | 544 SkXfermode*, const uint16_t indices[], int indexCount, |
| 533 const SkPaint& paint) { | 545 const SkPaint& paint) { |
| 534 addDrawCommand(new SkDrawVerticesCommand(vmode, vertexCount, vertices, | 546 this->addDrawCommand(new SkDrawVerticesCommand(vmode, vertexCount, vertices, |
| 535 texs, colors, NULL, indices, indexCount, paint)); | 547 texs, colors, NULL, indices, indexCount, paint)); |
| 536 } | 548 } |
| 537 | 549 |
| 538 void SkDebugCanvas::onPushCull(const SkRect& cullRect) { | 550 void SkDebugCanvas::onPushCull(const SkRect& cullRect) { |
| 539 this->addDrawCommand(new SkPushCullCommand(cullRect)); | 551 this->addDrawCommand(new SkPushCullCommand(cullRect)); |
| 540 } | 552 } |
| 541 | 553 |
| 542 void SkDebugCanvas::onPopCull() { | 554 void SkDebugCanvas::onPopCull() { |
| 543 this->addDrawCommand(new SkPopCullCommand()); | 555 this->addDrawCommand(new SkPopCullCommand()); |
| 544 } | 556 } |
| 545 | 557 |
| 546 void SkDebugCanvas::willRestore() { | 558 void SkDebugCanvas::willRestore() { |
| 547 this->addDrawCommand(new SkRestoreCommand()); | 559 this->addDrawCommand(new SkRestoreCommand()); |
| 548 this->INHERITED::willRestore(); | 560 this->INHERITED::willRestore(); |
| 549 } | 561 } |
| 550 | 562 |
| 551 void SkDebugCanvas::willSave(SaveFlags flags) { | 563 void SkDebugCanvas::willSave(SaveFlags flags) { |
| 552 this->addDrawCommand(new SkSaveCommand(flags)); | 564 this->addDrawCommand(new SkSaveCommand(flags)); |
| 553 this->INHERITED::willSave(flags); | 565 this->INHERITED::willSave(flags); |
| 554 } | 566 } |
| 555 | 567 |
| 556 SkCanvas::SaveLayerStrategy SkDebugCanvas::willSaveLayer(const SkRect* bounds, c
onst SkPaint* paint, | 568 SkCanvas::SaveLayerStrategy SkDebugCanvas::willSaveLayer(const SkRect* bounds, c
onst SkPaint* paint, |
| 557 SaveFlags flags) { | 569 SaveFlags flags) { |
| 558 this->addDrawCommand(new SkSaveLayerCommand(bounds, paint, flags)); | 570 this->addDrawCommand(new SkSaveLayerCommand(bounds, paint, flags)); |
| 559 this->INHERITED::willSaveLayer(bounds, paint, flags); | 571 this->INHERITED::willSaveLayer(bounds, paint, flags); |
| 560 // No need for a full layer. | 572 // No need for a full layer. |
| 561 return kNoLayer_SaveLayerStrategy; | 573 return kNoLayer_SaveLayerStrategy; |
| 562 } | 574 } |
| 563 | 575 |
| 564 void SkDebugCanvas::didSetMatrix(const SkMatrix& matrix) { | 576 void SkDebugCanvas::didSetMatrix(const SkMatrix& matrix) { |
| 565 addDrawCommand(new SkSetMatrixCommand(matrix)); | 577 this->addDrawCommand(new SkSetMatrixCommand(matrix)); |
| 566 this->INHERITED::didSetMatrix(matrix); | 578 this->INHERITED::didSetMatrix(matrix); |
| 567 } | 579 } |
| 568 | 580 |
| 569 void SkDebugCanvas::toggleCommand(int index, bool toggle) { | 581 void SkDebugCanvas::toggleCommand(int index, bool toggle) { |
| 570 SkASSERT(index < fCommandVector.count()); | 582 SkASSERT(index < fCommandVector.count()); |
| 571 fCommandVector[index]->setVisible(toggle); | 583 fCommandVector[index]->setVisible(toggle); |
| 572 } | 584 } |
| OLD | NEW |