| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #include "SkPictureRecord.h" | 8 #include "SkPictureRecord.h" |
| 9 #include "SkImage_Base.h" | 9 #include "SkImage_Base.h" |
| 10 #include "SkPatchUtils.h" | 10 #include "SkPatchUtils.h" |
| (...skipping 15 matching lines...) Expand all Loading... |
| 26 | 26 |
| 27 SkPictureRecord::SkPictureRecord(const SkISize& dimensions, uint32_t flags) | 27 SkPictureRecord::SkPictureRecord(const SkISize& dimensions, uint32_t flags) |
| 28 : INHERITED(dimensions.width(), dimensions.height()) | 28 : INHERITED(dimensions.width(), dimensions.height()) |
| 29 , fRecordFlags(flags) | 29 , fRecordFlags(flags) |
| 30 , fInitialSaveCount(kNoInitialSave) { | 30 , fInitialSaveCount(kNoInitialSave) { |
| 31 } | 31 } |
| 32 | 32 |
| 33 SkPictureRecord::~SkPictureRecord() { | 33 SkPictureRecord::~SkPictureRecord() { |
| 34 fImageRefs.unrefAll(); | 34 fImageRefs.unrefAll(); |
| 35 fPictureRefs.unrefAll(); | 35 fPictureRefs.unrefAll(); |
| 36 fDrawableRefs.unrefAll(); |
| 36 fTextBlobRefs.unrefAll(); | 37 fTextBlobRefs.unrefAll(); |
| 37 } | 38 } |
| 38 | 39 |
| 39 /////////////////////////////////////////////////////////////////////////////// | 40 /////////////////////////////////////////////////////////////////////////////// |
| 40 | 41 |
| 41 void SkPictureRecord::willSave() { | 42 void SkPictureRecord::willSave() { |
| 42 // record the offset to us, making it non-positive to distinguish a save | 43 // record the offset to us, making it non-positive to distinguish a save |
| 43 // from a clip entry. | 44 // from a clip entry. |
| 44 fRestoreOffsetStack.push(-(int32_t)fWriter.bytesWritten()); | 45 fRestoreOffsetStack.push(-(int32_t)fWriter.bytesWritten()); |
| 45 this->recordSave(); | 46 this->recordSave(); |
| (...skipping 584 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 630 const SkMatrix& m = matrix ? *matrix : SkMatrix::I(); | 631 const SkMatrix& m = matrix ? *matrix : SkMatrix::I(); |
| 631 size += m.writeToMemory(nullptr) + kUInt32Size; // matrix + paint | 632 size += m.writeToMemory(nullptr) + kUInt32Size; // matrix + paint |
| 632 initialOffset = this->addDraw(DRAW_PICTURE_MATRIX_PAINT, &size); | 633 initialOffset = this->addDraw(DRAW_PICTURE_MATRIX_PAINT, &size); |
| 633 this->addPaintPtr(paint); | 634 this->addPaintPtr(paint); |
| 634 this->addMatrix(m); | 635 this->addMatrix(m); |
| 635 this->addPicture(picture); | 636 this->addPicture(picture); |
| 636 } | 637 } |
| 637 this->validate(initialOffset, size); | 638 this->validate(initialOffset, size); |
| 638 } | 639 } |
| 639 | 640 |
| 641 void SkPictureRecord::onDrawDrawable(SkDrawable* drawable, const SkMatrix* matri
x) { |
| 642 // op + drawable index |
| 643 size_t size = 2 * kUInt32Size; |
| 644 size_t initialOffset; |
| 645 |
| 646 if (nullptr == matrix) { |
| 647 initialOffset = this->addDraw(DRAW_DRAWABLE, &size); |
| 648 this->addDrawable(drawable); |
| 649 } else { |
| 650 size += matrix->writeToMemory(nullptr); // matrix |
| 651 initialOffset = this->addDraw(DRAW_DRAWABLE_MATRIX, &size); |
| 652 this->addMatrix(*matrix); |
| 653 this->addDrawable(drawable); |
| 654 } |
| 655 this->validate(initialOffset, size); |
| 656 } |
| 657 |
| 640 void SkPictureRecord::onDrawVertices(VertexMode vmode, int vertexCount, | 658 void SkPictureRecord::onDrawVertices(VertexMode vmode, int vertexCount, |
| 641 const SkPoint vertices[], const SkPoint tex
s[], | 659 const SkPoint vertices[], const SkPoint tex
s[], |
| 642 const SkColor colors[], SkXfermode* xfer, | 660 const SkColor colors[], SkXfermode* xfer, |
| 643 const uint16_t indices[], int indexCount, | 661 const uint16_t indices[], int indexCount, |
| 644 const SkPaint& paint) { | 662 const SkPaint& paint) { |
| 645 uint32_t flags = 0; | 663 uint32_t flags = 0; |
| 646 if (texs) { | 664 if (texs) { |
| 647 flags |= DRAW_VERTICES_HAS_TEXS; | 665 flags |= DRAW_VERTICES_HAS_TEXS; |
| 648 } | 666 } |
| 649 if (colors) { | 667 if (colors) { |
| (...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 911 int index = fPictureRefs.find(picture); | 929 int index = fPictureRefs.find(picture); |
| 912 if (index < 0) { // not found | 930 if (index < 0) { // not found |
| 913 index = fPictureRefs.count(); | 931 index = fPictureRefs.count(); |
| 914 *fPictureRefs.append() = picture; | 932 *fPictureRefs.append() = picture; |
| 915 picture->ref(); | 933 picture->ref(); |
| 916 } | 934 } |
| 917 // follow the convention of recording a 1-based index | 935 // follow the convention of recording a 1-based index |
| 918 this->addInt(index + 1); | 936 this->addInt(index + 1); |
| 919 } | 937 } |
| 920 | 938 |
| 939 void SkPictureRecord::addDrawable(SkDrawable* drawable) { |
| 940 int index = fDrawableRefs.find(drawable); |
| 941 if (index < 0) { // not found |
| 942 index = fDrawableRefs.count(); |
| 943 *fDrawableRefs.append() = drawable; |
| 944 drawable->ref(); |
| 945 } |
| 946 // follow the convention of recording a 1-based index |
| 947 this->addInt(index + 1); |
| 948 } |
| 949 |
| 921 void SkPictureRecord::addPoint(const SkPoint& point) { | 950 void SkPictureRecord::addPoint(const SkPoint& point) { |
| 922 fWriter.writePoint(point); | 951 fWriter.writePoint(point); |
| 923 } | 952 } |
| 924 | 953 |
| 925 void SkPictureRecord::addPoints(const SkPoint pts[], int count) { | 954 void SkPictureRecord::addPoints(const SkPoint pts[], int count) { |
| 926 fWriter.writeMul4(pts, count * sizeof(SkPoint)); | 955 fWriter.writeMul4(pts, count * sizeof(SkPoint)); |
| 927 } | 956 } |
| 928 | 957 |
| 929 void SkPictureRecord::addNoOp() { | 958 void SkPictureRecord::addNoOp() { |
| 930 size_t size = kUInt32Size; // op | 959 size_t size = kUInt32Size; // op |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 967 | 996 |
| 968 void SkPictureRecord::addTextBlob(const SkTextBlob *blob) { | 997 void SkPictureRecord::addTextBlob(const SkTextBlob *blob) { |
| 969 int index = fTextBlobRefs.count(); | 998 int index = fTextBlobRefs.count(); |
| 970 *fTextBlobRefs.append() = blob; | 999 *fTextBlobRefs.append() = blob; |
| 971 blob->ref(); | 1000 blob->ref(); |
| 972 // follow the convention of recording a 1-based index | 1001 // follow the convention of recording a 1-based index |
| 973 this->addInt(index + 1); | 1002 this->addInt(index + 1); |
| 974 } | 1003 } |
| 975 | 1004 |
| 976 /////////////////////////////////////////////////////////////////////////////// | 1005 /////////////////////////////////////////////////////////////////////////////// |
| OLD | NEW |