Index: skia/ext/skia_utils_mac.mm |
diff --git a/skia/ext/skia_utils_mac.mm b/skia/ext/skia_utils_mac.mm |
index f050ac9bd92c61cff5c190219ed43427d2aa0dad..dd8f560e1d9cd7632265eea9980794bb4bbcd692 100644 |
--- a/skia/ext/skia_utils_mac.mm |
+++ b/skia/ext/skia_utils_mac.mm |
@@ -269,14 +269,18 @@ SkiaBitLocker::SkiaBitLocker(SkCanvas* canvas) |
: canvas_(canvas), |
userClipRectSpecified_(false), |
cgContext_(0), |
+ bitmapScaleFactor_(1), |
useDeviceBits_(false), |
bitmapIsDummy_(false) { |
} |
-SkiaBitLocker::SkiaBitLocker(SkCanvas* canvas, const SkIRect& userClipRect) |
+SkiaBitLocker::SkiaBitLocker(SkCanvas* canvas, |
+ const SkIRect& userClipRect, |
+ SkScalar bitmapScaleFactor) |
: canvas_(canvas), |
userClipRectSpecified_(true), |
cgContext_(0), |
+ bitmapScaleFactor_(bitmapScaleFactor), |
useDeviceBits_(false), |
bitmapIsDummy_(false) { |
canvas_->save(); |
@@ -382,8 +386,10 @@ void SkiaBitLocker::releaseIfNeeded() { |
return; |
canvas_->save(); |
canvas_->concat(inverse); |
- canvas_->drawBitmap(subset, bounds.x() + bitmapOffset_.x(), |
- bounds.y() + bitmapOffset_.y()); |
+ canvas_->translate(bounds.x() + bitmapOffset_.x(), |
+ bounds.y() + bitmapOffset_.y()); |
+ canvas_->scale(1.f / bitmapScaleFactor_, 1.f / bitmapScaleFactor_); |
+ canvas_->drawBitmap(subset, 0, 0); |
canvas_->restore(); |
} |
CGContextRelease(cgContext_); |
@@ -431,7 +437,8 @@ CGContextRef SkiaBitLocker::cgContext() { |
bitmap_.lockPixels(); |
} else { |
bool result = bitmap_.tryAllocN32Pixels( |
- clip_bounds.width(), clip_bounds.height()); |
+ SkScalarCeilToInt(bitmapScaleFactor_ * clip_bounds.width()), |
+ SkScalarCeilToInt(bitmapScaleFactor_ * clip_bounds.height())); |
DCHECK(result); |
if (!result) |
return 0; |
@@ -447,7 +454,7 @@ CGContextRef SkiaBitLocker::cgContext() { |
SkMatrix matrix = canvas_->getTotalMatrix(); |
matrix.postTranslate(-SkIntToScalar(bitmapOffset_.x()), |
-SkIntToScalar(bitmapOffset_.y())); |
- matrix.postScale(1, -1); |
+ matrix.postScale(bitmapScaleFactor_, -bitmapScaleFactor_); |
matrix.postTranslate(0, SkIntToScalar(bitmap_.height())); |
CGContextConcatCTM(cgContext_, SkMatrixToCGAffineTransform(matrix)); |