Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(826)

Unified Diff: content/browser/renderer_host/backing_store_mac.mm

Issue 10548026: mac: Make dynamic DPI changes work. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 8 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/renderer_host/backing_store_mac.mm
diff --git a/content/browser/renderer_host/backing_store_mac.mm b/content/browser/renderer_host/backing_store_mac.mm
index 326e0d42657df443b33a8e914760645b0ac22d80..ebc0c0d8aafcfb9acba0ede7acf34c322b7b58a2 100644
--- a/content/browser/renderer_host/backing_store_mac.mm
+++ b/content/browser/renderer_host/backing_store_mac.mm
@@ -41,6 +41,28 @@ BackingStoreMac::BackingStoreMac(content::RenderWidgetHost* widget,
BackingStoreMac::~BackingStoreMac() {
}
+void BackingStoreMac::ScaleFactorChanged(float device_scale_factor) {
+ if (device_scale_factor == device_scale_factor_)
+ return;
+
+ device_scale_factor_ = device_scale_factor;
+
+ base::mac::ScopedCFTypeRef<CGLayerRef> new_layer(CreateCGLayer());
+ // If we have a layer, copy the old contents. A pixelated flash is better
+ // than a white flash.
+ if (new_layer && cg_layer_) {
+ CGContextRef layer = CGLayerGetContext(new_layer);
+ CGContextDrawLayerAtPoint(layer, CGPointMake(0, 0), cg_layer_);
+ }
+
+ cg_layer_.swap(new_layer);
+ if (!cg_layer_) {
+ // The view isn't in a window yet. Use a CGBitmapContext for now.
+ cg_bitmap_.reset(CreateCGBitmapContext());
+ CGContextScaleCTM(cg_bitmap_, device_scale_factor_, device_scale_factor_);
+ }
+}
+
size_t BackingStoreMac::MemorySize() {
return size().Scale(device_scale_factor_).GetArea() * 4;
}

Powered by Google App Engine
This is Rietveld 408576698