| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2008 The Android Open Source Project | 2 * Copyright 2008 The Android Open Source Project |
| 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 "SkCanvas.h" | 8 #include "SkCanvas.h" |
| 9 #include "SkCanvasPriv.h" | 9 #include "SkCanvasPriv.h" |
| 10 #include "SkBitmapDevice.h" | 10 #include "SkBitmapDevice.h" |
| (...skipping 777 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 788 void SkCanvas::restore() { | 788 void SkCanvas::restore() { |
| 789 if (fMCRec->fDeferredSaveCount > 0) { | 789 if (fMCRec->fDeferredSaveCount > 0) { |
| 790 SkASSERT(fSaveCount > 1); | 790 SkASSERT(fSaveCount > 1); |
| 791 fSaveCount -= 1; | 791 fSaveCount -= 1; |
| 792 fMCRec->fDeferredSaveCount -= 1; | 792 fMCRec->fDeferredSaveCount -= 1; |
| 793 } else { | 793 } else { |
| 794 // check for underflow | 794 // check for underflow |
| 795 if (fMCStack.count() > 1) { | 795 if (fMCStack.count() > 1) { |
| 796 this->willRestore(); | 796 this->willRestore(); |
| 797 SkASSERT(fSaveCount > 1); | 797 SkASSERT(fSaveCount > 1); |
| 798 fSaveCount -= 1; |
| 798 this->internalRestore(); | 799 this->internalRestore(); |
| 799 this->didRestore(); | 800 this->didRestore(); |
| 800 } | 801 } |
| 801 } | 802 } |
| 802 } | 803 } |
| 803 | 804 |
| 804 void SkCanvas::restoreToCount(int count) { | 805 void SkCanvas::restoreToCount(int count) { |
| 805 // sanity check | 806 // sanity check |
| 806 if (count < 1) { | 807 if (count < 1) { |
| 807 count = 1; | 808 count = 1; |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 871 *intersection = ir; | 872 *intersection = ir; |
| 872 } | 873 } |
| 873 return true; | 874 return true; |
| 874 } | 875 } |
| 875 | 876 |
| 876 int SkCanvas::saveLayer(const SkRect* bounds, const SkPaint* paint) { | 877 int SkCanvas::saveLayer(const SkRect* bounds, const SkPaint* paint) { |
| 877 if (gIgnoreSaveLayerBounds) { | 878 if (gIgnoreSaveLayerBounds) { |
| 878 bounds = NULL; | 879 bounds = NULL; |
| 879 } | 880 } |
| 880 SaveLayerStrategy strategy = this->willSaveLayer(bounds, paint, kARGB_ClipLa
yer_SaveFlag); | 881 SaveLayerStrategy strategy = this->willSaveLayer(bounds, paint, kARGB_ClipLa
yer_SaveFlag); |
| 882 fSaveCount += 1; |
| 881 this->internalSaveLayer(bounds, paint, kARGB_ClipLayer_SaveFlag, strategy); | 883 this->internalSaveLayer(bounds, paint, kARGB_ClipLayer_SaveFlag, strategy); |
| 882 return this->getSaveCount() - 1; | 884 return this->getSaveCount() - 1; |
| 883 } | 885 } |
| 884 | 886 |
| 885 int SkCanvas::saveLayer(const SkRect* bounds, const SkPaint* paint, SaveFlags fl
ags) { | 887 int SkCanvas::saveLayer(const SkRect* bounds, const SkPaint* paint, SaveFlags fl
ags) { |
| 886 if (gIgnoreSaveLayerBounds) { | 888 if (gIgnoreSaveLayerBounds) { |
| 887 bounds = NULL; | 889 bounds = NULL; |
| 888 } | 890 } |
| 889 SaveLayerStrategy strategy = this->willSaveLayer(bounds, paint, flags); | 891 SaveLayerStrategy strategy = this->willSaveLayer(bounds, paint, flags); |
| 892 fSaveCount += 1; |
| 890 this->internalSaveLayer(bounds, paint, flags, strategy); | 893 this->internalSaveLayer(bounds, paint, flags, strategy); |
| 891 return this->getSaveCount() - 1; | 894 return this->getSaveCount() - 1; |
| 892 } | 895 } |
| 893 | 896 |
| 894 void SkCanvas::internalSaveLayer(const SkRect* bounds, const SkPaint* paint, Sav
eFlags flags, | 897 void SkCanvas::internalSaveLayer(const SkRect* bounds, const SkPaint* paint, Sav
eFlags flags, |
| 895 SaveLayerStrategy strategy) { | 898 SaveLayerStrategy strategy) { |
| 896 #ifndef SK_SUPPORT_LEGACY_CLIPTOLAYERFLAG | 899 #ifndef SK_SUPPORT_LEGACY_CLIPTOLAYERFLAG |
| 897 flags |= kClipToLayer_SaveFlag; | 900 flags |= kClipToLayer_SaveFlag; |
| 898 #endif | 901 #endif |
| 899 | 902 |
| 900 fSaveCount += 1; | |
| 901 | |
| 902 // do this before we create the layer. We don't call the public save() since | 903 // do this before we create the layer. We don't call the public save() since |
| 903 // that would invoke a possibly overridden virtual | 904 // that would invoke a possibly overridden virtual |
| 904 this->internalSave(); | 905 this->internalSave(); |
| 905 | 906 |
| 906 fDeviceCMDirty = true; | 907 fDeviceCMDirty = true; |
| 907 | 908 |
| 908 SkIRect ir; | 909 SkIRect ir; |
| 909 if (!this->clipRectBounds(bounds, flags, &ir, paint ? paint->getImageFilter(
) : NULL)) { | 910 if (!this->clipRectBounds(bounds, flags, &ir, paint ? paint->getImageFilter(
) : NULL)) { |
| 910 return; | 911 return; |
| 911 } | 912 } |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 970 } else { | 971 } else { |
| 971 SkPaint tmpPaint; | 972 SkPaint tmpPaint; |
| 972 tmpPaint.setAlpha(alpha); | 973 tmpPaint.setAlpha(alpha); |
| 973 return this->saveLayer(bounds, &tmpPaint, flags); | 974 return this->saveLayer(bounds, &tmpPaint, flags); |
| 974 } | 975 } |
| 975 } | 976 } |
| 976 | 977 |
| 977 void SkCanvas::internalRestore() { | 978 void SkCanvas::internalRestore() { |
| 978 SkASSERT(fMCStack.count() != 0); | 979 SkASSERT(fMCStack.count() != 0); |
| 979 | 980 |
| 980 fSaveCount -= 1; | |
| 981 | |
| 982 fDeviceCMDirty = true; | 981 fDeviceCMDirty = true; |
| 983 fCachedLocalClipBoundsDirty = true; | 982 fCachedLocalClipBoundsDirty = true; |
| 984 | 983 |
| 985 fClipStack->restore(); | 984 fClipStack->restore(); |
| 986 | 985 |
| 987 // reserve our layer (if any) | 986 // reserve our layer (if any) |
| 988 DeviceCM* layer = fMCRec->fLayer; // may be null | 987 DeviceCM* layer = fMCRec->fLayer; // may be null |
| 989 // now detach it from fMCRec so we can pop(). Gets freed after its drawn | 988 // now detach it from fMCRec so we can pop(). Gets freed after its drawn |
| 990 fMCRec->fLayer = NULL; | 989 fMCRec->fLayer = NULL; |
| 991 | 990 |
| (...skipping 1529 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2521 } | 2520 } |
| 2522 | 2521 |
| 2523 if (matrix) { | 2522 if (matrix) { |
| 2524 canvas->concat(*matrix); | 2523 canvas->concat(*matrix); |
| 2525 } | 2524 } |
| 2526 } | 2525 } |
| 2527 | 2526 |
| 2528 SkAutoCanvasMatrixPaint::~SkAutoCanvasMatrixPaint() { | 2527 SkAutoCanvasMatrixPaint::~SkAutoCanvasMatrixPaint() { |
| 2529 fCanvas->restoreToCount(fSaveCount); | 2528 fCanvas->restoreToCount(fSaveCount); |
| 2530 } | 2529 } |
| OLD | NEW |