| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2008 The Android Open Source Project | 3 * Copyright 2008 The Android Open Source Project |
| 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 "SkCanvas.h" | 10 #include "SkCanvas.h" |
| (...skipping 812 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 823 | 823 |
| 824 fMCRec = newTop; | 824 fMCRec = newTop; |
| 825 | 825 |
| 826 if (SkCanvas::kClip_SaveFlag & flags) { | 826 if (SkCanvas::kClip_SaveFlag & flags) { |
| 827 fClipStack.save(); | 827 fClipStack.save(); |
| 828 } | 828 } |
| 829 | 829 |
| 830 return saveCount; | 830 return saveCount; |
| 831 } | 831 } |
| 832 | 832 |
| 833 void SkCanvas::willSave(SaveFlags) { | |
| 834 // Do nothing. Subclasses may do something. | |
| 835 } | |
| 836 | |
| 837 int SkCanvas::save() { | 833 int SkCanvas::save() { |
| 838 this->willSave(kMatrixClip_SaveFlag); | 834 this->willSave(kMatrixClip_SaveFlag); |
| 839 return this->internalSave(kMatrixClip_SaveFlag); | 835 return this->internalSave(kMatrixClip_SaveFlag); |
| 840 } | 836 } |
| 841 | 837 |
| 842 int SkCanvas::save(SaveFlags flags) { | 838 int SkCanvas::save(SaveFlags flags) { |
| 843 this->willSave(flags); | 839 this->willSave(flags); |
| 844 // call shared impl | 840 // call shared impl |
| 845 return this->internalSave(flags); | 841 return this->internalSave(flags); |
| 846 } | 842 } |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 890 return false; | 886 return false; |
| 891 } | 887 } |
| 892 } | 888 } |
| 893 | 889 |
| 894 if (intersection) { | 890 if (intersection) { |
| 895 *intersection = ir; | 891 *intersection = ir; |
| 896 } | 892 } |
| 897 return true; | 893 return true; |
| 898 } | 894 } |
| 899 | 895 |
| 900 SkCanvas::SaveLayerStrategy SkCanvas::willSaveLayer(const SkRect*, const SkPaint
*, SaveFlags) { | |
| 901 | |
| 902 // Do nothing. Subclasses may do something. | |
| 903 return kFullLayer_SaveLayerStrategy; | |
| 904 } | |
| 905 | |
| 906 int SkCanvas::saveLayer(const SkRect* bounds, const SkPaint* paint) { | 896 int SkCanvas::saveLayer(const SkRect* bounds, const SkPaint* paint) { |
| 907 SaveLayerStrategy strategy = this->willSaveLayer(bounds, paint, kARGB_ClipLa
yer_SaveFlag); | 897 SaveLayerStrategy strategy = this->willSaveLayer(bounds, paint, kARGB_ClipLa
yer_SaveFlag); |
| 908 return this->internalSaveLayer(bounds, paint, kARGB_ClipLayer_SaveFlag, fals
e, strategy); | 898 return this->internalSaveLayer(bounds, paint, kARGB_ClipLayer_SaveFlag, fals
e, strategy); |
| 909 } | 899 } |
| 910 | 900 |
| 911 int SkCanvas::saveLayer(const SkRect* bounds, const SkPaint* paint, | 901 int SkCanvas::saveLayer(const SkRect* bounds, const SkPaint* paint, |
| 912 SaveFlags flags) { | 902 SaveFlags flags) { |
| 913 SaveLayerStrategy strategy = this->willSaveLayer(bounds, paint, flags); | 903 SaveLayerStrategy strategy = this->willSaveLayer(bounds, paint, flags); |
| 914 return this->internalSaveLayer(bounds, paint, flags, false, strategy); | 904 return this->internalSaveLayer(bounds, paint, flags, false, strategy); |
| 915 } | 905 } |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 992 SaveFlags flags) { | 982 SaveFlags flags) { |
| 993 if (0xFF == alpha) { | 983 if (0xFF == alpha) { |
| 994 return this->saveLayer(bounds, NULL, flags); | 984 return this->saveLayer(bounds, NULL, flags); |
| 995 } else { | 985 } else { |
| 996 SkPaint tmpPaint; | 986 SkPaint tmpPaint; |
| 997 tmpPaint.setAlpha(alpha); | 987 tmpPaint.setAlpha(alpha); |
| 998 return this->saveLayer(bounds, &tmpPaint, flags); | 988 return this->saveLayer(bounds, &tmpPaint, flags); |
| 999 } | 989 } |
| 1000 } | 990 } |
| 1001 | 991 |
| 1002 void SkCanvas::willRestore() { | |
| 1003 // Do nothing. Subclasses may do something. | |
| 1004 } | |
| 1005 | |
| 1006 void SkCanvas::restore() { | 992 void SkCanvas::restore() { |
| 1007 // check for underflow | 993 // check for underflow |
| 1008 if (fMCStack.count() > 1) { | 994 if (fMCStack.count() > 1) { |
| 1009 this->willRestore(); | 995 this->willRestore(); |
| 1010 this->internalRestore(); | 996 this->internalRestore(); |
| 1011 } | 997 } |
| 1012 } | 998 } |
| 1013 | 999 |
| 1014 void SkCanvas::internalRestore() { | 1000 void SkCanvas::internalRestore() { |
| 1015 SkASSERT(fMCStack.count() != 0); | 1001 SkASSERT(fMCStack.count() != 0); |
| (...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1337 m.setRotate(degrees); | 1323 m.setRotate(degrees); |
| 1338 this->concat(m); | 1324 this->concat(m); |
| 1339 } | 1325 } |
| 1340 | 1326 |
| 1341 void SkCanvas::skew(SkScalar sx, SkScalar sy) { | 1327 void SkCanvas::skew(SkScalar sx, SkScalar sy) { |
| 1342 SkMatrix m; | 1328 SkMatrix m; |
| 1343 m.setSkew(sx, sy); | 1329 m.setSkew(sx, sy); |
| 1344 this->concat(m); | 1330 this->concat(m); |
| 1345 } | 1331 } |
| 1346 | 1332 |
| 1347 void SkCanvas::didConcat(const SkMatrix&) { | |
| 1348 // Do nothing. Subclasses may do something. | |
| 1349 } | |
| 1350 | |
| 1351 void SkCanvas::concat(const SkMatrix& matrix) { | 1333 void SkCanvas::concat(const SkMatrix& matrix) { |
| 1352 if (matrix.isIdentity()) { | 1334 if (matrix.isIdentity()) { |
| 1353 return; | 1335 return; |
| 1354 } | 1336 } |
| 1355 | 1337 |
| 1356 fDeviceCMDirty = true; | 1338 fDeviceCMDirty = true; |
| 1357 fCachedLocalClipBoundsDirty = true; | 1339 fCachedLocalClipBoundsDirty = true; |
| 1358 fMCRec->fMatrix->preConcat(matrix); | 1340 fMCRec->fMatrix->preConcat(matrix); |
| 1359 | 1341 |
| 1360 this->didConcat(matrix); | 1342 this->didConcat(matrix); |
| 1361 } | 1343 } |
| 1362 | 1344 |
| 1363 void SkCanvas::didSetMatrix(const SkMatrix&) { | |
| 1364 // Do nothing. Subclasses may do something. | |
| 1365 } | |
| 1366 | |
| 1367 void SkCanvas::setMatrix(const SkMatrix& matrix) { | 1345 void SkCanvas::setMatrix(const SkMatrix& matrix) { |
| 1368 fDeviceCMDirty = true; | 1346 fDeviceCMDirty = true; |
| 1369 fCachedLocalClipBoundsDirty = true; | 1347 fCachedLocalClipBoundsDirty = true; |
| 1370 *fMCRec->fMatrix = matrix; | 1348 *fMCRec->fMatrix = matrix; |
| 1371 this->didSetMatrix(matrix); | 1349 this->didSetMatrix(matrix); |
| 1372 } | 1350 } |
| 1373 | 1351 |
| 1374 void SkCanvas::resetMatrix() { | 1352 void SkCanvas::resetMatrix() { |
| 1375 SkMatrix matrix; | 1353 SkMatrix matrix; |
| 1376 | 1354 |
| (...skipping 1273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2650 if (!supported_for_raster_canvas(info)) { | 2628 if (!supported_for_raster_canvas(info)) { |
| 2651 return NULL; | 2629 return NULL; |
| 2652 } | 2630 } |
| 2653 | 2631 |
| 2654 SkBitmap bitmap; | 2632 SkBitmap bitmap; |
| 2655 if (!bitmap.installPixels(info, pixels, rowBytes)) { | 2633 if (!bitmap.installPixels(info, pixels, rowBytes)) { |
| 2656 return NULL; | 2634 return NULL; |
| 2657 } | 2635 } |
| 2658 return SkNEW_ARGS(SkCanvas, (bitmap)); | 2636 return SkNEW_ARGS(SkCanvas, (bitmap)); |
| 2659 } | 2637 } |
| OLD | NEW |