OLD | NEW |
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_win.h" | 5 #include "content/browser/renderer_host/render_widget_host_view_win.h" |
6 | 6 |
7 #include <InputScope.h> | 7 #include <InputScope.h> |
8 #include <wtsapi32.h> | 8 #include <wtsapi32.h> |
9 #pragma comment(lib, "wtsapi32.lib") | 9 #pragma comment(lib, "wtsapi32.lib") |
10 | 10 |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
60 #include "ui/base/events/event.h" | 60 #include "ui/base/events/event.h" |
61 #include "ui/base/events/event_utils.h" | 61 #include "ui/base/events/event_utils.h" |
62 #include "ui/base/ime/composition_text.h" | 62 #include "ui/base/ime/composition_text.h" |
63 #include "ui/base/ime/win/imm32_manager.h" | 63 #include "ui/base/ime/win/imm32_manager.h" |
64 #include "ui/base/ime/win/tsf_input_scope.h" | 64 #include "ui/base/ime/win/tsf_input_scope.h" |
65 #include "ui/base/l10n/l10n_util_win.h" | 65 #include "ui/base/l10n/l10n_util_win.h" |
66 #include "ui/base/touch/touch_device.h" | 66 #include "ui/base/touch/touch_device.h" |
67 #include "ui/base/touch/touch_enabled.h" | 67 #include "ui/base/touch/touch_enabled.h" |
68 #include "ui/base/ui_base_switches.h" | 68 #include "ui/base/ui_base_switches.h" |
69 #include "ui/base/view_prop.h" | 69 #include "ui/base/view_prop.h" |
70 #include "ui/base/win/hwnd_util.h" | |
71 #include "ui/base/win/mouse_wheel_util.h" | 70 #include "ui/base/win/mouse_wheel_util.h" |
72 #include "ui/base/win/touch_input.h" | 71 #include "ui/base/win/touch_input.h" |
73 #include "ui/gfx/canvas.h" | 72 #include "ui/gfx/canvas.h" |
74 #include "ui/gfx/dpi_win.h" | |
75 #include "ui/gfx/rect.h" | 73 #include "ui/gfx/rect.h" |
76 #include "ui/gfx/rect_conversions.h" | 74 #include "ui/gfx/rect_conversions.h" |
77 #include "ui/gfx/screen.h" | 75 #include "ui/gfx/screen.h" |
78 #include "ui/gfx/text_elider.h" | 76 #include "ui/gfx/text_elider.h" |
| 77 #include "ui/gfx/win/dpi.h" |
| 78 #include "ui/gfx/win/hwnd_util.h" |
79 #include "webkit/common/cursors/webcursor.h" | 79 #include "webkit/common/cursors/webcursor.h" |
80 #include "win8/util/win8_util.h" | 80 #include "win8/util/win8_util.h" |
81 | 81 |
82 using base::TimeDelta; | 82 using base::TimeDelta; |
83 using base::TimeTicks; | 83 using base::TimeTicks; |
84 using ui::ViewProp; | 84 using ui::ViewProp; |
85 using WebKit::WebInputEvent; | 85 using WebKit::WebInputEvent; |
86 using WebKit::WebMouseEvent; | 86 using WebKit::WebMouseEvent; |
87 using WebKit::WebTextDirection; | 87 using WebKit::WebTextDirection; |
88 | 88 |
(...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
444 close_on_deactivate_ = true; | 444 close_on_deactivate_ = true; |
445 DoPopupOrFullscreenInit(parent_host_view->GetNativeView(), pos, | 445 DoPopupOrFullscreenInit(parent_host_view->GetNativeView(), pos, |
446 WS_EX_TOOLWINDOW); | 446 WS_EX_TOOLWINDOW); |
447 } | 447 } |
448 | 448 |
449 void RenderWidgetHostViewWin::InitAsFullscreen( | 449 void RenderWidgetHostViewWin::InitAsFullscreen( |
450 RenderWidgetHostView* reference_host_view) { | 450 RenderWidgetHostView* reference_host_view) { |
451 gfx::Rect pos = gfx::Screen::GetNativeScreen()->GetDisplayNearestWindow( | 451 gfx::Rect pos = gfx::Screen::GetNativeScreen()->GetDisplayNearestWindow( |
452 reference_host_view->GetNativeView()).bounds(); | 452 reference_host_view->GetNativeView()).bounds(); |
453 is_fullscreen_ = true; | 453 is_fullscreen_ = true; |
454 DoPopupOrFullscreenInit(ui::GetWindowToParentTo(true), pos, 0); | 454 DoPopupOrFullscreenInit(gfx::GetWindowToParentTo(true), pos, 0); |
455 } | 455 } |
456 | 456 |
457 RenderWidgetHost* RenderWidgetHostViewWin::GetRenderWidgetHost() const { | 457 RenderWidgetHost* RenderWidgetHostViewWin::GetRenderWidgetHost() const { |
458 return render_widget_host_; | 458 return render_widget_host_; |
459 } | 459 } |
460 | 460 |
461 void RenderWidgetHostViewWin::WasShown() { | 461 void RenderWidgetHostViewWin::WasShown() { |
462 if (!is_hidden_) | 462 if (!is_hidden_) |
463 return; | 463 return; |
464 | 464 |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
568 static BOOL CALLBACK AddChildWindowToVector(HWND hwnd, LPARAM lparam) { | 568 static BOOL CALLBACK AddChildWindowToVector(HWND hwnd, LPARAM lparam) { |
569 std::vector<HWND>* vector = reinterpret_cast<std::vector<HWND>*>(lparam); | 569 std::vector<HWND>* vector = reinterpret_cast<std::vector<HWND>*>(lparam); |
570 vector->push_back(hwnd); | 570 vector->push_back(hwnd); |
571 return TRUE; | 571 return TRUE; |
572 } | 572 } |
573 | 573 |
574 void RenderWidgetHostViewWin::CleanupCompositorWindow() { | 574 void RenderWidgetHostViewWin::CleanupCompositorWindow() { |
575 if (!compositor_host_window_) | 575 if (!compositor_host_window_) |
576 return; | 576 return; |
577 | 577 |
578 ui::SetWindowUserData(compositor_host_window_, NULL); | 578 gfx::SetWindowUserData(compositor_host_window_, NULL); |
579 | 579 |
580 // Hide the compositor and parent it to the desktop rather than destroying | 580 // Hide the compositor and parent it to the desktop rather than destroying |
581 // it immediately. The GPU process has a grace period to stop accessing the | 581 // it immediately. The GPU process has a grace period to stop accessing the |
582 // window. TODO(apatrick): the GPU process should acknowledge that it has | 582 // window. TODO(apatrick): the GPU process should acknowledge that it has |
583 // finished with the window handle and the browser process should destroy it | 583 // finished with the window handle and the browser process should destroy it |
584 // at that point. | 584 // at that point. |
585 ::ShowWindow(compositor_host_window_, SW_HIDE); | 585 ::ShowWindow(compositor_host_window_, SW_HIDE); |
586 ::SetParent(compositor_host_window_, NULL); | 586 ::SetParent(compositor_host_window_, NULL); |
587 | 587 |
588 BrowserThread::PostDelayedTask( | 588 BrowserThread::PostDelayedTask( |
(...skipping 30 matching lines...) Expand all Loading... |
619 else | 619 else |
620 return !!render_widget_host_->GetBackingStore(false); | 620 return !!render_widget_host_->GetBackingStore(false); |
621 } | 621 } |
622 | 622 |
623 void RenderWidgetHostViewWin::Show() { | 623 void RenderWidgetHostViewWin::Show() { |
624 ShowWindow(SW_SHOW); | 624 ShowWindow(SW_SHOW); |
625 WasShown(); | 625 WasShown(); |
626 } | 626 } |
627 | 627 |
628 void RenderWidgetHostViewWin::Hide() { | 628 void RenderWidgetHostViewWin::Hide() { |
629 if (!is_fullscreen_ && GetParent() == ui::GetWindowToParentTo(true)) { | 629 if (!is_fullscreen_ && GetParent() == gfx::GetWindowToParentTo(true)) { |
630 LOG(WARNING) << "Hide() called twice in a row: " << this << ":" | 630 LOG(WARNING) << "Hide() called twice in a row: " << this << ":" |
631 << GetParent(); | 631 << GetParent(); |
632 return; | 632 return; |
633 } | 633 } |
634 | 634 |
635 if (::GetFocus() == m_hWnd) | 635 if (::GetFocus() == m_hWnd) |
636 ::SetFocus(NULL); | 636 ::SetFocus(NULL); |
637 ShowWindow(SW_HIDE); | 637 ShowWindow(SW_HIDE); |
638 | 638 |
639 WasHidden(); | 639 WasHidden(); |
(...skipping 1671 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2311 // an event to the renderer which would then eventually send over | 2311 // an event to the renderer which would then eventually send over |
2312 // a setFocus call to the plugin widget. This would ensure that | 2312 // a setFocus call to the plugin widget. This would ensure that |
2313 // the renderer (webkit) knows about the plugin widget receiving | 2313 // the renderer (webkit) knows about the plugin widget receiving |
2314 // focus. | 2314 // focus. |
2315 // TODO(iyengar) Do the right thing as per the above comment. | 2315 // TODO(iyengar) Do the right thing as per the above comment. |
2316 POINT cursor_pos = {0}; | 2316 POINT cursor_pos = {0}; |
2317 ::GetCursorPos(&cursor_pos); | 2317 ::GetCursorPos(&cursor_pos); |
2318 ::ScreenToClient(m_hWnd, &cursor_pos); | 2318 ::ScreenToClient(m_hWnd, &cursor_pos); |
2319 HWND child_window = ::RealChildWindowFromPoint(m_hWnd, cursor_pos); | 2319 HWND child_window = ::RealChildWindowFromPoint(m_hWnd, cursor_pos); |
2320 if (::IsWindow(child_window) && child_window != m_hWnd) { | 2320 if (::IsWindow(child_window) && child_window != m_hWnd) { |
2321 if (ui::GetClassName(child_window) == kWrapperNativeWindowClassName) | 2321 if (gfx::GetClassName(child_window) == kWrapperNativeWindowClassName) |
2322 child_window = ::GetWindow(child_window, GW_CHILD); | 2322 child_window = ::GetWindow(child_window, GW_CHILD); |
2323 | 2323 |
2324 ::SetFocus(child_window); | 2324 ::SetFocus(child_window); |
2325 return MA_NOACTIVATE; | 2325 return MA_NOACTIVATE; |
2326 } | 2326 } |
2327 } | 2327 } |
2328 handled = FALSE; | 2328 handled = FALSE; |
2329 render_widget_host_->OnPointerEventActivate(); | 2329 render_widget_host_->OnPointerEventActivate(); |
2330 return MA_ACTIVATE; | 2330 return MA_ACTIVATE; |
2331 } | 2331 } |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2457 // clear the BrowserAccessibilityManager, because the renderer is | 2457 // clear the BrowserAccessibilityManager, because the renderer is |
2458 // dead and any accessibility information we have is now stale. | 2458 // dead and any accessibility information we have is now stale. |
2459 SetBrowserAccessibilityManager(NULL); | 2459 SetBrowserAccessibilityManager(NULL); |
2460 } | 2460 } |
2461 | 2461 |
2462 static void PaintCompositorHostWindow(HWND hWnd) { | 2462 static void PaintCompositorHostWindow(HWND hWnd) { |
2463 PAINTSTRUCT paint; | 2463 PAINTSTRUCT paint; |
2464 BeginPaint(hWnd, &paint); | 2464 BeginPaint(hWnd, &paint); |
2465 | 2465 |
2466 RenderWidgetHostViewWin* win = static_cast<RenderWidgetHostViewWin*>( | 2466 RenderWidgetHostViewWin* win = static_cast<RenderWidgetHostViewWin*>( |
2467 ui::GetWindowUserData(hWnd)); | 2467 gfx::GetWindowUserData(hWnd)); |
2468 // Trigger composite to rerender window. | 2468 // Trigger composite to rerender window. |
2469 if (win) | 2469 if (win) |
2470 win->AcceleratedPaint(paint.hdc); | 2470 win->AcceleratedPaint(paint.hdc); |
2471 | 2471 |
2472 EndPaint(hWnd, &paint); | 2472 EndPaint(hWnd, &paint); |
2473 } | 2473 } |
2474 | 2474 |
2475 // WndProc for the compositor host window. We use this instead of Default so | 2475 // WndProc for the compositor host window. We use this instead of Default so |
2476 // we can drop WM_PAINT and WM_ERASEBKGD messages on the floor. | 2476 // we can drop WM_PAINT and WM_ERASEBKGD messages on the floor. |
2477 static LRESULT CALLBACK CompositorHostWindowProc(HWND hWnd, UINT message, | 2477 static LRESULT CALLBACK CompositorHostWindowProc(HWND hWnd, UINT message, |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2556 int width = std::max(1, | 2556 int width = std::max(1, |
2557 static_cast<int>(currentRect.right - currentRect.left)); | 2557 static_cast<int>(currentRect.right - currentRect.left)); |
2558 int height = std::max(1, | 2558 int height = std::max(1, |
2559 static_cast<int>(currentRect.bottom - currentRect.top)); | 2559 static_cast<int>(currentRect.bottom - currentRect.top)); |
2560 | 2560 |
2561 compositor_host_window_ = CreateWindowEx( | 2561 compositor_host_window_ = CreateWindowEx( |
2562 WS_EX_LEFT | WS_EX_LTRREADING | WS_EX_RIGHTSCROLLBAR, | 2562 WS_EX_LEFT | WS_EX_LTRREADING | WS_EX_RIGHTSCROLLBAR, |
2563 MAKEINTATOM(atom), 0, | 2563 MAKEINTATOM(atom), 0, |
2564 WS_CHILD | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_DISABLED, | 2564 WS_CHILD | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_DISABLED, |
2565 0, 0, width, height, m_hWnd, 0, instance, 0); | 2565 0, 0, width, height, m_hWnd, 0, instance, 0); |
2566 ui::CheckWindowCreated(compositor_host_window_); | 2566 gfx::CheckWindowCreated(compositor_host_window_); |
2567 | 2567 |
2568 ui::SetWindowUserData(compositor_host_window_, this); | 2568 gfx::SetWindowUserData(compositor_host_window_, this); |
2569 | 2569 |
2570 gfx::GLSurfaceHandle surface_handle(compositor_host_window_, | 2570 gfx::GLSurfaceHandle surface_handle(compositor_host_window_, |
2571 gfx::NATIVE_TRANSPORT); | 2571 gfx::NATIVE_TRANSPORT); |
2572 return surface_handle; | 2572 return surface_handle; |
2573 } | 2573 } |
2574 | 2574 |
2575 void RenderWidgetHostViewWin::OnAcceleratedCompositingStateChange() { | 2575 void RenderWidgetHostViewWin::OnAcceleratedCompositingStateChange() { |
2576 bool show = render_widget_host_->is_accelerated_compositing_active(); | 2576 bool show = render_widget_host_->is_accelerated_compositing_active(); |
2577 // When we first create the compositor, we will get a show request from | 2577 // When we first create the compositor, we will get a show request from |
2578 // the renderer before we have gotten the create request from the GPU. In this | 2578 // the renderer before we have gotten the create request from the GPU. In this |
(...skipping 620 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3199 return new RenderWidgetHostViewWin(widget); | 3199 return new RenderWidgetHostViewWin(widget); |
3200 } | 3200 } |
3201 | 3201 |
3202 // static | 3202 // static |
3203 void RenderWidgetHostViewPort::GetDefaultScreenInfo( | 3203 void RenderWidgetHostViewPort::GetDefaultScreenInfo( |
3204 WebKit::WebScreenInfo* results) { | 3204 WebKit::WebScreenInfo* results) { |
3205 GetScreenInfoForWindow(0, results); | 3205 GetScreenInfoForWindow(0, results); |
3206 } | 3206 } |
3207 | 3207 |
3208 } // namespace content | 3208 } // namespace content |
OLD | NEW |