aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/svg
diff options
context:
space:
mode:
authorGravatar Mike Reed <reed@google.com>2017-03-10 11:30:44 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-03-13 15:44:16 +0000
commitf880b683048b5098e1e62b534902376626ffabac (patch)
treec243e634c743bd87ae16355741d721a7a4c4e4d6 /src/svg
parent52fe583a7b21ee1cb04e95b05db9946be899b26d (diff)
use AutoRestore instead of making a copy of the clipstack
BUG=skia: Change-Id: I86683156926f7c63c83790eaf313112ba5fab763 Reviewed-on: https://skia-review.googlesource.com/9532 Reviewed-by: Florin Malita <fmalita@chromium.org> Commit-Queue: Mike Reed <reed@google.com>
Diffstat (limited to 'src/svg')
-rw-r--r--src/svg/SkSVGDevice.cpp22
1 files changed, 8 insertions, 14 deletions
diff --git a/src/svg/SkSVGDevice.cpp b/src/svg/SkSVGDevice.cpp
index 7ce616436c..91ebadb7f0 100644
--- a/src/svg/SkSVGDevice.cpp
+++ b/src/svg/SkSVGDevice.cpp
@@ -278,10 +278,8 @@ struct SkSVGDevice::MxCp {
const SkMatrix* fMatrix;
const SkClipStack* fClipStack;
- MxCp(SkSVGDevice* device) {
- fMatrix = &device->ctm();
- fClipStack = &device->cs();
- }
+ MxCp(const SkMatrix* mx, const SkClipStack* cs) : fMatrix(mx), fClipStack(cs) {}
+ MxCp(SkSVGDevice* device) : fMatrix(&device->ctm()), fClipStack(&device->cs()) {}
};
class SkSVGDevice::AutoElement : ::SkNoncopyable {
@@ -729,24 +727,20 @@ void SkSVGDevice::drawSprite(const SkBitmap& bitmap,
void SkSVGDevice::drawBitmapRect(const SkBitmap& bm, const SkRect* srcOrNull,
const SkRect& dst, const SkPaint& paint,
SkCanvas::SrcRectConstraint) {
- MxCp mc(this);
-
- SkClipStack adjustedClipStack;
+ SkClipStack* cs = &this->cs();
+ SkClipStack::AutoRestore ar(cs, false);
if (srcOrNull && *srcOrNull != SkRect::Make(bm.bounds())) {
- adjustedClipStack = *mc.fClipStack;
- adjustedClipStack.clipRect(dst, *mc.fMatrix, kIntersect_SkClipOp,
- paint.isAntiAlias());
- mc.fClipStack = &adjustedClipStack;
+ cs->save();
+ cs->clipRect(dst, this->ctm(), kIntersect_SkClipOp, paint.isAntiAlias());
}
SkMatrix adjustedMatrix;
adjustedMatrix.setRectToRect(srcOrNull ? *srcOrNull : SkRect::Make(bm.bounds()),
dst,
SkMatrix::kFill_ScaleToFit);
- adjustedMatrix.postConcat(*mc.fMatrix);
- mc.fMatrix = &adjustedMatrix;
+ adjustedMatrix.postConcat(this->ctm());
- drawBitmapCommon(mc, bm, paint);
+ drawBitmapCommon(MxCp(&adjustedMatrix, cs), bm, paint);
}
void SkSVGDevice::drawText(const void* text, size_t len,