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

Side by Side Diff: content/browser/renderer_host/render_widget_host_view_aura.cc

Issue 379483002: Align web content's layer to toplevel window instead of root on ash (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: check snapped != target Created 6 years, 5 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/renderer_host/render_widget_host_view_aura.h" 5 #include "content/browser/renderer_host/render_widget_host_view_aura.h"
6 6
7 #include "base/auto_reset.h" 7 #include "base/auto_reset.h"
8 #include "base/basictypes.h" 8 #include "base/basictypes.h"
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/callback_helpers.h" 10 #include "base/callback_helpers.h"
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 #include "ui/aura/window.h" 55 #include "ui/aura/window.h"
56 #include "ui/aura/window_event_dispatcher.h" 56 #include "ui/aura/window_event_dispatcher.h"
57 #include "ui/aura/window_observer.h" 57 #include "ui/aura/window_observer.h"
58 #include "ui/aura/window_tracker.h" 58 #include "ui/aura/window_tracker.h"
59 #include "ui/aura/window_tree_host.h" 59 #include "ui/aura/window_tree_host.h"
60 #include "ui/base/clipboard/scoped_clipboard_writer.h" 60 #include "ui/base/clipboard/scoped_clipboard_writer.h"
61 #include "ui/base/hit_test.h" 61 #include "ui/base/hit_test.h"
62 #include "ui/base/ime/input_method.h" 62 #include "ui/base/ime/input_method.h"
63 #include "ui/base/ui_base_types.h" 63 #include "ui/base/ui_base_types.h"
64 #include "ui/compositor/compositor_vsync_manager.h" 64 #include "ui/compositor/compositor_vsync_manager.h"
65 #include "ui/compositor/dip_util.h"
65 #include "ui/events/event.h" 66 #include "ui/events/event.h"
66 #include "ui/events/event_utils.h" 67 #include "ui/events/event_utils.h"
67 #include "ui/events/gestures/gesture_recognizer.h" 68 #include "ui/events/gestures/gesture_recognizer.h"
68 #include "ui/gfx/canvas.h" 69 #include "ui/gfx/canvas.h"
69 #include "ui/gfx/display.h" 70 #include "ui/gfx/display.h"
70 #include "ui/gfx/rect_conversions.h" 71 #include "ui/gfx/rect_conversions.h"
71 #include "ui/gfx/screen.h" 72 #include "ui/gfx/screen.h"
72 #include "ui/gfx/size_conversions.h" 73 #include "ui/gfx/size_conversions.h"
73 #include "ui/gfx/skia_util.h" 74 #include "ui/gfx/skia_util.h"
74 #include "ui/wm/public/activation_client.h" 75 #include "ui/wm/public/activation_client.h"
(...skipping 1536 matching lines...) Expand 10 before | Expand all | Expand 10 after
1611 float device_scale_factor) { 1612 float device_scale_factor) {
1612 if (!host_) 1613 if (!host_)
1613 return; 1614 return;
1614 1615
1615 UpdateScreenInfo(window_); 1616 UpdateScreenInfo(window_);
1616 1617
1617 const gfx::Display display = gfx::Screen::GetScreenFor(window_)-> 1618 const gfx::Display display = gfx::Screen::GetScreenFor(window_)->
1618 GetDisplayNearestWindow(window_); 1619 GetDisplayNearestWindow(window_);
1619 DCHECK_EQ(device_scale_factor, display.device_scale_factor()); 1620 DCHECK_EQ(device_scale_factor, display.device_scale_factor());
1620 current_cursor_.SetDisplayInfo(display); 1621 current_cursor_.SetDisplayInfo(display);
1622 SnapToPhysicalPixelBoundary();
1621 } 1623 }
1622 1624
1623 void RenderWidgetHostViewAura::OnWindowDestroying(aura::Window* window) { 1625 void RenderWidgetHostViewAura::OnWindowDestroying(aura::Window* window) {
1624 #if defined(OS_WIN) 1626 #if defined(OS_WIN)
1625 HWND parent = NULL; 1627 HWND parent = NULL;
1626 // If the tab was hidden and it's closed, host_->is_hidden would have been 1628 // If the tab was hidden and it's closed, host_->is_hidden would have been
1627 // reset to false in RenderWidgetHostImpl::RendererExited. 1629 // reset to false in RenderWidgetHostImpl::RendererExited.
1628 if (!window_->GetRootWindow() || host_->is_hidden()) { 1630 if (!window_->GetRootWindow() || host_->is_hidden()) {
1629 parent = ui::GetHiddenWindow(); 1631 parent = ui::GetHiddenWindow();
1630 } else { 1632 } else {
(...skipping 613 matching lines...) Expand 10 before | Expand all | Expand 10 after
2244 else if (!overscroll_controller_) 2246 else if (!overscroll_controller_)
2245 overscroll_controller_.reset(new OverscrollController()); 2247 overscroll_controller_.reset(new OverscrollController());
2246 } 2248 }
2247 2249
2248 void RenderWidgetHostViewAura::SnapToPhysicalPixelBoundary() { 2250 void RenderWidgetHostViewAura::SnapToPhysicalPixelBoundary() {
2249 // The top left corner of our view in window coordinates might not land on a 2251 // The top left corner of our view in window coordinates might not land on a
2250 // device pixel boundary if we have a non-integer device scale. In that case, 2252 // device pixel boundary if we have a non-integer device scale. In that case,
2251 // to avoid the web contents area looking blurry we translate the web contents 2253 // to avoid the web contents area looking blurry we translate the web contents
2252 // in the +x, +y direction to land on the nearest pixel boundary. This may 2254 // in the +x, +y direction to land on the nearest pixel boundary. This may
2253 // cause the bottom and right edges to be clipped slightly, but that's ok. 2255 // cause the bottom and right edges to be clipped slightly, but that's ok.
2254 gfx::Point view_offset_dips = window_->GetBoundsInRootWindow().origin(); 2256 aura::Window* snapped = NULL;
2255 gfx::PointF view_offset = view_offset_dips; 2257 // On desktop, use the root window. On alternative environment (ash),
2256 view_offset.Scale(current_device_scale_factor_); 2258 // use the toplevel window which must be already snapped.
2257 gfx::PointF view_offset_snapped(std::ceil(view_offset.x()), 2259 if (gfx::Screen::GetScreenFor(window_) !=
2258 std::ceil(view_offset.y())); 2260 gfx::Screen::GetScreenByType(gfx::SCREEN_TYPE_ALTERNATE)) {
2259 2261 snapped = window_->GetRootWindow();
2260 gfx::Vector2dF fudge = view_offset_snapped - view_offset; 2262 } else {
2261 fudge.Scale(1.0 / current_device_scale_factor_); 2263 snapped = window_->GetToplevelWindow();
2262 GetLayer()->SetSubpixelPositionOffset(fudge); 2264 }
2265 if (snapped && snapped != window_)
2266 ui::SnapLayerToPhysicalPixelBoundary(snapped->layer(), window_->layer());
2263 } 2267 }
2264 2268
2265 void RenderWidgetHostViewAura::InternalSetBounds(const gfx::Rect& rect) { 2269 void RenderWidgetHostViewAura::InternalSetBounds(const gfx::Rect& rect) {
2266 if (HasDisplayPropertyChanged(window_)) 2270 if (HasDisplayPropertyChanged(window_))
2267 host_->InvalidateScreenInfo(); 2271 host_->InvalidateScreenInfo();
2268 2272
2269 SnapToPhysicalPixelBoundary(); 2273 SnapToPhysicalPixelBoundary();
2270 // Don't recursively call SetBounds if this bounds update is the result of 2274 // Don't recursively call SetBounds if this bounds update is the result of
2271 // a Window::SetBoundsInternal call. 2275 // a Window::SetBoundsInternal call.
2272 if (!in_bounds_changed_) 2276 if (!in_bounds_changed_)
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
2480 2484
2481 //////////////////////////////////////////////////////////////////////////////// 2485 ////////////////////////////////////////////////////////////////////////////////
2482 // RenderWidgetHostViewBase, public: 2486 // RenderWidgetHostViewBase, public:
2483 2487
2484 // static 2488 // static
2485 void RenderWidgetHostViewBase::GetDefaultScreenInfo(WebScreenInfo* results) { 2489 void RenderWidgetHostViewBase::GetDefaultScreenInfo(WebScreenInfo* results) {
2486 GetScreenInfoForWindow(results, NULL); 2490 GetScreenInfoForWindow(results, NULL);
2487 } 2491 }
2488 2492
2489 } // namespace content 2493 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698