Index: content/browser/renderer_host/render_widget_host_view_aura.cc |
diff --git a/content/browser/renderer_host/render_widget_host_view_aura.cc b/content/browser/renderer_host/render_widget_host_view_aura.cc |
index 76805ce11e278d8f20c76520ed37543ec3388e0b..205f3fcd6bae5a36b31577dbe5ea8d4bd3cc4016 100644 |
--- a/content/browser/renderer_host/render_widget_host_view_aura.cc |
+++ b/content/browser/renderer_host/render_widget_host_view_aura.cc |
@@ -62,6 +62,7 @@ |
#include "ui/base/ime/input_method.h" |
#include "ui/base/ui_base_types.h" |
#include "ui/compositor/compositor_vsync_manager.h" |
+#include "ui/compositor/dip_util.h" |
#include "ui/events/event.h" |
#include "ui/events/event_utils.h" |
#include "ui/events/gestures/gesture_recognizer.h" |
@@ -1618,6 +1619,7 @@ void RenderWidgetHostViewAura::OnDeviceScaleFactorChanged( |
GetDisplayNearestWindow(window_); |
DCHECK_EQ(device_scale_factor, display.device_scale_factor()); |
current_cursor_.SetDisplayInfo(display); |
+ SnapToPhysicalPixelBoundary(); |
} |
void RenderWidgetHostViewAura::OnWindowDestroying(aura::Window* window) { |
@@ -2251,15 +2253,17 @@ void RenderWidgetHostViewAura::SnapToPhysicalPixelBoundary() { |
// to avoid the web contents area looking blurry we translate the web contents |
// in the +x, +y direction to land on the nearest pixel boundary. This may |
// cause the bottom and right edges to be clipped slightly, but that's ok. |
- gfx::Point view_offset_dips = window_->GetBoundsInRootWindow().origin(); |
- gfx::PointF view_offset = view_offset_dips; |
- view_offset.Scale(current_device_scale_factor_); |
- gfx::PointF view_offset_snapped(std::ceil(view_offset.x()), |
- std::ceil(view_offset.y())); |
- |
- gfx::Vector2dF fudge = view_offset_snapped - view_offset; |
- fudge.Scale(1.0 / current_device_scale_factor_); |
- GetLayer()->SetSubpixelPositionOffset(fudge); |
+ aura::Window* snapped = NULL; |
+ // On desktop, use the root window. On alternative environment (ash), |
+ // use the toplevel window which must be already snapped. |
+ if (gfx::Screen::GetScreenFor(window_) != |
+ gfx::Screen::GetScreenByType(gfx::SCREEN_TYPE_ALTERNATE)) { |
+ snapped = window_->GetRootWindow(); |
+ } else { |
+ snapped = window_->GetToplevelWindow(); |
+ } |
+ if (snapped && snapped != window_) |
+ ui::SnapLayerToPhysicalPixelBoundary(snapped->layer(), window_->layer()); |
} |
void RenderWidgetHostViewAura::InternalSetBounds(const gfx::Rect& rect) { |