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 816 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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) { | 833 void SkCanvas::willSave(SaveFlags) { |
834 // Do nothing. Subclasses may do something. | 834 // Do nothing. Subclasses may do something. |
835 } | 835 } |
836 | 836 |
| 837 int SkCanvas::save() { |
| 838 this->willSave(kMatrixClip_SaveFlag); |
| 839 return this->internalSave(kMatrixClip_SaveFlag); |
| 840 } |
| 841 |
837 int SkCanvas::save(SaveFlags flags) { | 842 int SkCanvas::save(SaveFlags flags) { |
838 this->willSave(flags); | 843 this->willSave(flags); |
839 // call shared impl | 844 // call shared impl |
840 return this->internalSave(flags); | 845 return this->internalSave(flags); |
841 } | 846 } |
842 | 847 |
843 static bool bounds_affects_clip(SkCanvas::SaveFlags flags) { | 848 static bool bounds_affects_clip(SkCanvas::SaveFlags flags) { |
844 #ifdef SK_SUPPORT_LEGACY_CLIPTOLAYERFLAG | 849 #ifdef SK_SUPPORT_LEGACY_CLIPTOLAYERFLAG |
845 return (flags & SkCanvas::kClipToLayer_SaveFlag) != 0; | 850 return (flags & SkCanvas::kClipToLayer_SaveFlag) != 0; |
846 #else | 851 #else |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
891 } | 896 } |
892 return true; | 897 return true; |
893 } | 898 } |
894 | 899 |
895 SkCanvas::SaveLayerStrategy SkCanvas::willSaveLayer(const SkRect*, const SkPaint
*, SaveFlags) { | 900 SkCanvas::SaveLayerStrategy SkCanvas::willSaveLayer(const SkRect*, const SkPaint
*, SaveFlags) { |
896 | 901 |
897 // Do nothing. Subclasses may do something. | 902 // Do nothing. Subclasses may do something. |
898 return kFullLayer_SaveLayerStrategy; | 903 return kFullLayer_SaveLayerStrategy; |
899 } | 904 } |
900 | 905 |
| 906 int SkCanvas::saveLayer(const SkRect* bounds, const SkPaint* paint) { |
| 907 SaveLayerStrategy strategy = this->willSaveLayer(bounds, paint, kARGB_ClipLa
yer_SaveFlag); |
| 908 return this->internalSaveLayer(bounds, paint, kARGB_ClipLayer_SaveFlag, fals
e, strategy); |
| 909 } |
| 910 |
901 int SkCanvas::saveLayer(const SkRect* bounds, const SkPaint* paint, | 911 int SkCanvas::saveLayer(const SkRect* bounds, const SkPaint* paint, |
902 SaveFlags flags) { | 912 SaveFlags flags) { |
903 // Overriding classes may return false to signal that we don't need to creat
e a layer. | |
904 SaveLayerStrategy strategy = this->willSaveLayer(bounds, paint, flags); | 913 SaveLayerStrategy strategy = this->willSaveLayer(bounds, paint, flags); |
905 return this->internalSaveLayer(bounds, paint, flags, false, strategy); | 914 return this->internalSaveLayer(bounds, paint, flags, false, strategy); |
906 } | 915 } |
907 | 916 |
908 static SkBaseDevice* create_compatible_device(SkCanvas* canvas, | 917 static SkBaseDevice* create_compatible_device(SkCanvas* canvas, |
909 const SkImageInfo& info) { | 918 const SkImageInfo& info) { |
910 SkBaseDevice* device = canvas->getDevice(); | 919 SkBaseDevice* device = canvas->getDevice(); |
911 return device ? device->createCompatibleDevice(info) : NULL; | 920 return device ? device->createCompatibleDevice(info) : NULL; |
912 } | 921 } |
913 | 922 |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
968 device->unref(); | 977 device->unref(); |
969 | 978 |
970 layer->fNext = fMCRec->fTopLayer; | 979 layer->fNext = fMCRec->fTopLayer; |
971 fMCRec->fLayer = layer; | 980 fMCRec->fLayer = layer; |
972 fMCRec->fTopLayer = layer; // this field is NOT an owner of layer | 981 fMCRec->fTopLayer = layer; // this field is NOT an owner of layer |
973 | 982 |
974 fSaveLayerCount += 1; | 983 fSaveLayerCount += 1; |
975 return count; | 984 return count; |
976 } | 985 } |
977 | 986 |
| 987 int SkCanvas::saveLayerAlpha(const SkRect* bounds, U8CPU alpha) { |
| 988 return this->saveLayerAlpha(bounds, alpha, kARGB_ClipLayer_SaveFlag); |
| 989 } |
| 990 |
978 int SkCanvas::saveLayerAlpha(const SkRect* bounds, U8CPU alpha, | 991 int SkCanvas::saveLayerAlpha(const SkRect* bounds, U8CPU alpha, |
979 SaveFlags flags) { | 992 SaveFlags flags) { |
980 if (0xFF == alpha) { | 993 if (0xFF == alpha) { |
981 return this->saveLayer(bounds, NULL, flags); | 994 return this->saveLayer(bounds, NULL, flags); |
982 } else { | 995 } else { |
983 SkPaint tmpPaint; | 996 SkPaint tmpPaint; |
984 tmpPaint.setAlpha(alpha); | 997 tmpPaint.setAlpha(alpha); |
985 return this->saveLayer(bounds, &tmpPaint, flags); | 998 return this->saveLayer(bounds, &tmpPaint, flags); |
986 } | 999 } |
987 } | 1000 } |
(...skipping 1649 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2637 if (!supported_for_raster_canvas(info)) { | 2650 if (!supported_for_raster_canvas(info)) { |
2638 return NULL; | 2651 return NULL; |
2639 } | 2652 } |
2640 | 2653 |
2641 SkBitmap bitmap; | 2654 SkBitmap bitmap; |
2642 if (!bitmap.installPixels(info, pixels, rowBytes)) { | 2655 if (!bitmap.installPixels(info, pixels, rowBytes)) { |
2643 return NULL; | 2656 return NULL; |
2644 } | 2657 } |
2645 return SkNEW_ARGS(SkCanvas, (bitmap)); | 2658 return SkNEW_ARGS(SkCanvas, (bitmap)); |
2646 } | 2659 } |
OLD | NEW |