| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2011 Google Inc. | 3 * Copyright 2011 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 #include <new> | 8 #include <new> |
| 9 #include "SkBBoxHierarchy.h" | 9 #include "SkBBoxHierarchy.h" |
| 10 #include "SkOffsetTable.h" | 10 #include "SkOffsetTable.h" |
| (...skipping 947 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 958 case POP_CULL: | 958 case POP_CULL: |
| 959 canvas.popCull(); | 959 canvas.popCull(); |
| 960 break; | 960 break; |
| 961 case CONCAT: { | 961 case CONCAT: { |
| 962 SkMatrix matrix; | 962 SkMatrix matrix; |
| 963 this->getMatrix(reader, &matrix); | 963 this->getMatrix(reader, &matrix); |
| 964 canvas.concat(matrix); | 964 canvas.concat(matrix); |
| 965 break; | 965 break; |
| 966 } | 966 } |
| 967 case DRAW_BITMAP: { | 967 case DRAW_BITMAP: { |
| 968 const SkPaint* paint = getPaint(reader); | 968 const SkPaint* paint = this->getPaint(reader); |
| 969 const SkBitmap& bitmap = getBitmap(reader); | 969 const SkBitmap& bitmap = this->getBitmap(reader); |
| 970 const SkPoint& loc = reader.skipT<SkPoint>(); | 970 const SkPoint& loc = reader.skipT<SkPoint>(); |
| 971 canvas.drawBitmap(bitmap, loc.fX, loc.fY, paint); | 971 canvas.drawBitmap(bitmap, loc.fX, loc.fY, paint); |
| 972 } break; | 972 } break; |
| 973 case DRAW_BITMAP_RECT_TO_RECT: { | 973 case DRAW_BITMAP_RECT_TO_RECT: { |
| 974 const SkPaint* paint = getPaint(reader); | 974 const SkPaint* paint = this->getPaint(reader); |
| 975 const SkBitmap& bitmap = getBitmap(reader); | 975 const SkBitmap& bitmap = this->getBitmap(reader); |
| 976 const SkRect* src = this->getRectPtr(reader); // may be null | 976 const SkRect* src = this->getRectPtr(reader); // may be null |
| 977 const SkRect& dst = reader.skipT<SkRect>(); // required | 977 const SkRect& dst = reader.skipT<SkRect>(); // required |
| 978 SkCanvas::DrawBitmapRectFlags flags; | 978 SkCanvas::DrawBitmapRectFlags flags; |
| 979 flags = (SkCanvas::DrawBitmapRectFlags) reader.readInt(); | 979 flags = (SkCanvas::DrawBitmapRectFlags) reader.readInt(); |
| 980 canvas.drawBitmapRectToRect(bitmap, src, dst, paint, flags); | 980 canvas.drawBitmapRectToRect(bitmap, src, dst, paint, flags); |
| 981 } break; | 981 } break; |
| 982 case DRAW_BITMAP_MATRIX: { | 982 case DRAW_BITMAP_MATRIX: { |
| 983 const SkPaint* paint = getPaint(reader); | 983 const SkPaint* paint = this->getPaint(reader); |
| 984 const SkBitmap& bitmap = getBitmap(reader); | 984 const SkBitmap& bitmap = this->getBitmap(reader); |
| 985 SkMatrix matrix; | 985 SkMatrix matrix; |
| 986 this->getMatrix(reader, &matrix); | 986 this->getMatrix(reader, &matrix); |
| 987 canvas.drawBitmapMatrix(bitmap, matrix, paint); | 987 canvas.drawBitmapMatrix(bitmap, matrix, paint); |
| 988 } break; | 988 } break; |
| 989 case DRAW_BITMAP_NINE: { | 989 case DRAW_BITMAP_NINE: { |
| 990 const SkPaint* paint = getPaint(reader); | 990 const SkPaint* paint = this->getPaint(reader); |
| 991 const SkBitmap& bitmap = getBitmap(reader); | 991 const SkBitmap& bitmap = this->getBitmap(reader); |
| 992 const SkIRect& src = reader.skipT<SkIRect>(); | 992 const SkIRect& src = reader.skipT<SkIRect>(); |
| 993 const SkRect& dst = reader.skipT<SkRect>(); | 993 const SkRect& dst = reader.skipT<SkRect>(); |
| 994 canvas.drawBitmapNine(bitmap, src, dst, paint); | 994 canvas.drawBitmapNine(bitmap, src, dst, paint); |
| 995 } break; | 995 } break; |
| 996 case DRAW_CLEAR: | 996 case DRAW_CLEAR: |
| 997 canvas.clear(reader.readInt()); | 997 canvas.clear(reader.readInt()); |
| 998 break; | 998 break; |
| 999 case DRAW_DATA: { | 999 case DRAW_DATA: { |
| 1000 size_t length = reader.readInt(); | 1000 size_t length = reader.readInt(); |
| 1001 canvas.drawData(reader.skip(length), length); | 1001 canvas.drawData(reader.skip(length), length); |
| 1002 // skip handles padding the read out to a multiple of 4 | 1002 // skip handles padding the read out to a multiple of 4 |
| 1003 } break; | 1003 } break; |
| 1004 case DRAW_DRRECT: { | 1004 case DRAW_DRRECT: { |
| 1005 const SkPaint& paint = *getPaint(reader); | 1005 const SkPaint& paint = *this->getPaint(reader); |
| 1006 SkRRect outer, inner; | 1006 SkRRect outer, inner; |
| 1007 reader.readRRect(&outer); | 1007 reader.readRRect(&outer); |
| 1008 reader.readRRect(&inner); | 1008 reader.readRRect(&inner); |
| 1009 canvas.drawDRRect(outer, inner, paint); | 1009 canvas.drawDRRect(outer, inner, paint); |
| 1010 } break; | 1010 } break; |
| 1011 case BEGIN_COMMENT_GROUP: { | 1011 case BEGIN_COMMENT_GROUP: { |
| 1012 const char* desc = reader.readString(); | 1012 const char* desc = reader.readString(); |
| 1013 canvas.beginCommentGroup(desc); | 1013 canvas.beginCommentGroup(desc); |
| 1014 } break; | 1014 } break; |
| 1015 case COMMENT: { | 1015 case COMMENT: { |
| 1016 const char* kywd = reader.readString(); | 1016 const char* kywd = reader.readString(); |
| 1017 const char* value = reader.readString(); | 1017 const char* value = reader.readString(); |
| 1018 canvas.addComment(kywd, value); | 1018 canvas.addComment(kywd, value); |
| 1019 } break; | 1019 } break; |
| 1020 case END_COMMENT_GROUP: { | 1020 case END_COMMENT_GROUP: { |
| 1021 canvas.endCommentGroup(); | 1021 canvas.endCommentGroup(); |
| 1022 } break; | 1022 } break; |
| 1023 case DRAW_OVAL: { | 1023 case DRAW_OVAL: { |
| 1024 const SkPaint& paint = *getPaint(reader); | 1024 const SkPaint& paint = *this->getPaint(reader); |
| 1025 canvas.drawOval(reader.skipT<SkRect>(), paint); | 1025 canvas.drawOval(reader.skipT<SkRect>(), paint); |
| 1026 } break; | 1026 } break; |
| 1027 case DRAW_PAINT: | 1027 case DRAW_PAINT: |
| 1028 canvas.drawPaint(*getPaint(reader)); | 1028 canvas.drawPaint(*this->getPaint(reader)); |
| 1029 break; | 1029 break; |
| 1030 case DRAW_PATH: { | 1030 case DRAW_PATH: { |
| 1031 const SkPaint& paint = *getPaint(reader); | 1031 const SkPaint& paint = *this->getPaint(reader); |
| 1032 canvas.drawPath(getPath(reader), paint); | 1032 canvas.drawPath(getPath(reader), paint); |
| 1033 } break; | 1033 } break; |
| 1034 case DRAW_PICTURE: | 1034 case DRAW_PICTURE: |
| 1035 canvas.drawPicture(getPicture(reader)); | 1035 canvas.drawPicture(this->getPicture(reader)); |
| 1036 break; | 1036 break; |
| 1037 case DRAW_POINTS: { | 1037 case DRAW_POINTS: { |
| 1038 const SkPaint& paint = *getPaint(reader); | 1038 const SkPaint& paint = *this->getPaint(reader); |
| 1039 SkCanvas::PointMode mode = (SkCanvas::PointMode)reader.readInt()
; | 1039 SkCanvas::PointMode mode = (SkCanvas::PointMode)reader.readInt()
; |
| 1040 size_t count = reader.readInt(); | 1040 size_t count = reader.readInt(); |
| 1041 const SkPoint* pts = (const SkPoint*)reader.skip(sizeof(SkPoint)
* count); | 1041 const SkPoint* pts = (const SkPoint*)reader.skip(sizeof(SkPoint)
* count); |
| 1042 canvas.drawPoints(mode, count, pts, paint); | 1042 canvas.drawPoints(mode, count, pts, paint); |
| 1043 } break; | 1043 } break; |
| 1044 case DRAW_POS_TEXT: { | 1044 case DRAW_POS_TEXT: { |
| 1045 const SkPaint& paint = *getPaint(reader); | 1045 const SkPaint& paint = *this->getPaint(reader); |
| 1046 getText(reader, &text); | 1046 getText(reader, &text); |
| 1047 size_t points = reader.readInt(); | 1047 size_t points = reader.readInt(); |
| 1048 const SkPoint* pos = (const SkPoint*)reader.skip(points * sizeof
(SkPoint)); | 1048 const SkPoint* pos = (const SkPoint*)reader.skip(points * sizeof
(SkPoint)); |
| 1049 canvas.drawPosText(text.text(), text.length(), pos, paint); | 1049 canvas.drawPosText(text.text(), text.length(), pos, paint); |
| 1050 } break; | 1050 } break; |
| 1051 case DRAW_POS_TEXT_TOP_BOTTOM: { | 1051 case DRAW_POS_TEXT_TOP_BOTTOM: { |
| 1052 const SkPaint& paint = *getPaint(reader); | 1052 const SkPaint& paint = *this->getPaint(reader); |
| 1053 getText(reader, &text); | 1053 getText(reader, &text); |
| 1054 size_t points = reader.readInt(); | 1054 size_t points = reader.readInt(); |
| 1055 const SkPoint* pos = (const SkPoint*)reader.skip(points * sizeof
(SkPoint)); | 1055 const SkPoint* pos = (const SkPoint*)reader.skip(points * sizeof
(SkPoint)); |
| 1056 const SkScalar top = reader.readScalar(); | 1056 const SkScalar top = reader.readScalar(); |
| 1057 const SkScalar bottom = reader.readScalar(); | 1057 const SkScalar bottom = reader.readScalar(); |
| 1058 if (!canvas.quickRejectY(top, bottom)) { | 1058 if (!canvas.quickRejectY(top, bottom)) { |
| 1059 canvas.drawPosText(text.text(), text.length(), pos, paint); | 1059 canvas.drawPosText(text.text(), text.length(), pos, paint); |
| 1060 } | 1060 } |
| 1061 } break; | 1061 } break; |
| 1062 case DRAW_POS_TEXT_H: { | 1062 case DRAW_POS_TEXT_H: { |
| 1063 const SkPaint& paint = *getPaint(reader); | 1063 const SkPaint& paint = *this->getPaint(reader); |
| 1064 getText(reader, &text); | 1064 getText(reader, &text); |
| 1065 size_t xCount = reader.readInt(); | 1065 size_t xCount = reader.readInt(); |
| 1066 const SkScalar constY = reader.readScalar(); | 1066 const SkScalar constY = reader.readScalar(); |
| 1067 const SkScalar* xpos = (const SkScalar*)reader.skip(xCount * siz
eof(SkScalar)); | 1067 const SkScalar* xpos = (const SkScalar*)reader.skip(xCount * siz
eof(SkScalar)); |
| 1068 canvas.drawPosTextH(text.text(), text.length(), xpos, constY, | 1068 canvas.drawPosTextH(text.text(), text.length(), xpos, constY, |
| 1069 paint); | 1069 paint); |
| 1070 } break; | 1070 } break; |
| 1071 case DRAW_POS_TEXT_H_TOP_BOTTOM: { | 1071 case DRAW_POS_TEXT_H_TOP_BOTTOM: { |
| 1072 const SkPaint& paint = *getPaint(reader); | 1072 const SkPaint& paint = *this->getPaint(reader); |
| 1073 getText(reader, &text); | 1073 getText(reader, &text); |
| 1074 size_t xCount = reader.readInt(); | 1074 size_t xCount = reader.readInt(); |
| 1075 const SkScalar* xpos = (const SkScalar*)reader.skip((3 + xCount)
* sizeof(SkScalar)); | 1075 const SkScalar* xpos = (const SkScalar*)reader.skip((3 + xCount)
* sizeof(SkScalar)); |
| 1076 const SkScalar top = *xpos++; | 1076 const SkScalar top = *xpos++; |
| 1077 const SkScalar bottom = *xpos++; | 1077 const SkScalar bottom = *xpos++; |
| 1078 const SkScalar constY = *xpos++; | 1078 const SkScalar constY = *xpos++; |
| 1079 if (!canvas.quickRejectY(top, bottom)) { | 1079 if (!canvas.quickRejectY(top, bottom)) { |
| 1080 canvas.drawPosTextH(text.text(), text.length(), xpos, | 1080 canvas.drawPosTextH(text.text(), text.length(), xpos, |
| 1081 constY, paint); | 1081 constY, paint); |
| 1082 } | 1082 } |
| 1083 } break; | 1083 } break; |
| 1084 case DRAW_RECT: { | 1084 case DRAW_RECT: { |
| 1085 const SkPaint& paint = *getPaint(reader); | 1085 const SkPaint& paint = *this->getPaint(reader); |
| 1086 canvas.drawRect(reader.skipT<SkRect>(), paint); | 1086 canvas.drawRect(reader.skipT<SkRect>(), paint); |
| 1087 } break; | 1087 } break; |
| 1088 case DRAW_RRECT: { | 1088 case DRAW_RRECT: { |
| 1089 const SkPaint& paint = *getPaint(reader); | 1089 const SkPaint& paint = *this->getPaint(reader); |
| 1090 SkRRect rrect; | 1090 SkRRect rrect; |
| 1091 reader.readRRect(&rrect); | 1091 reader.readRRect(&rrect); |
| 1092 canvas.drawRRect(rrect, paint); | 1092 canvas.drawRRect(rrect, paint); |
| 1093 } break; | 1093 } break; |
| 1094 case DRAW_SPRITE: { | 1094 case DRAW_SPRITE: { |
| 1095 const SkPaint* paint = getPaint(reader); | 1095 const SkPaint* paint = this->getPaint(reader); |
| 1096 const SkBitmap& bitmap = getBitmap(reader); | 1096 const SkBitmap& bitmap = this->getBitmap(reader); |
| 1097 int left = reader.readInt(); | 1097 int left = reader.readInt(); |
| 1098 int top = reader.readInt(); | 1098 int top = reader.readInt(); |
| 1099 canvas.drawSprite(bitmap, left, top, paint); | 1099 canvas.drawSprite(bitmap, left, top, paint); |
| 1100 } break; | 1100 } break; |
| 1101 case DRAW_TEXT: { | 1101 case DRAW_TEXT: { |
| 1102 const SkPaint& paint = *getPaint(reader); | 1102 const SkPaint& paint = *this->getPaint(reader); |
| 1103 getText(reader, &text); | 1103 this->getText(reader, &text); |
| 1104 SkScalar x = reader.readScalar(); | 1104 SkScalar x = reader.readScalar(); |
| 1105 SkScalar y = reader.readScalar(); | 1105 SkScalar y = reader.readScalar(); |
| 1106 canvas.drawText(text.text(), text.length(), x, y, paint); | 1106 canvas.drawText(text.text(), text.length(), x, y, paint); |
| 1107 } break; | 1107 } break; |
| 1108 case DRAW_TEXT_TOP_BOTTOM: { | 1108 case DRAW_TEXT_TOP_BOTTOM: { |
| 1109 const SkPaint& paint = *getPaint(reader); | 1109 const SkPaint& paint = *this->getPaint(reader); |
| 1110 getText(reader, &text); | 1110 this->getText(reader, &text); |
| 1111 const SkScalar* ptr = (const SkScalar*)reader.skip(4 * sizeof(Sk
Scalar)); | 1111 const SkScalar* ptr = (const SkScalar*)reader.skip(4 * sizeof(Sk
Scalar)); |
| 1112 // ptr[0] == x | 1112 // ptr[0] == x |
| 1113 // ptr[1] == y | 1113 // ptr[1] == y |
| 1114 // ptr[2] == top | 1114 // ptr[2] == top |
| 1115 // ptr[3] == bottom | 1115 // ptr[3] == bottom |
| 1116 if (!canvas.quickRejectY(ptr[2], ptr[3])) { | 1116 if (!canvas.quickRejectY(ptr[2], ptr[3])) { |
| 1117 canvas.drawText(text.text(), text.length(), ptr[0], ptr[1], | 1117 canvas.drawText(text.text(), text.length(), ptr[0], ptr[1], |
| 1118 paint); | 1118 paint); |
| 1119 } | 1119 } |
| 1120 } break; | 1120 } break; |
| 1121 case DRAW_TEXT_ON_PATH: { | 1121 case DRAW_TEXT_ON_PATH: { |
| 1122 const SkPaint& paint = *getPaint(reader); | 1122 const SkPaint& paint = *this->getPaint(reader); |
| 1123 getText(reader, &text); | 1123 getText(reader, &text); |
| 1124 const SkPath& path = getPath(reader); | 1124 const SkPath& path = this->getPath(reader); |
| 1125 SkMatrix matrix; | 1125 SkMatrix matrix; |
| 1126 this->getMatrix(reader, &matrix); | 1126 this->getMatrix(reader, &matrix); |
| 1127 canvas.drawTextOnPath(text.text(), text.length(), path, &matrix,
paint); | 1127 canvas.drawTextOnPath(text.text(), text.length(), path, &matrix,
paint); |
| 1128 } break; | 1128 } break; |
| 1129 case DRAW_VERTICES: { | 1129 case DRAW_VERTICES: { |
| 1130 SkAutoTUnref<SkXfermode> xfer; | 1130 SkAutoTUnref<SkXfermode> xfer; |
| 1131 const SkPaint& paint = *getPaint(reader); | 1131 const SkPaint& paint = *this->getPaint(reader); |
| 1132 DrawVertexFlags flags = (DrawVertexFlags)reader.readInt(); | 1132 DrawVertexFlags flags = (DrawVertexFlags)reader.readInt(); |
| 1133 SkCanvas::VertexMode vmode = (SkCanvas::VertexMode)reader.readIn
t(); | 1133 SkCanvas::VertexMode vmode = (SkCanvas::VertexMode)reader.readIn
t(); |
| 1134 int vCount = reader.readInt(); | 1134 int vCount = reader.readInt(); |
| 1135 const SkPoint* verts = (const SkPoint*)reader.skip( | 1135 const SkPoint* verts = (const SkPoint*)reader.skip( |
| 1136 vCount * sizeof(SkPoint)); | 1136 vCount * sizeof(SkPoint)); |
| 1137 const SkPoint* texs = NULL; | 1137 const SkPoint* texs = NULL; |
| 1138 const SkColor* colors = NULL; | 1138 const SkColor* colors = NULL; |
| 1139 const uint16_t* indices = NULL; | 1139 const uint16_t* indices = NULL; |
| 1140 int iCount = 0; | 1140 int iCount = 0; |
| 1141 if (flags & DRAW_VERTICES_HAS_TEXS) { | 1141 if (flags & DRAW_VERTICES_HAS_TEXS) { |
| (...skipping 22 matching lines...) Expand all Loading... |
| 1164 case RESTORE: | 1164 case RESTORE: |
| 1165 canvas.restore(); | 1165 canvas.restore(); |
| 1166 break; | 1166 break; |
| 1167 case ROTATE: | 1167 case ROTATE: |
| 1168 canvas.rotate(reader.readScalar()); | 1168 canvas.rotate(reader.readScalar()); |
| 1169 break; | 1169 break; |
| 1170 case SAVE: | 1170 case SAVE: |
| 1171 canvas.save((SkCanvas::SaveFlags) reader.readInt()); | 1171 canvas.save((SkCanvas::SaveFlags) reader.readInt()); |
| 1172 break; | 1172 break; |
| 1173 case SAVE_LAYER: { | 1173 case SAVE_LAYER: { |
| 1174 const SkRect* boundsPtr = getRectPtr(reader); | 1174 const SkRect* boundsPtr = this->getRectPtr(reader); |
| 1175 const SkPaint* paint = getPaint(reader); | 1175 const SkPaint* paint = this->getPaint(reader); |
| 1176 canvas.saveLayer(boundsPtr, paint, (SkCanvas::SaveFlags) reader.
readInt()); | 1176 canvas.saveLayer(boundsPtr, paint, (SkCanvas::SaveFlags) reader.
readInt()); |
| 1177 } break; | 1177 } break; |
| 1178 case SCALE: { | 1178 case SCALE: { |
| 1179 SkScalar sx = reader.readScalar(); | 1179 SkScalar sx = reader.readScalar(); |
| 1180 SkScalar sy = reader.readScalar(); | 1180 SkScalar sy = reader.readScalar(); |
| 1181 canvas.scale(sx, sy); | 1181 canvas.scale(sx, sy); |
| 1182 } break; | 1182 } break; |
| 1183 case SET_MATRIX: { | 1183 case SET_MATRIX: { |
| 1184 SkMatrix matrix; | 1184 SkMatrix matrix; |
| 1185 this->getMatrix(reader, &matrix); | 1185 this->getMatrix(reader, &matrix); |
| (...skipping 544 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1730 for (index = 0; index < fPictureCount; index++) | 1730 for (index = 0; index < fPictureCount; index++) |
| 1731 bufferPtr += snprintf(bufferPtr, DUMP_BUFFER_SIZE - (bufferPtr - pBuffer
), | 1731 bufferPtr += snprintf(bufferPtr, DUMP_BUFFER_SIZE - (bufferPtr - pBuffer
), |
| 1732 "picture%p, ", fPictureRefs[index]); | 1732 "picture%p, ", fPictureRefs[index]); |
| 1733 if (fPictureCount > 0) | 1733 if (fPictureCount > 0) |
| 1734 SkDebugf("%s0};\n", pBuffer); | 1734 SkDebugf("%s0};\n", pBuffer); |
| 1735 | 1735 |
| 1736 const_cast<SkPicturePlayback*>(this)->dumpStream(); | 1736 const_cast<SkPicturePlayback*>(this)->dumpStream(); |
| 1737 } | 1737 } |
| 1738 | 1738 |
| 1739 #endif | 1739 #endif |
| OLD | NEW |