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

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

Issue 351683002: Adds link disambiguation popup support to Windows. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: removed scrolling cruft Created 6 years, 4 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 11 matching lines...) Expand all
22 #include "content/browser/accessibility/browser_accessibility_state_impl.h" 22 #include "content/browser/accessibility/browser_accessibility_state_impl.h"
23 #include "content/browser/frame_host/frame_tree.h" 23 #include "content/browser/frame_host/frame_tree.h"
24 #include "content/browser/frame_host/frame_tree_node.h" 24 #include "content/browser/frame_host/frame_tree_node.h"
25 #include "content/browser/frame_host/render_frame_host_impl.h" 25 #include "content/browser/frame_host/render_frame_host_impl.h"
26 #include "content/browser/gpu/compositor_util.h" 26 #include "content/browser/gpu/compositor_util.h"
27 #include "content/browser/renderer_host/compositor_resize_lock_aura.h" 27 #include "content/browser/renderer_host/compositor_resize_lock_aura.h"
28 #include "content/browser/renderer_host/dip_util.h" 28 #include "content/browser/renderer_host/dip_util.h"
29 #include "content/browser/renderer_host/input/synthetic_gesture_target_aura.h" 29 #include "content/browser/renderer_host/input/synthetic_gesture_target_aura.h"
30 #include "content/browser/renderer_host/overscroll_controller.h" 30 #include "content/browser/renderer_host/overscroll_controller.h"
31 #include "content/browser/renderer_host/render_view_host_delegate.h" 31 #include "content/browser/renderer_host/render_view_host_delegate.h"
32 #include "content/browser/renderer_host/render_view_host_delegate_view.h"
32 #include "content/browser/renderer_host/render_view_host_impl.h" 33 #include "content/browser/renderer_host/render_view_host_impl.h"
33 #include "content/browser/renderer_host/render_widget_host_impl.h" 34 #include "content/browser/renderer_host/render_widget_host_impl.h"
34 #include "content/browser/renderer_host/ui_events_helper.h" 35 #include "content/browser/renderer_host/ui_events_helper.h"
35 #include "content/browser/renderer_host/web_input_event_aura.h" 36 #include "content/browser/renderer_host/web_input_event_aura.h"
36 #include "content/common/gpu/client/gl_helper.h" 37 #include "content/common/gpu/client/gl_helper.h"
37 #include "content/common/gpu/gpu_messages.h" 38 #include "content/common/gpu/gpu_messages.h"
38 #include "content/common/view_messages.h" 39 #include "content/common/view_messages.h"
39 #include "content/public/browser/content_browser_client.h" 40 #include "content/public/browser/content_browser_client.h"
40 #include "content/public/browser/overscroll_configuration.h" 41 #include "content/public/browser/overscroll_configuration.h"
41 #include "content/public/browser/render_view_host.h" 42 #include "content/public/browser/render_view_host.h"
(...skipping 1175 matching lines...) Expand 10 before | Expand all | Expand 10 after
1217 return legacy_render_widget_host_HWND_->window_accessible(); 1218 return legacy_render_widget_host_HWND_->window_accessible();
1218 #endif 1219 #endif
1219 return NULL; 1220 return NULL;
1220 1221
1221 } 1222 }
1222 1223
1223 gfx::GLSurfaceHandle RenderWidgetHostViewAura::GetCompositingSurface() { 1224 gfx::GLSurfaceHandle RenderWidgetHostViewAura::GetCompositingSurface() {
1224 return ImageTransportFactory::GetInstance()->GetSharedSurfaceHandle(); 1225 return ImageTransportFactory::GetInstance()->GetSharedSurfaceHandle();
1225 } 1226 }
1226 1227
1228 #if defined(OS_WIN)
sky 2014/08/04 20:05:20 No ifdef here.
luken 2014/09/11 01:07:27 Done.
1229 void RenderWidgetHostViewAura::ShowDisambiguationPopup(
1230 const gfx::Rect& target_rect,
1231 const SkBitmap& zoomed_bitmap) {
1232 // |target_rect| is provided in pixels, not DIPs. So we convert it to DIPs
1233 // by scaling it by the inverse of the device scale factor.
1234 gfx::RectF screen_target_rect_f(target_rect);
1235 screen_target_rect_f.Scale(1.0f / current_device_scale_factor_);
1236 disambiguation_target_rect_ = gfx::ToEnclosingRect(screen_target_rect_f);
1237
1238 float scale = static_cast<float>(zoomed_bitmap.width()) /
1239 static_cast<float>(target_rect.width());
1240 gfx::Size zoomed_size(gfx::ToCeiledSize(
1241 gfx::ScaleSize(disambiguation_target_rect_.size(), scale)));
1242
1243 CopyFromCompositingSurface(
sky 2014/08/04 20:05:20 If this is async, how do you need it completes bef
luken 2014/09/11 01:07:27 I switched over to a weak this pointer. If this vi
1244 disambiguation_target_rect_,
1245 zoomed_size,
1246 base::Bind(&RenderWidgetHostViewAura::DisambiguationPopupRendered,
1247 base::Unretained(this)),
1248 kN32_SkColorType);
1249 }
1250
1251 void RenderWidgetHostViewAura::DisambiguationPopupRendered(
1252 bool success,
1253 const SkBitmap& result) {
1254 if (!success)
1255 return;
1256
1257 // Use RenderViewHostDelegate to get to the WebContentsViewAura, which will
1258 // actually show the delegate.
1259 RenderViewHostDelegate* delegate = NULL;
1260 if (host_->IsRenderView())
1261 delegate = RenderViewHost::From(host_)->GetDelegate();
1262 RenderViewHostDelegateView* delegate_view = NULL;
1263 if (delegate)
1264 delegate_view = delegate->GetDelegateView();
1265 if (delegate_view)
1266 delegate_view->ShowDisambiguationPopup(disambiguation_target_rect_, result);
1267 }
1268
1269 void RenderWidgetHostViewAura::HideDisambiguationPopup() {
1270 RenderViewHostDelegate* delegate = NULL;
1271 if (host_->IsRenderView())
1272 delegate = RenderViewHost::From(host_)->GetDelegate();
1273 RenderViewHostDelegateView* delegate_view = NULL;
1274 if (delegate)
1275 delegate_view = delegate->GetDelegateView();
1276 if (delegate_view)
1277 delegate_view->HideDisambiguationPopup();
1278 }
1279 #endif
1280
1227 bool RenderWidgetHostViewAura::LockMouse() { 1281 bool RenderWidgetHostViewAura::LockMouse() {
1228 aura::Window* root_window = window_->GetRootWindow(); 1282 aura::Window* root_window = window_->GetRootWindow();
1229 if (!root_window) 1283 if (!root_window)
1230 return false; 1284 return false;
1231 1285
1232 if (mouse_locked_) 1286 if (mouse_locked_)
1233 return true; 1287 return true;
1234 1288
1235 mouse_locked_ = true; 1289 mouse_locked_ = true;
1236 #if !defined(OS_WIN) 1290 #if !defined(OS_WIN)
(...skipping 595 matching lines...) Expand 10 before | Expand all | Expand 10 after
1832 // So here we check if we have any owned popup windows in the foreground and 1886 // So here we check if we have any owned popup windows in the foreground and
1833 // dismiss them. 1887 // dismiss them.
1834 aura::WindowTreeHost* host = window_->GetHost(); 1888 aura::WindowTreeHost* host = window_->GetHost();
1835 if (host) { 1889 if (host) {
1836 HWND parent = host->GetAcceleratedWidget(); 1890 HWND parent = host->GetAcceleratedWidget();
1837 HWND toplevel_hwnd = ::GetAncestor(parent, GA_ROOT); 1891 HWND toplevel_hwnd = ::GetAncestor(parent, GA_ROOT);
1838 EnumThreadWindows(GetCurrentThreadId(), 1892 EnumThreadWindows(GetCurrentThreadId(),
1839 DismissOwnedPopups, 1893 DismissOwnedPopups,
1840 reinterpret_cast<LPARAM>(toplevel_hwnd)); 1894 reinterpret_cast<LPARAM>(toplevel_hwnd));
1841 } 1895 }
1896 // The Disambiguation popup does not parent itself from this window, so we
1897 // manually dismiss it.
1898 HideDisambiguationPopup();
1842 #endif 1899 #endif
1843 blink::WebMouseWheelEvent mouse_wheel_event = 1900 blink::WebMouseWheelEvent mouse_wheel_event =
1844 MakeWebMouseWheelEvent(static_cast<ui::MouseWheelEvent*>(event)); 1901 MakeWebMouseWheelEvent(static_cast<ui::MouseWheelEvent*>(event));
1845 if (mouse_wheel_event.deltaX != 0 || mouse_wheel_event.deltaY != 0) 1902 if (mouse_wheel_event.deltaX != 0 || mouse_wheel_event.deltaY != 0)
1846 host_->ForwardWheelEvent(mouse_wheel_event); 1903 host_->ForwardWheelEvent(mouse_wheel_event);
1847 } else if (CanRendererHandleEvent(event) && 1904 } else if (CanRendererHandleEvent(event) &&
1848 !(event->flags() & ui::EF_FROM_TOUCH)) { 1905 !(event->flags() & ui::EF_FROM_TOUCH)) {
1849 blink::WebMouseEvent mouse_event = MakeWebMouseEvent(event); 1906 blink::WebMouseEvent mouse_event = MakeWebMouseEvent(event);
1850 ModifyEventMovementAndCoords(&mouse_event); 1907 ModifyEventMovementAndCoords(&mouse_event);
1851 host_->ForwardMouseEvent(mouse_event); 1908 host_->ForwardMouseEvent(mouse_event);
(...skipping 641 matching lines...) Expand 10 before | Expand all | Expand 10 after
2493 2550
2494 //////////////////////////////////////////////////////////////////////////////// 2551 ////////////////////////////////////////////////////////////////////////////////
2495 // RenderWidgetHostViewBase, public: 2552 // RenderWidgetHostViewBase, public:
2496 2553
2497 // static 2554 // static
2498 void RenderWidgetHostViewBase::GetDefaultScreenInfo(WebScreenInfo* results) { 2555 void RenderWidgetHostViewBase::GetDefaultScreenInfo(WebScreenInfo* results) {
2499 GetScreenInfoForWindow(results, NULL); 2556 GetScreenInfoForWindow(results, NULL);
2500 } 2557 }
2501 2558
2502 } // namespace content 2559 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698