diff options
author | Mike Reed <reed@google.com> | 2017-03-10 11:30:44 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-03-13 15:44:16 +0000 |
commit | f880b683048b5098e1e62b534902376626ffabac (patch) | |
tree | c243e634c743bd87ae16355741d721a7a4c4e4d6 /src/svg | |
parent | 52fe583a7b21ee1cb04e95b05db9946be899b26d (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.cpp | 22 |
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, |