summaryrefslogtreecommitdiffstats
path: root/skia
diff options
context:
space:
mode:
Diffstat (limited to 'skia')
-rw-r--r--skia/ext/skia_utils_mac.mm13
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);