Chromium Code Reviews| 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 "SkPictureRecord.h" | 8 #include "SkPictureRecord.h" |
| 9 #include "SkTSearch.h" | 9 #include "SkTSearch.h" |
| 10 #include "SkPixelRef.h" | 10 #include "SkPixelRef.h" |
| (...skipping 1088 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1099 #ifdef SK_DEBUG_SIZE | 1099 #ifdef SK_DEBUG_SIZE |
| 1100 fPointBytes += fWriter.size() - start; | 1100 fPointBytes += fWriter.size() - start; |
| 1101 fPointWrites += points; | 1101 fPointWrites += points; |
| 1102 #endif | 1102 #endif |
| 1103 validate(initialOffset, size); | 1103 validate(initialOffset, size); |
| 1104 } | 1104 } |
| 1105 | 1105 |
| 1106 void SkPictureRecord::drawPosTextH(const void* text, size_t byteLength, | 1106 void SkPictureRecord::drawPosTextH(const void* text, size_t byteLength, |
| 1107 const SkScalar xpos[], SkScalar constY, | 1107 const SkScalar xpos[], SkScalar constY, |
| 1108 const SkPaint& paint) { | 1108 const SkPaint& paint) { |
| 1109 drawPosTextHImpl(text, byteLength, xpos, constY, paint, NULL); | |
|
reed1
2013/08/20 17:59:23
Might be clearer if we called getFlatPaintData her
| |
| 1110 | |
| 1111 } | |
| 1112 void SkPictureRecord::drawPosTextHImpl(const void* text, size_t byteLength, | |
| 1113 const SkScalar xpos[], SkScalar constY, | |
| 1114 const SkPaint& paint, const SkFlatData* flatPaintData) { | |
| 1109 size_t points = paint.countText(text, byteLength); | 1115 size_t points = paint.countText(text, byteLength); |
| 1110 if (0 == points) | 1116 if (0 == points) |
| 1111 return; | 1117 return; |
| 1112 | 1118 |
| 1113 bool fast = !paint.isVerticalText() && paint.canComputeFastBounds(); | 1119 bool fast = !paint.isVerticalText() && paint.canComputeFastBounds(); |
| 1114 | 1120 |
| 1115 // op + paint index + length + 'length' worth of data + num points | 1121 // op + paint index + length + 'length' worth of data + num points |
| 1116 uint32_t size = 3 * kUInt32Size + SkAlign4(byteLength) + 1 * kUInt32Size; | 1122 uint32_t size = 3 * kUInt32Size + SkAlign4(byteLength) + 1 * kUInt32Size; |
| 1117 if (fast) { | 1123 if (fast) { |
| 1118 size += 2 * sizeof(SkScalar); // + top & bottom | 1124 size += 2 * sizeof(SkScalar); // + top & bottom |
| 1119 } | 1125 } |
| 1120 // + y + the actual points | 1126 // + y + the actual points |
| 1121 size += 1 * kUInt32Size + points * sizeof(SkScalar); | 1127 size += 1 * kUInt32Size + points * sizeof(SkScalar); |
| 1122 | |
| 1123 uint32_t initialOffset = this->addDraw(fast ? DRAW_POS_TEXT_H_TOP_BOTTOM : D RAW_POS_TEXT_H, | 1128 uint32_t initialOffset = this->addDraw(fast ? DRAW_POS_TEXT_H_TOP_BOTTOM : D RAW_POS_TEXT_H, |
| 1124 &size); | 1129 &size); |
| 1125 const SkFlatData* flatPaintData = addPaint(paint); | 1130 if (NULL == flatPaintData) { |
| 1131 flatPaintData = addPaint(paint); | |
| 1132 } else { | |
| 1133 addFlatPaint(flatPaintData); | |
| 1134 } | |
| 1126 SkASSERT(flatPaintData); | 1135 SkASSERT(flatPaintData); |
| 1136 | |
| 1127 addText(text, byteLength); | 1137 addText(text, byteLength); |
| 1128 addInt(points); | 1138 addInt(points); |
| 1129 | 1139 |
| 1130 #ifdef SK_DEBUG_SIZE | 1140 #ifdef SK_DEBUG_SIZE |
| 1131 size_t start = fWriter.size(); | 1141 size_t start = fWriter.size(); |
| 1132 #endif | 1142 #endif |
| 1133 if (fast) { | 1143 if (fast) { |
| 1134 addFontMetricsTopBottom(paint, *flatPaintData, constY, constY); | 1144 addFontMetricsTopBottom(paint, *flatPaintData, constY, constY); |
| 1135 } | 1145 } |
| 1136 addScalar(constY); | 1146 addScalar(constY); |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1261 } | 1271 } |
| 1262 | 1272 |
| 1263 void SkPictureRecord::addMatrix(const SkMatrix& matrix) { | 1273 void SkPictureRecord::addMatrix(const SkMatrix& matrix) { |
| 1264 addMatrixPtr(&matrix); | 1274 addMatrixPtr(&matrix); |
| 1265 } | 1275 } |
| 1266 | 1276 |
| 1267 void SkPictureRecord::addMatrixPtr(const SkMatrix* matrix) { | 1277 void SkPictureRecord::addMatrixPtr(const SkMatrix* matrix) { |
| 1268 this->addInt(matrix ? fMatrices.find(*matrix) : 0); | 1278 this->addInt(matrix ? fMatrices.find(*matrix) : 0); |
| 1269 } | 1279 } |
| 1270 | 1280 |
| 1281 const SkFlatData* SkPictureRecord::getFlatPaintData(const SkPaint& paint) { | |
| 1282 return fPaints.findAndReturnFlat(paint); | |
| 1283 } | |
| 1284 | |
| 1271 const SkFlatData* SkPictureRecord::addPaintPtr(const SkPaint* paint) { | 1285 const SkFlatData* SkPictureRecord::addPaintPtr(const SkPaint* paint) { |
| 1272 const SkFlatData* data = paint ? fPaints.findAndReturnFlat(*paint) : NULL; | 1286 const SkFlatData* data = paint ? getFlatPaintData(*paint) : NULL; |
| 1273 int index = data ? data->index() : 0; | 1287 this->addFlatPaint(data); |
| 1288 return data; | |
| 1289 } | |
| 1290 | |
| 1291 void SkPictureRecord::addFlatPaint(const SkFlatData* flatPaint) { | |
| 1292 int index = flatPaint ? flatPaint->index() : 0; | |
| 1274 this->addInt(index); | 1293 this->addInt(index); |
| 1275 return data; | |
| 1276 } | 1294 } |
| 1277 | 1295 |
| 1278 void SkPictureRecord::addPath(const SkPath& path) { | 1296 void SkPictureRecord::addPath(const SkPath& path) { |
| 1279 if (NULL == fPathHeap) { | 1297 if (NULL == fPathHeap) { |
| 1280 fPathHeap = SkNEW(SkPathHeap); | 1298 fPathHeap = SkNEW(SkPathHeap); |
| 1281 } | 1299 } |
| 1282 addInt(fPathHeap->append(path)); | 1300 addInt(fPathHeap->append(path)); |
| 1283 } | 1301 } |
| 1284 | 1302 |
| 1285 void SkPictureRecord::addPicture(SkPicture& picture) { | 1303 void SkPictureRecord::addPicture(SkPicture& picture) { |
| (...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1485 void SkPictureRecord::validateRegions() const { | 1503 void SkPictureRecord::validateRegions() const { |
| 1486 int count = fRegions.count(); | 1504 int count = fRegions.count(); |
| 1487 SkASSERT((unsigned) count < 0x1000); | 1505 SkASSERT((unsigned) count < 0x1000); |
| 1488 for (int index = 0; index < count; index++) { | 1506 for (int index = 0; index < count; index++) { |
| 1489 const SkFlatData* region = fRegions[index]; | 1507 const SkFlatData* region = fRegions[index]; |
| 1490 SkASSERT(region); | 1508 SkASSERT(region); |
| 1491 // region->validate(); | 1509 // region->validate(); |
| 1492 } | 1510 } |
| 1493 } | 1511 } |
| 1494 #endif | 1512 #endif |
| OLD | NEW |