diff options
Diffstat (limited to 'skia')
-rw-r--r-- | skia/ext/skia_utils_mac.mm | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/skia/ext/skia_utils_mac.mm b/skia/ext/skia_utils_mac.mm index 1ef5322..ab44d82 100644 --- a/skia/ext/skia_utils_mac.mm +++ b/skia/ext/skia_utils_mac.mm @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -307,13 +307,13 @@ SkiaBitLocker::~SkiaBitLocker() { void SkiaBitLocker::releaseIfNeeded() { if (!cgContext_) return; - canvas_->getDevice()->accessBitmap(true).unlockPixels(); + canvas_->getTopDevice()->accessBitmap(true).unlockPixels(); CGContextRelease(cgContext_); cgContext_ = 0; } CGContextRef SkiaBitLocker::cgContext() { - SkDevice* device = canvas_->getDevice(); + SkDevice* device = canvas_->getTopDevice(); DCHECK(device); if (!device) return 0; @@ -334,8 +334,10 @@ CGContextRef SkiaBitLocker::cgContext() { // Apply clip in device coordinates. CGMutablePathRef clipPath = CGPathCreateMutable(); SkRegion::Iterator iter(canvas_->getTotalClip()); + const SkIPoint& pt = device->getOrigin(); for (; !iter.done(); iter.next()) { - const SkIRect& skRect = iter.rect(); + SkIRect skRect = iter.rect(); + skRect.offset(-pt); CGRect cgRect = SkIRectToCGRect(skRect); CGPathAddRect(clipPath, 0, cgRect); } @@ -344,7 +346,8 @@ CGContextRef SkiaBitLocker::cgContext() { CGPathRelease(clipPath); // Apply content matrix. - const SkMatrix& skMatrix = canvas_->getTotalMatrix(); + SkMatrix skMatrix = canvas_->getTotalMatrix(); + skMatrix.postTranslate(-SkIntToScalar(pt.fX), -SkIntToScalar(pt.fY)); CGAffineTransform affine = SkMatrixToCGAffineTransform(skMatrix); CGContextConcatCTM(cgContext_, affine); |