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

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

Issue 366543004: Make 1.5x DPI text render crisply. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: reorder methods 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
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 950 matching lines...) Expand 10 before | Expand all | Expand 10 after
961 } 961 }
962 962
963 void RenderWidgetHostViewAura::EndFrameSubscription() { 963 void RenderWidgetHostViewAura::EndFrameSubscription() {
964 delegated_frame_host_->EndFrameSubscription(); 964 delegated_frame_host_->EndFrameSubscription();
965 } 965 }
966 966
967 void RenderWidgetHostViewAura::AcceleratedSurfaceInitialized(int host_id, 967 void RenderWidgetHostViewAura::AcceleratedSurfaceInitialized(int host_id,
968 int route_id) { 968 int route_id) {
969 } 969 }
970 970
971 void RenderWidgetHostViewAura::SnapToPhysicalPixelBoundary() {
972 // The top left corner of our view in window coordinates might not land on a
973 // device pixel boundary if we have a non-integer device scale. In that case,
974 // to avoid the web contents area looking blurry we translate the web contents
975 // in the +x, +y direction to land on the nearest pixel boundary. This may
976 // cause the bottom and right edges to be clipped slightly, but that's ok.
977 gfx::Point view_offset_dips = window_->GetBoundsInRootWindow().origin();
978 gfx::PointF view_offset = view_offset_dips;
979 view_offset.Scale(current_device_scale_factor_);
980 gfx::PointF view_offset_snapped(std::ceil(view_offset.x()),
981 std::ceil(view_offset.y()));
982
983 gfx::Vector2dF fudge = view_offset_snapped - view_offset;
984 fudge.Scale(1.0 / current_device_scale_factor_);
985 GetLayer()->SetSubpixelPositionOffset(fudge);
986 }
987
988 void RenderWidgetHostViewAura::InternalSetBounds(const gfx::Rect& rect) {
989 if (HasDisplayPropertyChanged(window_))
990 host_->InvalidateScreenInfo();
991
992 SnapToPhysicalPixelBoundary();
993 // Don't recursively call SetBounds if this bounds update is the result of
994 // a Window::SetBoundsInternal call.
995 if (!in_bounds_changed_)
996 window_->SetBounds(rect);
997 host_->WasResized();
998 delegated_frame_host_->WasResized();
999 if (touch_editing_client_) {
1000 touch_editing_client_->OnSelectionOrCursorChanged(selection_anchor_rect_,
1001 selection_focus_rect_);
1002 }
1003 #if defined(OS_WIN)
1004 // Create the legacy dummy window which corresponds to the bounds of the
1005 // webcontents. This will be passed as the container window for windowless
1006 // plugins.
1007 // Plugins like Flash assume the container window which is returned via the
1008 // NPNVnetscapeWindow property corresponds to the bounds of the webpage.
1009 // This is not true in Aura where we have only HWND which is the main Aura
1010 // window. If we return this window to plugins like Flash then it causes the
1011 // coordinate translations done by these plugins to break.
1012 // Additonally the legacy dummy window is needed for accessibility and for
1013 // scrolling to work in legacy drivers for trackpoints/trackpads, etc.
1014 if (!legacy_window_destroyed_ && GetNativeViewId()) {
1015 if (!legacy_render_widget_host_HWND_) {
1016 legacy_render_widget_host_HWND_ = LegacyRenderWidgetHostHWND::Create(
1017 reinterpret_cast<HWND>(GetNativeViewId()));
1018 }
1019 if (legacy_render_widget_host_HWND_) {
1020 legacy_render_widget_host_HWND_->set_host(this);
1021 legacy_render_widget_host_HWND_->SetBounds(
1022 window_->GetBoundsInRootWindow());
1023 // There are cases where the parent window is created, made visible and
1024 // the associated RenderWidget is also visible before the
1025 // LegacyRenderWidgetHostHWND instace is created. Ensure that it is shown
1026 // here.
1027 if (!host_->is_hidden())
1028 legacy_render_widget_host_HWND_->Show();
1029
1030 BrowserAccessibilityManagerWin* manager =
1031 static_cast<BrowserAccessibilityManagerWin*>(
1032 GetBrowserAccessibilityManager());
1033 if (manager)
1034 manager->SetAccessibleHWND(legacy_render_widget_host_HWND_);
1035 }
1036 }
1037
1038 if (mouse_locked_)
1039 UpdateMouseLockRegion();
1040 #endif
1041 }
1042
1043 #if defined(OS_WIN) 971 #if defined(OS_WIN)
1044 bool RenderWidgetHostViewAura::UsesNativeWindowFrame() const { 972 bool RenderWidgetHostViewAura::UsesNativeWindowFrame() const {
1045 return (legacy_render_widget_host_HWND_ != NULL); 973 return (legacy_render_widget_host_HWND_ != NULL);
1046 } 974 }
1047 975
1048 void RenderWidgetHostViewAura::UpdateConstrainedWindowRects( 976 void RenderWidgetHostViewAura::UpdateConstrainedWindowRects(
1049 const std::vector<gfx::Rect>& rects) { 977 const std::vector<gfx::Rect>& rects) {
1050 // Check this before setting constrained_rects_, so that next time they're set 978 // Check this before setting constrained_rects_, so that next time they're set
1051 // and we have a root window we don't early return. 979 // and we have a root window we don't early return.
1052 if (!window_->GetHost()) 980 if (!window_->GetHost())
(...skipping 1254 matching lines...) Expand 10 before | Expand all | Expand 10 after
2307 host_->SendCursorVisibilityState(is_visible); 2235 host_->SendCursorVisibilityState(is_visible);
2308 } 2236 }
2309 2237
2310 void RenderWidgetHostViewAura::SetOverscrollControllerEnabled(bool enabled) { 2238 void RenderWidgetHostViewAura::SetOverscrollControllerEnabled(bool enabled) {
2311 if (!enabled) 2239 if (!enabled)
2312 overscroll_controller_.reset(); 2240 overscroll_controller_.reset();
2313 else if (!overscroll_controller_) 2241 else if (!overscroll_controller_)
2314 overscroll_controller_.reset(new OverscrollController()); 2242 overscroll_controller_.reset(new OverscrollController());
2315 } 2243 }
2316 2244
2245 void RenderWidgetHostViewAura::SnapToPhysicalPixelBoundary() {
2246 // The top left corner of our view in window coordinates might not land on a
2247 // device pixel boundary if we have a non-integer device scale. In that case,
2248 // to avoid the web contents area looking blurry we translate the web contents
2249 // in the +x, +y direction to land on the nearest pixel boundary. This may
2250 // cause the bottom and right edges to be clipped slightly, but that's ok.
2251 gfx::Point view_offset_dips = window_->GetBoundsInRootWindow().origin();
2252 gfx::PointF view_offset = view_offset_dips;
2253 view_offset.Scale(current_device_scale_factor_);
2254 gfx::PointF view_offset_snapped(std::ceil(view_offset.x()),
2255 std::ceil(view_offset.y()));
2256
2257 gfx::Vector2dF fudge = view_offset_snapped - view_offset;
2258 fudge.Scale(1.0 / current_device_scale_factor_);
2259 GetLayer()->SetSubpixelPositionOffset(fudge);
2260 }
2261
2262 void RenderWidgetHostViewAura::InternalSetBounds(const gfx::Rect& rect) {
2263 if (HasDisplayPropertyChanged(window_))
2264 host_->InvalidateScreenInfo();
2265
2266 SnapToPhysicalPixelBoundary();
2267 // Don't recursively call SetBounds if this bounds update is the result of
2268 // a Window::SetBoundsInternal call.
2269 if (!in_bounds_changed_)
2270 window_->SetBounds(rect);
2271 host_->WasResized();
2272 delegated_frame_host_->WasResized();
2273 if (touch_editing_client_) {
2274 touch_editing_client_->OnSelectionOrCursorChanged(selection_anchor_rect_,
2275 selection_focus_rect_);
2276 }
2277 #if defined(OS_WIN)
2278 // Create the legacy dummy window which corresponds to the bounds of the
2279 // webcontents. This will be passed as the container window for windowless
2280 // plugins.
2281 // Plugins like Flash assume the container window which is returned via the
2282 // NPNVnetscapeWindow property corresponds to the bounds of the webpage.
2283 // This is not true in Aura where we have only HWND which is the main Aura
2284 // window. If we return this window to plugins like Flash then it causes the
2285 // coordinate translations done by these plugins to break.
2286 // Additonally the legacy dummy window is needed for accessibility and for
2287 // scrolling to work in legacy drivers for trackpoints/trackpads, etc.
2288 if (!legacy_window_destroyed_ && GetNativeViewId()) {
2289 if (!legacy_render_widget_host_HWND_) {
2290 legacy_render_widget_host_HWND_ = LegacyRenderWidgetHostHWND::Create(
2291 reinterpret_cast<HWND>(GetNativeViewId()));
2292 }
2293 if (legacy_render_widget_host_HWND_) {
2294 legacy_render_widget_host_HWND_->set_host(this);
2295 legacy_render_widget_host_HWND_->SetBounds(
2296 window_->GetBoundsInRootWindow());
2297 // There are cases where the parent window is created, made visible and
2298 // the associated RenderWidget is also visible before the
2299 // LegacyRenderWidgetHostHWND instace is created. Ensure that it is shown
2300 // here.
2301 if (!host_->is_hidden())
2302 legacy_render_widget_host_HWND_->Show();
2303
2304 BrowserAccessibilityManagerWin* manager =
2305 static_cast<BrowserAccessibilityManagerWin*>(
2306 GetBrowserAccessibilityManager());
2307 if (manager)
2308 manager->SetAccessibleHWND(legacy_render_widget_host_HWND_);
2309 }
2310 }
2311
2312 if (mouse_locked_)
2313 UpdateMouseLockRegion();
2314 #endif
2315 }
2316
2317 void RenderWidgetHostViewAura::SchedulePaintIfNotInClip( 2317 void RenderWidgetHostViewAura::SchedulePaintIfNotInClip(
2318 const gfx::Rect& rect, 2318 const gfx::Rect& rect,
2319 const gfx::Rect& clip) { 2319 const gfx::Rect& clip) {
2320 if (!clip.IsEmpty()) { 2320 if (!clip.IsEmpty()) {
2321 gfx::Rect to_paint = gfx::SubtractRects(rect, clip); 2321 gfx::Rect to_paint = gfx::SubtractRects(rect, clip);
2322 if (!to_paint.IsEmpty()) 2322 if (!to_paint.IsEmpty())
2323 window_->SchedulePaintInRect(to_paint); 2323 window_->SchedulePaintInRect(to_paint);
2324 } else { 2324 } else {
2325 window_->SchedulePaintInRect(rect); 2325 window_->SchedulePaintInRect(rect);
2326 } 2326 }
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
2477 2477
2478 //////////////////////////////////////////////////////////////////////////////// 2478 ////////////////////////////////////////////////////////////////////////////////
2479 // RenderWidgetHostViewBase, public: 2479 // RenderWidgetHostViewBase, public:
2480 2480
2481 // static 2481 // static
2482 void RenderWidgetHostViewBase::GetDefaultScreenInfo(WebScreenInfo* results) { 2482 void RenderWidgetHostViewBase::GetDefaultScreenInfo(WebScreenInfo* results) {
2483 GetScreenInfoForWindow(results, NULL); 2483 GetScreenInfoForWindow(results, NULL);
2484 } 2484 }
2485 2485
2486 } // namespace content 2486 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/renderer_host/render_widget_host_view_aura.h ('k') | content/browser/web_contents/web_contents_view_aura.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698