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 "SkDrawCommand.h" | 10 #include "SkDrawCommand.h" |
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
276 | 276 |
277 void DrawBitmapRect::execute(SkCanvas* canvas) { | 277 void DrawBitmapRect::execute(SkCanvas* canvas) { |
278 canvas->drawBitmapRectToRect(fBitmap, this->srcRect(), fDst, fPaintPtr); | 278 canvas->drawBitmapRectToRect(fBitmap, this->srcRect(), fDst, fPaintPtr); |
279 } | 279 } |
280 | 280 |
281 const SkBitmap* DrawBitmapRect::getBitmap() const { | 281 const SkBitmap* DrawBitmapRect::getBitmap() const { |
282 return &fResizedBitmap; | 282 return &fResizedBitmap; |
283 } | 283 } |
284 | 284 |
285 DrawData::DrawData(const void* data, size_t length) { | 285 DrawData::DrawData(const void* data, size_t length) { |
286 this->fData = data; | 286 fData = new char[length]; |
287 this->fLength = length; | 287 memcpy(fData, data, length); |
288 this->fDrawType = DRAW_DATA; | 288 fLength = length; |
289 // TODO(chudy): See if we can't display data and length. | 289 fDrawType = DRAW_DATA; |
| 290 |
| 291 // TODO: add display of actual data? |
| 292 SkString* str = new SkString; |
| 293 str->appendf("length: %d", length); |
| 294 fInfo.push(str); |
290 } | 295 } |
291 | 296 |
292 void DrawData::execute(SkCanvas* canvas) { | 297 void DrawData::execute(SkCanvas* canvas) { |
293 canvas->drawData(this->fData, this->fLength); | 298 canvas->drawData(fData, fLength); |
294 } | 299 } |
295 | 300 |
296 DrawOval::DrawOval(const SkRect& oval, const SkPaint& paint) { | 301 DrawOval::DrawOval(const SkRect& oval, const SkPaint& paint) { |
297 fOval = oval; | 302 fOval = oval; |
298 fPaint = paint; | 303 fPaint = paint; |
299 fDrawType = DRAW_OVAL; | 304 fDrawType = DRAW_OVAL; |
300 | 305 |
301 fInfo.push(SkObjectParser::RectToString(oval)); | 306 fInfo.push(SkObjectParser::RectToString(oval)); |
302 fInfo.push(SkObjectParser::PaintToString(paint)); | 307 fInfo.push(SkObjectParser::PaintToString(paint)); |
303 } | 308 } |
(...skipping 24 matching lines...) Expand all Loading... |
328 } | 333 } |
329 | 334 |
330 void DrawPath::execute(SkCanvas* canvas) { | 335 void DrawPath::execute(SkCanvas* canvas) { |
331 canvas->drawPath(fPath, fPaint); | 336 canvas->drawPath(fPath, fPaint); |
332 } | 337 } |
333 | 338 |
334 const SkBitmap* DrawPath::getBitmap() const { | 339 const SkBitmap* DrawPath::getBitmap() const { |
335 return &fBitmap; | 340 return &fBitmap; |
336 } | 341 } |
337 | 342 |
338 DrawPicture::DrawPicture(SkPicture& picture) { | 343 DrawPicture::DrawPicture(SkPicture& picture) : |
339 this->fPicture = &picture; | 344 fPicture(picture) { |
340 this->fDrawType = DRAW_PICTURE; | 345 fDrawType = DRAW_PICTURE; |
341 this->fInfo.push(SkObjectParser::CustomTextToString("To be implemented.")); | 346 fInfo.push(SkObjectParser::CustomTextToString("To be implemented.")); |
342 } | 347 } |
343 | 348 |
344 void DrawPicture::execute(SkCanvas* canvas) { | 349 void DrawPicture::execute(SkCanvas* canvas) { |
345 canvas->drawPicture(*this->fPicture); | 350 canvas->drawPicture(fPicture); |
346 } | 351 } |
347 | 352 |
348 DrawPoints::DrawPoints(SkCanvas::PointMode mode, size_t count, | 353 DrawPoints::DrawPoints(SkCanvas::PointMode mode, size_t count, |
349 const SkPoint pts[], const SkPaint& paint) { | 354 const SkPoint pts[], const SkPaint& paint) { |
350 fMode = mode; | 355 fMode = mode; |
351 fCount = count; | 356 fCount = count; |
352 fPts = new SkPoint[count]; | 357 fPts = new SkPoint[count]; |
353 memcpy(fPts, pts, count * sizeof(SkPoint)); | 358 memcpy(fPts, pts, count * sizeof(SkPoint)); |
354 fPaint = paint; | 359 fPaint = paint; |
355 fDrawType = DRAW_POINTS; | 360 fDrawType = DRAW_POINTS; |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
423 | 428 |
424 fInfo.push(SkObjectParser::RectToString(rect)); | 429 fInfo.push(SkObjectParser::RectToString(rect)); |
425 fInfo.push(SkObjectParser::PaintToString(paint)); | 430 fInfo.push(SkObjectParser::PaintToString(paint)); |
426 } | 431 } |
427 | 432 |
428 void DrawRectC::execute(SkCanvas* canvas) { | 433 void DrawRectC::execute(SkCanvas* canvas) { |
429 canvas->drawRect(fRect, fPaint); | 434 canvas->drawRect(fRect, fPaint); |
430 } | 435 } |
431 | 436 |
432 DrawRRect::DrawRRect(const SkRRect& rrect, const SkPaint& paint) { | 437 DrawRRect::DrawRRect(const SkRRect& rrect, const SkPaint& paint) { |
433 this->fRRect = rrect; | 438 fRRect = rrect; |
434 this->fPaint = paint; | 439 fPaint = paint; |
435 this->fDrawType = DRAW_RRECT; | 440 fDrawType = DRAW_RRECT; |
436 | 441 |
437 this->fInfo.push(SkObjectParser::RRectToString(rrect)); | 442 fInfo.push(SkObjectParser::RRectToString(rrect)); |
438 this->fInfo.push(SkObjectParser::PaintToString(paint)); | 443 fInfo.push(SkObjectParser::PaintToString(paint)); |
439 } | 444 } |
440 | 445 |
441 void DrawRRect::execute(SkCanvas* canvas) { | 446 void DrawRRect::execute(SkCanvas* canvas) { |
442 canvas->drawRRect(fRRect, fPaint); | 447 canvas->drawRRect(fRRect, fPaint); |
443 } | 448 } |
444 | 449 |
445 DrawSprite::DrawSprite(const SkBitmap& bitmap, int left, int top, | 450 DrawSprite::DrawSprite(const SkBitmap& bitmap, int left, int top, |
446 const SkPaint* paint, SkBitmap& resizedBitmap) { | 451 const SkPaint* paint, SkBitmap& resizedBitmap) { |
447 this->fBitmap = &bitmap; | 452 fBitmap = bitmap; |
448 this->fLeft = left; | 453 fLeft = left; |
449 this->fTop = top; | 454 fTop = top; |
450 this->fPaint = paint; | 455 if (NULL != paint) { |
451 this->fDrawType = DRAW_SPRITE; | 456 fPaint = *paint; |
452 this->fResizedBitmap = resizedBitmap; | 457 fPaintPtr = &fPaint; |
| 458 } else { |
| 459 fPaintPtr = NULL; |
| 460 } |
| 461 fDrawType = DRAW_SPRITE; |
| 462 fResizedBitmap = resizedBitmap; |
453 | 463 |
454 this->fInfo.push(SkObjectParser::BitmapToString(bitmap)); | 464 fInfo.push(SkObjectParser::BitmapToString(bitmap)); |
455 this->fInfo.push(SkObjectParser::IntToString(left, "Left: ")); | 465 fInfo.push(SkObjectParser::IntToString(left, "Left: ")); |
456 this->fInfo.push(SkObjectParser::IntToString(top, "Top: ")); | 466 fInfo.push(SkObjectParser::IntToString(top, "Top: ")); |
| 467 if (NULL != paint) { |
| 468 fInfo.push(SkObjectParser::PaintToString(*paint)); |
| 469 } |
457 } | 470 } |
458 | 471 |
459 void DrawSprite::execute(SkCanvas* canvas) { | 472 void DrawSprite::execute(SkCanvas* canvas) { |
460 canvas->drawSprite(*this->fBitmap, this->fLeft, this->fTop, this->fPaint); | 473 canvas->drawSprite(fBitmap, fLeft, fTop, fPaintPtr); |
461 } | 474 } |
462 | 475 |
463 const SkBitmap* DrawSprite::getBitmap() const { | 476 const SkBitmap* DrawSprite::getBitmap() const { |
464 return &fResizedBitmap; | 477 return &fResizedBitmap; |
465 } | 478 } |
466 | 479 |
467 DrawTextC::DrawTextC(const void* text, size_t byteLength, SkScalar x, SkScalar y
, | 480 DrawTextC::DrawTextC(const void* text, size_t byteLength, SkScalar x, SkScalar y
, |
468 const SkPaint& paint) { | 481 const SkPaint& paint) { |
469 this->fText = text; | 482 fText = new char[byteLength]; |
470 this->fByteLength = byteLength; | 483 memcpy(fText, text, byteLength); |
471 this->fX = x; | 484 fByteLength = byteLength; |
472 this->fY = y; | 485 fX = x; |
473 this->fPaint = &paint; | 486 fY = y; |
474 this->fDrawType = DRAW_TEXT; | 487 fPaint = paint; |
| 488 fDrawType = DRAW_TEXT; |
475 | 489 |
476 this->fInfo.push(SkObjectParser::TextToString(text, byteLength, paint.getTex
tEncoding())); | 490 fInfo.push(SkObjectParser::TextToString(text, byteLength, paint.getTextEncod
ing())); |
477 this->fInfo.push(SkObjectParser::ScalarToString(x, "SkScalar x: ")); | 491 fInfo.push(SkObjectParser::ScalarToString(x, "SkScalar x: ")); |
478 this->fInfo.push(SkObjectParser::ScalarToString(y, "SkScalar y: ")); | 492 fInfo.push(SkObjectParser::ScalarToString(y, "SkScalar y: ")); |
479 this->fInfo.push(SkObjectParser::PaintToString(paint)); | 493 fInfo.push(SkObjectParser::PaintToString(paint)); |
480 } | 494 } |
481 | 495 |
482 void DrawTextC::execute(SkCanvas* canvas) { | 496 void DrawTextC::execute(SkCanvas* canvas) { |
483 canvas->drawText(this->fText, this->fByteLength, this->fX, this->fY, *this->
fPaint); | 497 canvas->drawText(fText, fByteLength, fX, fY, fPaint); |
484 } | 498 } |
485 | 499 |
486 DrawTextOnPath::DrawTextOnPath(const void* text, size_t byteLength, | 500 DrawTextOnPath::DrawTextOnPath(const void* text, size_t byteLength, |
487 const SkPath& path, const SkMatrix* matrix, const SkPaint& paint) { | 501 const SkPath& path, const SkMatrix* matrix, |
488 this->fText = text; | 502 const SkPaint& paint) { |
489 this->fByteLength = byteLength; | 503 fText = new char[byteLength]; |
490 this->fPath = &path; | 504 memcpy(fText, text, byteLength); |
491 this->fMatrix = matrix; | 505 fByteLength = byteLength; |
492 this->fPaint = &paint; | 506 fPath = path; |
493 this->fDrawType = DRAW_TEXT_ON_PATH; | 507 if (NULL != matrix) { |
| 508 fMatrix = *matrix; |
| 509 } else { |
| 510 fMatrix.setIdentity(); |
| 511 } |
| 512 fPaint = paint; |
| 513 fDrawType = DRAW_TEXT_ON_PATH; |
494 | 514 |
495 this->fInfo.push(SkObjectParser::TextToString(text, byteLength, paint.getTex
tEncoding())); | 515 fInfo.push(SkObjectParser::TextToString(text, byteLength, paint.getTextEncod
ing())); |
496 this->fInfo.push(SkObjectParser::PathToString(path)); | 516 fInfo.push(SkObjectParser::PathToString(path)); |
497 if (matrix) this->fInfo.push(SkObjectParser::MatrixToString(*matrix)); | 517 if (NULL != matrix) { |
498 this->fInfo.push(SkObjectParser::PaintToString(paint)); | 518 fInfo.push(SkObjectParser::MatrixToString(*matrix)); |
| 519 } |
| 520 fInfo.push(SkObjectParser::PaintToString(paint)); |
499 } | 521 } |
500 | 522 |
501 void DrawTextOnPath::execute(SkCanvas* canvas) { | 523 void DrawTextOnPath::execute(SkCanvas* canvas) { |
502 canvas->drawTextOnPath(this->fText, this->fByteLength, *this->fPath, | 524 canvas->drawTextOnPath(fText, fByteLength, fPath, |
503 this->fMatrix, *this->fPaint); | 525 fMatrix.isIdentity() ? NULL : &fMatrix, |
| 526 fPaint); |
504 } | 527 } |
505 | 528 |
506 DrawVertices::DrawVertices(SkCanvas::VertexMode vmode, int vertexCount, | 529 DrawVertices::DrawVertices(SkCanvas::VertexMode vmode, int vertexCount, |
507 const SkPoint vertices[], const SkPoint texs[], const SkColor colors[], | 530 const SkPoint vertices[], const SkPoint texs[], |
508 SkXfermode* xfermode, const uint16_t indices[], int indexCount, | 531 const SkColor colors[], SkXfermode* xfermode, |
509 const SkPaint& paint) { | 532 const uint16_t indices[], int indexCount, |
510 this->fVmode = vmode; | 533 const SkPaint& paint) { |
511 this->fVertexCount = vertexCount; | 534 fVmode = vmode; |
512 this->fTexs = texs; | 535 |
513 this->fColors = colors; | 536 fVertexCount = vertexCount; |
514 this->fXfermode = xfermode; | 537 |
515 this->fIndices = indices; | 538 fVertices = new SkPoint[vertexCount]; |
516 this->fIndexCount = indexCount; | 539 memcpy(fVertices, vertices, vertexCount * sizeof(SkPoint)); |
517 this->fPaint = &paint; | 540 |
518 this->fDrawType = DRAW_VERTICES; | 541 if (NULL != texs) { |
| 542 fTexs = new SkPoint[vertexCount]; |
| 543 memcpy(fTexs, texs, vertexCount * sizeof(SkPoint)); |
| 544 } else { |
| 545 fTexs = NULL; |
| 546 } |
| 547 |
| 548 if (NULL != colors) { |
| 549 fColors = new SkColor[vertexCount]; |
| 550 memcpy(fColors, colors, vertexCount * sizeof(SkColor)); |
| 551 } else { |
| 552 fColors = NULL; |
| 553 } |
| 554 |
| 555 fXfermode = xfermode; |
| 556 if (NULL != fXfermode) { |
| 557 fXfermode->ref(); |
| 558 } |
| 559 |
| 560 if (indexCount > 0) { |
| 561 fIndices = new uint16_t[indexCount]; |
| 562 memcpy(fIndices, indices, indexCount * sizeof(uint16_t)); |
| 563 } else { |
| 564 fIndices = NULL; |
| 565 } |
| 566 |
| 567 fIndexCount = indexCount; |
| 568 fPaint = paint; |
| 569 fDrawType = DRAW_VERTICES; |
| 570 |
519 // TODO(chudy) | 571 // TODO(chudy) |
520 this->fInfo.push(SkObjectParser::CustomTextToString("To be implemented.")); | 572 fInfo.push(SkObjectParser::CustomTextToString("To be implemented.")); |
| 573 fInfo.push(SkObjectParser::PaintToString(paint)); |
| 574 } |
| 575 |
| 576 DrawVertices::~DrawVertices() { |
| 577 delete [] fVertices; |
| 578 delete [] fTexs; |
| 579 delete [] fColors; |
| 580 SkSafeUnref(fXfermode); |
| 581 delete [] fIndices; |
521 } | 582 } |
522 | 583 |
523 void DrawVertices::execute(SkCanvas* canvas) { | 584 void DrawVertices::execute(SkCanvas* canvas) { |
524 canvas->drawVertices(this->fVmode, this->fVertexCount, this->fVertices, | 585 canvas->drawVertices(fVmode, fVertexCount, fVertices, |
525 this->fTexs, this->fColors, this->fXfermode, this->fIndices, | 586 fTexs, fColors, fXfermode, fIndices, |
526 this->fIndexCount, *this->fPaint); | 587 fIndexCount, fPaint); |
527 } | 588 } |
528 | 589 |
529 Restore::Restore() { | 590 Restore::Restore() { |
530 fDrawType = RESTORE; | 591 fDrawType = RESTORE; |
531 fInfo.push(SkObjectParser::CustomTextToString("No Parameters")); | 592 fInfo.push(SkObjectParser::CustomTextToString("No Parameters")); |
532 } | 593 } |
533 | 594 |
534 void Restore::execute(SkCanvas* canvas) { | 595 void Restore::execute(SkCanvas* canvas) { |
535 canvas->restore(); | 596 canvas->restore(); |
536 } | 597 } |
537 | 598 |
538 void Restore::trackSaveState(int* state) { | 599 void Restore::trackSaveState(int* state) { |
539 (*state)--; | 600 (*state)--; |
540 } | 601 } |
541 | 602 |
542 Rotate::Rotate(SkScalar degrees) { | 603 Rotate::Rotate(SkScalar degrees) { |
543 this->fDegrees = degrees; | 604 fDegrees = degrees; |
544 this->fDrawType = ROTATE; | 605 fDrawType = ROTATE; |
545 | 606 |
546 this->fInfo.push(SkObjectParser::ScalarToString(degrees, "SkScalar degrees:
")); | 607 fInfo.push(SkObjectParser::ScalarToString(degrees, "SkScalar degrees: ")); |
547 } | 608 } |
548 | 609 |
549 void Rotate::execute(SkCanvas* canvas) { | 610 void Rotate::execute(SkCanvas* canvas) { |
550 canvas->rotate(this->fDegrees); | 611 canvas->rotate(fDegrees); |
551 } | 612 } |
552 | 613 |
553 Save::Save(SkCanvas::SaveFlags flags) { | 614 Save::Save(SkCanvas::SaveFlags flags) { |
554 fFlags = flags; | 615 fFlags = flags; |
555 fDrawType = SAVE; | 616 fDrawType = SAVE; |
556 fInfo.push(SkObjectParser::SaveFlagsToString(flags)); | 617 fInfo.push(SkObjectParser::SaveFlagsToString(flags)); |
557 } | 618 } |
558 | 619 |
559 void Save::execute(SkCanvas* canvas) { | 620 void Save::execute(SkCanvas* canvas) { |
560 canvas->save(fFlags); | 621 canvas->save(fFlags); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
594 canvas->saveLayer(fBounds.isEmpty() ? NULL : &fBounds, | 655 canvas->saveLayer(fBounds.isEmpty() ? NULL : &fBounds, |
595 fPaintPtr, | 656 fPaintPtr, |
596 fFlags); | 657 fFlags); |
597 } | 658 } |
598 | 659 |
599 void SaveLayer::trackSaveState(int* state) { | 660 void SaveLayer::trackSaveState(int* state) { |
600 (*state)++; | 661 (*state)++; |
601 } | 662 } |
602 | 663 |
603 Scale::Scale(SkScalar sx, SkScalar sy) { | 664 Scale::Scale(SkScalar sx, SkScalar sy) { |
604 this->fSx = sx; | 665 fSx = sx; |
605 this->fSy = sy; | 666 fSy = sy; |
606 this->fDrawType = SCALE; | 667 fDrawType = SCALE; |
607 | 668 |
608 this->fInfo.push(SkObjectParser::ScalarToString(sx, "SkScalar sx: ")); | 669 fInfo.push(SkObjectParser::ScalarToString(sx, "SkScalar sx: ")); |
609 this->fInfo.push(SkObjectParser::ScalarToString(sy, "SkScalar sy: ")); | 670 fInfo.push(SkObjectParser::ScalarToString(sy, "SkScalar sy: ")); |
610 } | 671 } |
611 | 672 |
612 void Scale::execute(SkCanvas* canvas) { | 673 void Scale::execute(SkCanvas* canvas) { |
613 canvas->scale(this->fSx, this->fSy); | 674 canvas->scale(fSx, fSy); |
614 } | 675 } |
615 | 676 |
616 SetMatrix::SetMatrix(const SkMatrix& matrix) { | 677 SetMatrix::SetMatrix(const SkMatrix& matrix) { |
617 this->fMatrix = matrix; | 678 fMatrix = matrix; |
618 this->fDrawType = SET_MATRIX; | 679 fDrawType = SET_MATRIX; |
619 | 680 |
620 this->fInfo.push(SkObjectParser::MatrixToString(matrix)); | 681 fInfo.push(SkObjectParser::MatrixToString(matrix)); |
621 } | 682 } |
622 | 683 |
623 void SetMatrix::execute(SkCanvas* canvas) { | 684 void SetMatrix::execute(SkCanvas* canvas) { |
624 canvas->setMatrix(this->fMatrix); | 685 canvas->setMatrix(fMatrix); |
625 } | 686 } |
626 | 687 |
627 Skew::Skew(SkScalar sx, SkScalar sy) { | 688 Skew::Skew(SkScalar sx, SkScalar sy) { |
628 this->fSx = sx; | 689 fSx = sx; |
629 this->fSy = sy; | 690 fSy = sy; |
630 this->fDrawType = SKEW; | 691 fDrawType = SKEW; |
631 | 692 |
632 this->fInfo.push(SkObjectParser::ScalarToString(sx, "SkScalar sx: ")); | 693 fInfo.push(SkObjectParser::ScalarToString(sx, "SkScalar sx: ")); |
633 this->fInfo.push(SkObjectParser::ScalarToString(sy, "SkScalar sy: ")); | 694 fInfo.push(SkObjectParser::ScalarToString(sy, "SkScalar sy: ")); |
634 } | 695 } |
635 | 696 |
636 void Skew::execute(SkCanvas* canvas) { | 697 void Skew::execute(SkCanvas* canvas) { |
637 canvas->skew(this->fSx, this->fSy); | 698 canvas->skew(fSx, fSy); |
638 } | 699 } |
639 | 700 |
640 Translate::Translate(SkScalar dx, SkScalar dy) { | 701 Translate::Translate(SkScalar dx, SkScalar dy) { |
641 this->fDx = dx; | 702 fDx = dx; |
642 this->fDy = dy; | 703 fDy = dy; |
643 this->fDrawType = TRANSLATE; | 704 fDrawType = TRANSLATE; |
644 | 705 |
645 this->fInfo.push(SkObjectParser::ScalarToString(dx, "SkScalar dx: ")); | 706 fInfo.push(SkObjectParser::ScalarToString(dx, "SkScalar dx: ")); |
646 this->fInfo.push(SkObjectParser::ScalarToString(dy, "SkScalar dy: ")); | 707 fInfo.push(SkObjectParser::ScalarToString(dy, "SkScalar dy: ")); |
647 } | 708 } |
648 | 709 |
649 void Translate::execute(SkCanvas* canvas) { | 710 void Translate::execute(SkCanvas* canvas) { |
650 canvas->translate(this->fDx, this->fDy); | 711 canvas->translate(fDx, fDy); |
651 } | 712 } |
OLD | NEW |