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 "SkBitmapDevice.h" | 8 #include "SkBitmapDevice.h" |
9 #include "SkCanvas.h" | 9 #include "SkCanvas.h" |
10 #include "SkCanvasPriv.h" | 10 #include "SkCanvasPriv.h" |
(...skipping 1104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1115 fClipStack->clipDevRect(ir, SkRegion::kReplace_Op); | 1115 fClipStack->clipDevRect(ir, SkRegion::kReplace_Op); |
1116 fMCRec->fRasterClip.setRect(ir); | 1116 fMCRec->fRasterClip.setRect(ir); |
1117 } | 1117 } |
1118 | 1118 |
1119 if (intersection) { | 1119 if (intersection) { |
1120 *intersection = ir; | 1120 *intersection = ir; |
1121 } | 1121 } |
1122 return true; | 1122 return true; |
1123 } | 1123 } |
1124 | 1124 |
| 1125 #ifdef SK_SUPPORT_LEGACY_SAVEFLAGS |
1125 uint32_t SkCanvas::SaveFlagsToSaveLayerFlags(SaveFlags flags) { | 1126 uint32_t SkCanvas::SaveFlagsToSaveLayerFlags(SaveFlags flags) { |
1126 uint32_t layerFlags = 0; | 1127 uint32_t layerFlags = 0; |
1127 | 1128 |
1128 if (0 == (flags & kClipToLayer_SaveFlag)) { | 1129 if (0 == (flags & kClipToLayer_SaveFlag)) { |
1129 layerFlags |= kDontClipToLayer_PrivateSaveLayerFlag; | 1130 layerFlags |= kDontClipToLayer_PrivateSaveLayerFlag; |
1130 } | 1131 } |
1131 if (0 == (flags & kHasAlphaLayer_SaveFlag)) { | 1132 if (0 == (flags & kHasAlphaLayer_SaveFlag)) { |
1132 layerFlags |= kIsOpaque_SaveLayerFlag; | 1133 layerFlags |= kIsOpaque_SaveLayerFlag; |
1133 } | 1134 } |
1134 return layerFlags; | 1135 return layerFlags; |
1135 } | 1136 } |
| 1137 #endif |
1136 | 1138 |
1137 int SkCanvas::saveLayer(const SkRect* bounds, const SkPaint* paint) { | 1139 int SkCanvas::saveLayer(const SkRect* bounds, const SkPaint* paint) { |
1138 return this->saveLayer(SaveLayerRec(bounds, paint, 0)); | 1140 return this->saveLayer(SaveLayerRec(bounds, paint, 0)); |
1139 } | 1141 } |
1140 | 1142 |
| 1143 #ifdef SK_SUPPORT_LEGACY_SAVEFLAGS |
1141 int SkCanvas::saveLayer(const SkRect* bounds, const SkPaint* paint, SaveFlags fl
ags) { | 1144 int SkCanvas::saveLayer(const SkRect* bounds, const SkPaint* paint, SaveFlags fl
ags) { |
1142 return this->saveLayer(SaveLayerRec(bounds, paint, SaveFlagsToSaveLayerFlags
(flags))); | 1145 return this->saveLayer(SaveLayerRec(bounds, paint, SaveFlagsToSaveLayerFlags
(flags))); |
1143 } | 1146 } |
| 1147 #endif |
1144 | 1148 |
1145 int SkCanvas::saveLayerPreserveLCDTextRequests(const SkRect* bounds, const SkPai
nt* paint) { | 1149 int SkCanvas::saveLayerPreserveLCDTextRequests(const SkRect* bounds, const SkPai
nt* paint) { |
1146 return this->saveLayer(SaveLayerRec(bounds, paint, kPreserveLCDText_SaveLaye
rFlag)); | 1150 return this->saveLayer(SaveLayerRec(bounds, paint, kPreserveLCDText_SaveLaye
rFlag)); |
1147 } | 1151 } |
1148 | 1152 |
1149 int SkCanvas::saveLayer(const SaveLayerRec& origRec) { | 1153 int SkCanvas::saveLayer(const SaveLayerRec& origRec) { |
1150 SaveLayerRec rec(origRec); | 1154 SaveLayerRec rec(origRec); |
1151 if (gIgnoreSaveLayerBounds) { | 1155 if (gIgnoreSaveLayerBounds) { |
1152 rec.fBounds = nullptr; | 1156 rec.fBounds = nullptr; |
1153 } | 1157 } |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1262 DeviceCM* layer = | 1266 DeviceCM* layer = |
1263 new DeviceCM(device, paint, this, fConservativeRasterClip, forceSpri
teOnRestore); | 1267 new DeviceCM(device, paint, this, fConservativeRasterClip, forceSpri
teOnRestore); |
1264 device->unref(); | 1268 device->unref(); |
1265 | 1269 |
1266 layer->fNext = fMCRec->fTopLayer; | 1270 layer->fNext = fMCRec->fTopLayer; |
1267 fMCRec->fLayer = layer; | 1271 fMCRec->fLayer = layer; |
1268 fMCRec->fTopLayer = layer; // this field is NOT an owner of layer | 1272 fMCRec->fTopLayer = layer; // this field is NOT an owner of layer |
1269 } | 1273 } |
1270 | 1274 |
1271 int SkCanvas::saveLayerAlpha(const SkRect* bounds, U8CPU alpha) { | 1275 int SkCanvas::saveLayerAlpha(const SkRect* bounds, U8CPU alpha) { |
1272 return this->saveLayerAlpha(bounds, alpha, kARGB_ClipLayer_SaveFlag); | 1276 if (0xFF == alpha) { |
| 1277 return this->saveLayer(bounds, nullptr); |
| 1278 } else { |
| 1279 SkPaint tmpPaint; |
| 1280 tmpPaint.setAlpha(alpha); |
| 1281 return this->saveLayer(bounds, &tmpPaint); |
| 1282 } |
1273 } | 1283 } |
1274 | 1284 |
| 1285 #ifdef SK_SUPPORT_LEGACY_SAVEFLAGS |
1275 int SkCanvas::saveLayerAlpha(const SkRect* bounds, U8CPU alpha, | 1286 int SkCanvas::saveLayerAlpha(const SkRect* bounds, U8CPU alpha, |
1276 SaveFlags flags) { | 1287 SaveFlags flags) { |
1277 if (0xFF == alpha) { | 1288 if (0xFF == alpha) { |
1278 return this->saveLayer(bounds, nullptr, flags); | 1289 return this->saveLayer(bounds, nullptr, flags); |
1279 } else { | 1290 } else { |
1280 SkPaint tmpPaint; | 1291 SkPaint tmpPaint; |
1281 tmpPaint.setAlpha(alpha); | 1292 tmpPaint.setAlpha(alpha); |
1282 return this->saveLayer(bounds, &tmpPaint, flags); | 1293 return this->saveLayer(bounds, &tmpPaint, flags); |
1283 } | 1294 } |
1284 } | 1295 } |
| 1296 #endif |
1285 | 1297 |
1286 void SkCanvas::internalRestore() { | 1298 void SkCanvas::internalRestore() { |
1287 SkASSERT(fMCStack.count() != 0); | 1299 SkASSERT(fMCStack.count() != 0); |
1288 | 1300 |
1289 fDeviceCMDirty = true; | 1301 fDeviceCMDirty = true; |
1290 fCachedLocalClipBoundsDirty = true; | 1302 fCachedLocalClipBoundsDirty = true; |
1291 | 1303 |
1292 fClipStack->restore(); | 1304 fClipStack->restore(); |
1293 | 1305 |
1294 // reserve our layer (if any) | 1306 // reserve our layer (if any) |
(...skipping 1732 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3027 } | 3039 } |
3028 | 3040 |
3029 if (matrix) { | 3041 if (matrix) { |
3030 canvas->concat(*matrix); | 3042 canvas->concat(*matrix); |
3031 } | 3043 } |
3032 } | 3044 } |
3033 | 3045 |
3034 SkAutoCanvasMatrixPaint::~SkAutoCanvasMatrixPaint() { | 3046 SkAutoCanvasMatrixPaint::~SkAutoCanvasMatrixPaint() { |
3035 fCanvas->restoreToCount(fSaveCount); | 3047 fCanvas->restoreToCount(fSaveCount); |
3036 } | 3048 } |
OLD | NEW |