From 635fa9cdb0145a980e5680d2461c343dd71a0485 Mon Sep 17 00:00:00 2001
From: "kevers@chromium.org"
 <kevers@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>
Date: Wed, 13 Feb 2013 02:23:55 +0000
Subject: Fix backing store scrolling on Windows in high-DPI mode.

BUG=175829


Review URL: https://chromiumcodereview.appspot.com/12226127

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@182094 0039d316-1c4b-4281-b951-d872f2087c98
---
 content/browser/renderer_host/backing_store_win.cc           |  9 +++++++--
 content/browser/renderer_host/render_widget_host_view_win.cc | 11 ++++++++---
 content/browser/web_contents/web_contents_impl.cc            |  9 ---------
 3 files changed, 15 insertions(+), 14 deletions(-)

(limited to 'content')

diff --git a/content/browser/renderer_host/backing_store_win.cc b/content/browser/renderer_host/backing_store_win.cc
index 59850e4..77c0341 100644
--- a/content/browser/renderer_host/backing_store_win.cc
+++ b/content/browser/renderer_host/backing_store_win.cc
@@ -192,8 +192,13 @@ void BackingStoreWin::ScrollBackingStore(const gfx::Vector2d& delta,
   // TODO(darin): this doesn't work if delta x() and y() are both non-zero!
   DCHECK(delta.x() == 0 || delta.y() == 0);
 
-  RECT damaged_rect, r = clip_rect.ToRECT();
-  ScrollDC(hdc_, delta.x(), delta.y(), NULL, &r, NULL, &damaged_rect);
+  float scale = ui::win::GetDeviceScaleFactor();
+  gfx::Rect screen_rect = gfx::ToEnclosingRect(
+      gfx::ScaleRect(clip_rect, scale));
+  int dx = static_cast<int>(delta.x() * scale);
+  int dy = static_cast<int>(delta.y() * scale);
+  RECT damaged_rect, r = screen_rect.ToRECT();
+  ScrollDC(hdc_, dx, dy, NULL, &r, NULL, &damaged_rect);
 }
 
 }  // namespace content
diff --git a/content/browser/renderer_host/render_widget_host_view_win.cc b/content/browser/renderer_host/render_widget_host_view_win.cc
index ed2d486..6021255 100644
--- a/content/browser/renderer_host/render_widget_host_view_win.cc
+++ b/content/browser/renderer_host/render_widget_host_view_win.cc
@@ -736,9 +736,14 @@ void RenderWidgetHostViewWin::DidUpdateBackingStore(
   }
 
   if (!scroll_rect.IsEmpty()) {
-    RECT clip_rect = scroll_rect.ToRECT();
-    ScrollWindowEx(scroll_delta.x(), scroll_delta.y(), NULL, &clip_rect,
-                   NULL, NULL, SW_INVALIDATE);
+    gfx::Rect pixel_rect = ui::win::DIPToScreenRect(scroll_rect);
+    // Damage might not be DIP aligned.
+    pixel_rect.Inset(-1, -1);
+    RECT clip_rect = pixel_rect.ToRECT();
+    float scale = ui::win::GetDeviceScaleFactor();
+    int dx = static_cast<int>(scale * scroll_delta.x());
+    int dy = static_cast<int>(scale * scroll_delta.y());
+    ScrollWindowEx(dx, dy, NULL, &clip_rect, NULL, NULL, SW_INVALIDATE);
   }
 
   if (!about_to_validate_and_paint_)
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index da00725..5e1f67d 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -497,13 +497,9 @@ WebPreferences WebContentsImpl::GetWebkitPrefs(RenderViewHost* rvh,
   prefs.accelerated_compositing_enabled =
       GpuProcessHost::gpu_enabled() &&
       !command_line.HasSwitch(switches::kDisableAcceleratedCompositing);
-#if defined(OS_WIN) && defined(ENABLE_HIDPI)
-  prefs.force_compositing_mode = true;
-#else
   prefs.force_compositing_mode =
       content::IsForceCompositingModeEnabled() &&
       !command_line.HasSwitch(switches::kDisableForceCompositingMode);
-#endif
   prefs.accelerated_2d_canvas_enabled =
       GpuProcessHost::gpu_enabled() &&
       !command_line.HasSwitch(switches::kDisableAccelerated2dCanvas);
@@ -620,10 +616,6 @@ WebPreferences WebContentsImpl::GetWebkitPrefs(RenderViewHost* rvh,
 
   prefs.is_online = !net::NetworkChangeNotifier::IsOffline();
 
-#if defined(OS_WIN) && defined(ENABLE_HIDPI)
-  prefs.accelerated_compositing_enabled = true;
-  prefs.accelerated_2d_canvas_enabled = true;
-#else
   // Force accelerated compositing and 2d canvas off for chrome: and about:
   // pages (unless it's specifically allowed).
   if ((url.SchemeIs(chrome::kChromeUIScheme) ||
@@ -633,7 +625,6 @@ WebPreferences WebContentsImpl::GetWebkitPrefs(RenderViewHost* rvh,
     prefs.accelerated_compositing_enabled = false;
     prefs.accelerated_2d_canvas_enabled = false;
   }
-#endif
 
   if (url.SchemeIs(chrome::kChromeDevToolsScheme))
     prefs.show_fps_counter = false;
-- 
cgit v1.1