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

Side by Side Diff: content/renderer/render_widget.cc

Issue 23364004: Implementation of device metrics emulation in render view. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 7 years, 3 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
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/renderer/render_widget.h" 5 #include "content/renderer/render_widget.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/debug/trace_event.h" 9 #include "base/debug/trace_event.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 #endif // defined(OS_POSIX) 72 #endif // defined(OS_POSIX)
73 73
74 #include "third_party/WebKit/public/web/WebWidget.h" 74 #include "third_party/WebKit/public/web/WebWidget.h"
75 75
76 using WebKit::WebCompositionUnderline; 76 using WebKit::WebCompositionUnderline;
77 using WebKit::WebCursorInfo; 77 using WebKit::WebCursorInfo;
78 using WebKit::WebGestureEvent; 78 using WebKit::WebGestureEvent;
79 using WebKit::WebInputEvent; 79 using WebKit::WebInputEvent;
80 using WebKit::WebKeyboardEvent; 80 using WebKit::WebKeyboardEvent;
81 using WebKit::WebMouseEvent; 81 using WebKit::WebMouseEvent;
82 using WebKit::WebMouseWheelEvent;
82 using WebKit::WebNavigationPolicy; 83 using WebKit::WebNavigationPolicy;
83 using WebKit::WebPagePopup; 84 using WebKit::WebPagePopup;
84 using WebKit::WebPoint; 85 using WebKit::WebPoint;
85 using WebKit::WebPopupMenu; 86 using WebKit::WebPopupMenu;
86 using WebKit::WebPopupMenuInfo; 87 using WebKit::WebPopupMenuInfo;
87 using WebKit::WebPopupType; 88 using WebKit::WebPopupType;
88 using WebKit::WebRange; 89 using WebKit::WebRange;
89 using WebKit::WebRect; 90 using WebKit::WebRect;
90 using WebKit::WebScreenInfo; 91 using WebKit::WebScreenInfo;
91 using WebKit::WebSize; 92 using WebKit::WebSize;
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after
373 IPC_MESSAGE_HANDLER(ViewMsg_Close, OnClose) 374 IPC_MESSAGE_HANDLER(ViewMsg_Close, OnClose)
374 IPC_MESSAGE_HANDLER(ViewMsg_CreatingNew_ACK, OnCreatingNewAck) 375 IPC_MESSAGE_HANDLER(ViewMsg_CreatingNew_ACK, OnCreatingNewAck)
375 IPC_MESSAGE_HANDLER(ViewMsg_Resize, OnResize) 376 IPC_MESSAGE_HANDLER(ViewMsg_Resize, OnResize)
376 IPC_MESSAGE_HANDLER(ViewMsg_ChangeResizeRect, OnChangeResizeRect) 377 IPC_MESSAGE_HANDLER(ViewMsg_ChangeResizeRect, OnChangeResizeRect)
377 IPC_MESSAGE_HANDLER(ViewMsg_WasHidden, OnWasHidden) 378 IPC_MESSAGE_HANDLER(ViewMsg_WasHidden, OnWasHidden)
378 IPC_MESSAGE_HANDLER(ViewMsg_WasShown, OnWasShown) 379 IPC_MESSAGE_HANDLER(ViewMsg_WasShown, OnWasShown)
379 IPC_MESSAGE_HANDLER(ViewMsg_WasSwappedOut, OnWasSwappedOut) 380 IPC_MESSAGE_HANDLER(ViewMsg_WasSwappedOut, OnWasSwappedOut)
380 IPC_MESSAGE_HANDLER(ViewMsg_UpdateRect_ACK, OnUpdateRectAck) 381 IPC_MESSAGE_HANDLER(ViewMsg_UpdateRect_ACK, OnUpdateRectAck)
381 IPC_MESSAGE_HANDLER(ViewMsg_SwapBuffers_ACK, 382 IPC_MESSAGE_HANDLER(ViewMsg_SwapBuffers_ACK,
382 OnViewContextSwapBuffersComplete) 383 OnViewContextSwapBuffersComplete)
384 IPC_MESSAGE_HANDLER(ViewMsg_EmulateDevice_ACK, OnEmulateDeviceAck)
383 IPC_MESSAGE_HANDLER(ViewMsg_SetInputMethodActive, OnSetInputMethodActive) 385 IPC_MESSAGE_HANDLER(ViewMsg_SetInputMethodActive, OnSetInputMethodActive)
384 IPC_MESSAGE_HANDLER(ViewMsg_ImeSetComposition, OnImeSetComposition) 386 IPC_MESSAGE_HANDLER(ViewMsg_ImeSetComposition, OnImeSetComposition)
385 IPC_MESSAGE_HANDLER(ViewMsg_ImeConfirmComposition, OnImeConfirmComposition) 387 IPC_MESSAGE_HANDLER(ViewMsg_ImeConfirmComposition, OnImeConfirmComposition)
386 IPC_MESSAGE_HANDLER(ViewMsg_PaintAtSize, OnPaintAtSize) 388 IPC_MESSAGE_HANDLER(ViewMsg_PaintAtSize, OnPaintAtSize)
387 IPC_MESSAGE_HANDLER(ViewMsg_Repaint, OnRepaint) 389 IPC_MESSAGE_HANDLER(ViewMsg_Repaint, OnRepaint)
388 IPC_MESSAGE_HANDLER(ViewMsg_SmoothScrollCompleted, OnSmoothScrollCompleted) 390 IPC_MESSAGE_HANDLER(ViewMsg_SmoothScrollCompleted, OnSmoothScrollCompleted)
389 IPC_MESSAGE_HANDLER(ViewMsg_SetTextDirection, OnSetTextDirection) 391 IPC_MESSAGE_HANDLER(ViewMsg_SetTextDirection, OnSetTextDirection)
390 IPC_MESSAGE_HANDLER(ViewMsg_Move_ACK, OnRequestMoveAck) 392 IPC_MESSAGE_HANDLER(ViewMsg_Move_ACK, OnRequestMoveAck)
391 IPC_MESSAGE_HANDLER(ViewMsg_UpdateScreenRects, OnUpdateScreenRects) 393 IPC_MESSAGE_HANDLER(ViewMsg_UpdateScreenRects, OnUpdateScreenRects)
392 #if defined(OS_ANDROID) 394 #if defined(OS_ANDROID)
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
508 // If there is a Send call on the stack, then it could be dangerous to close 510 // If there is a Send call on the stack, then it could be dangerous to close
509 // now. Post a task that only gets invoked when there are no nested message 511 // now. Post a task that only gets invoked when there are no nested message
510 // loops. 512 // loops.
511 base::MessageLoop::current()->PostNonNestableTask( 513 base::MessageLoop::current()->PostNonNestableTask(
512 FROM_HERE, base::Bind(&RenderWidget::Close, this)); 514 FROM_HERE, base::Bind(&RenderWidget::Close, this));
513 515
514 // Balances the AddRef taken when we called AddRoute. 516 // Balances the AddRef taken when we called AddRoute.
515 Release(); 517 Release();
516 } 518 }
517 519
520 void RenderWidget::EmulateDevice(
521 bool enabled,
522 const gfx::Size& device_size,
523 const gfx::Rect& widget_rect,
524 float device_scale_factor,
525 bool fit_to_view) {
526 pending_device_emulation_enabled_ = enabled;
527 if (enabled) {
528 pending_device_emulation_helper_.reset(new DeviceEmulationHelper(
529 device_size,
530 widget_rect,
531 device_scale_factor,
532 fit_to_view));
533 } else {
534 pending_device_emulation_helper_.reset();
535 }
536 Send(new ViewHostMsg_EmulateDevice(routing_id_, enabled));
537 }
538
539 void RenderWidget::OnEmulateDeviceAck(bool enabled) {
540 // We may have got another emulate device request while sending message
541 // to the host. If the host idea of whether device emulation is enabled
542 // differs, wait for another ack with the right |enabled| value.
543 if (enabled != pending_device_emulation_enabled_)
544 return;
545
546 if (pending_device_emulation_enabled_) {
547 if (!device_emulation_helper_) {
548 device_emulation_helper_ = pending_device_emulation_helper_.Pass();
549 device_emulation_helper_->BeginEmulation(this);
550 } else {
551 device_emulation_helper_->ChangeEmulationParams(
552 this, pending_device_emulation_helper_.get());
553 pending_device_emulation_helper_.reset();
554 }
555 } else {
556 if (device_emulation_helper_)
557 device_emulation_helper_->EndEmulation(this);
558 device_emulation_helper_.reset();
559 }
560 }
561
518 // Got a response from the browser after the renderer decided to create a new 562 // Got a response from the browser after the renderer decided to create a new
519 // view. 563 // view.
520 void RenderWidget::OnCreatingNewAck() { 564 void RenderWidget::OnCreatingNewAck() {
521 DCHECK(routing_id_ != MSG_ROUTING_NONE); 565 DCHECK(routing_id_ != MSG_ROUTING_NONE);
522 566
523 CompleteInit(); 567 CompleteInit();
524 } 568 }
525 569
526 void RenderWidget::OnResize(const ViewMsg_Resize_Params& params) { 570 void RenderWidget::OnResize(const ViewMsg_Resize_Params& params) {
571 if (device_emulation_helper_) {
572 device_emulation_helper_->OnResizeMessage(this, params);
573 return;
574 }
575
527 screen_info_ = params.screen_info; 576 screen_info_ = params.screen_info;
528 SetDeviceScaleFactor(screen_info_.deviceScaleFactor); 577 SetDeviceScaleFactor(screen_info_.deviceScaleFactor);
529 Resize(params.new_size, params.physical_backing_size, 578 Resize(params.new_size, params.physical_backing_size,
530 params.overdraw_bottom_height, params.resizer_rect, 579 params.overdraw_bottom_height, params.resizer_rect,
531 params.is_fullscreen, SEND_RESIZE_ACK); 580 params.is_fullscreen, SEND_RESIZE_ACK);
532 } 581 }
533 582
534 void RenderWidget::OnChangeResizeRect(const gfx::Rect& resizer_rect) { 583 void RenderWidget::OnChangeResizeRect(const gfx::Rect& resizer_rect) {
535 if (resizer_rect_ != resizer_rect) { 584 if (resizer_rect_ != resizer_rect) {
536 gfx::Rect view_rect(size_); 585 gfx::Rect view_rect(size_);
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after
782 } 831 }
783 832
784 // Continue painting if necessary... 833 // Continue painting if necessary...
785 DoDeferredUpdateAndSendInputAck(); 834 DoDeferredUpdateAndSendInputAck();
786 } 835 }
787 836
788 void RenderWidget::OnHandleInputEvent(const WebKit::WebInputEvent* input_event, 837 void RenderWidget::OnHandleInputEvent(const WebKit::WebInputEvent* input_event,
789 const ui::LatencyInfo& latency_info, 838 const ui::LatencyInfo& latency_info,
790 bool is_keyboard_shortcut) { 839 bool is_keyboard_shortcut) {
791 handling_input_event_ = true; 840 handling_input_event_ = true;
841
842 scoped_ptr<const WebKit::WebInputEvent> owner;
843 if (device_emulation_helper_) {
844 input_event = device_emulation_helper_->ConvertInputEventToEmulated(
845 this, input_event);
846 if (input_event)
847 owner.reset(input_event);
848 }
849
792 if (!input_event) { 850 if (!input_event) {
793 handling_input_event_ = false; 851 handling_input_event_ = false;
794 return; 852 return;
795 } 853 }
796 854
797 const char* const event_name = GetEventName(input_event->type); 855 const char* const event_name = GetEventName(input_event->type);
798 TRACE_EVENT1("renderer", "RenderWidget::OnHandleInputEvent", 856 TRACE_EVENT1("renderer", "RenderWidget::OnHandleInputEvent",
799 "event", event_name); 857 "event", event_name);
800 858
801 if (compositor_) 859 if (compositor_)
(...skipping 959 matching lines...) Expand 10 before | Expand all | Expand 10 after
1761 return pending_window_rect_; 1819 return pending_window_rect_;
1762 1820
1763 return view_screen_rect_; 1821 return view_screen_rect_;
1764 } 1822 }
1765 1823
1766 void RenderWidget::setToolTipText(const WebKit::WebString& text, 1824 void RenderWidget::setToolTipText(const WebKit::WebString& text,
1767 WebTextDirection hint) { 1825 WebTextDirection hint) {
1768 Send(new ViewHostMsg_SetTooltipText(routing_id_, text, hint)); 1826 Send(new ViewHostMsg_SetTooltipText(routing_id_, text, hint));
1769 } 1827 }
1770 1828
1771 void RenderWidget::setWindowRect(const WebRect& pos) { 1829 void RenderWidget::setWindowRect(const WebRect& rect) {
1830 WebRect pos = rect;
1831 if (popup_device_emulation_helper_) {
1832 pos = popup_device_emulation_helper_->ConvertPopupScreenRectFromEmulated(
1833 this, rect);
1834 }
1835
1772 if (did_show_) { 1836 if (did_show_) {
1773 if (!RenderThreadImpl::current()->layout_test_mode()) { 1837 if (!RenderThreadImpl::current()->layout_test_mode()) {
1774 Send(new ViewHostMsg_RequestMove(routing_id_, pos)); 1838 Send(new ViewHostMsg_RequestMove(routing_id_, pos));
1775 SetPendingWindowRect(pos); 1839 SetPendingWindowRect(pos);
1776 } else { 1840 } else {
1777 WebSize new_size(pos.width, pos.height); 1841 WebSize new_size(pos.width, pos.height);
1778 Resize(new_size, new_size, overdraw_bottom_height_, 1842 Resize(new_size, new_size, overdraw_bottom_height_,
1779 WebRect(), is_fullscreen_, NO_RESIZE_ACK); 1843 WebRect(), is_fullscreen_, NO_RESIZE_ACK);
1780 view_screen_rect_ = pos; 1844 view_screen_rect_ = pos;
1781 window_screen_rect_ = pos; 1845 window_screen_rect_ = pos;
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
2002 } 2066 }
2003 2067
2004 void RenderWidget::OnSetTextDirection(WebTextDirection direction) { 2068 void RenderWidget::OnSetTextDirection(WebTextDirection direction) {
2005 if (!webwidget_) 2069 if (!webwidget_)
2006 return; 2070 return;
2007 webwidget_->setTextDirection(direction); 2071 webwidget_->setTextDirection(direction);
2008 } 2072 }
2009 2073
2010 void RenderWidget::OnUpdateScreenRects(const gfx::Rect& view_screen_rect, 2074 void RenderWidget::OnUpdateScreenRects(const gfx::Rect& view_screen_rect,
2011 const gfx::Rect& window_screen_rect) { 2075 const gfx::Rect& window_screen_rect) {
2076 if (device_emulation_helper_) {
2077 device_emulation_helper_->OnUpdateScreenRectsMessage(
2078 this, view_screen_rect, window_screen_rect);
2079 return;
2080 }
2012 view_screen_rect_ = view_screen_rect; 2081 view_screen_rect_ = view_screen_rect;
2013 window_screen_rect_ = window_screen_rect; 2082 window_screen_rect_ = window_screen_rect;
2014 Send(new ViewHostMsg_UpdateScreenRects_ACK(routing_id())); 2083 Send(new ViewHostMsg_UpdateScreenRects_ACK(routing_id()));
2015 } 2084 }
2016 2085
2017 #if defined(OS_ANDROID) 2086 #if defined(OS_ANDROID)
2018 void RenderWidget::OnImeBatchStateChanged(bool is_begin) { 2087 void RenderWidget::OnImeBatchStateChanged(bool is_begin) {
2019 Send(new ViewHostMsg_ImeBatchStateChanged_ACK(routing_id(), is_begin)); 2088 Send(new ViewHostMsg_ImeBatchStateChanged_ACK(routing_id(), is_begin));
2020 } 2089 }
2021 2090
(...skipping 499 matching lines...) Expand 10 before | Expand all | Expand 10 after
2521 weak_ptr_factory_.GetWeakPtr())); 2590 weak_ptr_factory_.GetWeakPtr()));
2522 2591
2523 if (!context->InitializeWithDefaultBufferSizes( 2592 if (!context->InitializeWithDefaultBufferSizes(
2524 attributes, 2593 attributes,
2525 false /* bind generates resources */, 2594 false /* bind generates resources */,
2526 CAUSE_FOR_GPU_LAUNCH_WEBGRAPHICSCONTEXT3DCOMMANDBUFFERIMPL_INITIALIZE) ) 2595 CAUSE_FOR_GPU_LAUNCH_WEBGRAPHICSCONTEXT3DCOMMANDBUFFERIMPL_INITIALIZE) )
2527 return NULL; 2596 return NULL;
2528 return context.release(); 2597 return context.release();
2529 } 2598 }
2530 2599
2600 RenderWidget::DeviceEmulationHelper::DeviceEmulationHelper(
2601 const gfx::Size& device_size,
2602 const gfx::Rect& widget_rect,
2603 float device_scale_factor,
2604 bool fit_to_view)
2605 : device_size_(device_size),
2606 widget_rect_(widget_rect),
2607 device_scale_factor_(device_scale_factor),
2608 fit_to_view_(fit_to_view),
2609 weak_ptr_factory_(this) {
2610 }
2611
2612 RenderWidget::DeviceEmulationHelper::~DeviceEmulationHelper() {
2613 }
2614
2615 void RenderWidget::DeviceEmulationHelper::BeginEmulation(RenderWidget* widget) {
2616 original_size_ = widget->size_;
2617 original_physical_backing_size_ = widget->physical_backing_size_;
2618 original_screen_info_ = widget->screen_info_;
2619 original_view_screen_rect_ = widget->view_screen_rect_;
2620 original_window_screen_rect_ = widget->window_screen_rect_;
2621 Apply(widget, widget->overdraw_bottom_height_, widget->resizer_rect_,
2622 widget->is_fullscreen_);
2623 }
2624
2625 void RenderWidget::DeviceEmulationHelper::ChangeEmulationParams(
2626 RenderWidget* widget, DeviceEmulationHelper* params) {
2627 device_size_ = params->device_size_;
2628 widget_rect_ = params->widget_rect_;
2629 device_scale_factor_ = params->device_scale_factor_;
2630 fit_to_view_ = params->fit_to_view_;
2631 Apply(widget, widget->overdraw_bottom_height_, widget->resizer_rect_,
2632 widget->is_fullscreen_);
2633 }
2634
2635 void RenderWidget::DeviceEmulationHelper::EndEmulation(RenderWidget* widget) {
2636 widget->screen_info_ = original_screen_info_;
2637 if (widget->compositor_) {
2638 // Passing zero cancels override.
2639 widget->compositor_->OverrideDeviceScaleFactor(0.f);
2640 }
2641 widget->SetDeviceScaleFactor(original_screen_info_.deviceScaleFactor);
2642 widget->view_screen_rect_ = original_view_screen_rect_;
2643 widget->window_screen_rect_ = original_window_screen_rect_;
2644 widget->Resize(original_size_,
2645 original_physical_backing_size_,
2646 widget->overdraw_bottom_height_, widget->resizer_rect_,
2647 widget->is_fullscreen_, NO_RESIZE_ACK);
2648 }
2649
2650 void RenderWidget::DeviceEmulationHelper::Apply(RenderWidget* widget,
2651 float overdraw_bottom_height, gfx::Rect resizer_rect, bool is_fullscreen) {
2652 widget->screen_info_.rect = gfx::Rect(device_size_);
2653 widget->screen_info_.availableRect = gfx::Rect(device_size_);
2654 widget->screen_info_.deviceScaleFactor = device_scale_factor_;
2655
2656 if (widget->compositor_) {
2657 // We keep the real device scale factor in compositor to prevent unnecessary
2658 // scaling on browser side. This override ensures that compositor
2659 // will not change scale factor due to WebLayerTreeView's call.
2660 widget->compositor_->OverrideDeviceScaleFactor(
2661 original_screen_info_.deviceScaleFactor);
2662 }
2663
2664 widget->SetDeviceScaleFactor(device_scale_factor_);
2665 widget->view_screen_rect_ = widget_rect_;
2666 widget->window_screen_rect_ = widget->screen_info_.availableRect;
2667
2668 gfx::Size physical_backing_size = gfx::ToCeiledSize(gfx::ScaleSize(
2669 widget_rect_.size(), original_screen_info_.deviceScaleFactor));
2670 widget->Resize(widget_rect_.size(), physical_backing_size,
2671 overdraw_bottom_height, resizer_rect,
2672 is_fullscreen, NO_RESIZE_ACK);
2673 }
2674
2675 void RenderWidget::DeviceEmulationHelper::OnResizeMessage(
2676 RenderWidget* widget, const ViewMsg_Resize_Params& params) {
2677 bool need_ack = params.new_size != original_size_;
2678 original_size_ = params.new_size;
2679 original_physical_backing_size_ = params.physical_backing_size;
2680 original_screen_info_ = params.screen_info;
2681 Apply(widget, params.overdraw_bottom_height, params.resizer_rect,
2682 params.is_fullscreen);
2683
2684 if (need_ack) {
2685 widget->set_next_paint_is_resize_ack();
2686 if (widget->is_accelerated_compositing_active_ && widget->compositor_)
2687 widget->compositor_->SetNeedsRedrawRect(gfx::Rect(widget->size_));
2688 else
2689 widget->didInvalidateRect(gfx::Rect(widget->size_));
2690 }
2691 }
2692
2693 void RenderWidget::DeviceEmulationHelper::OnUpdateScreenRectsMessage(
2694 RenderWidget* widget,
2695 const gfx::Rect view_screen_rect,
2696 const gfx::Rect window_screen_rect) {
2697 original_view_screen_rect_ = view_screen_rect;
2698 original_window_screen_rect_ = window_screen_rect;
2699 widget->Send(new ViewHostMsg_UpdateScreenRects_ACK(widget->routing_id()));
2700 }
2701
2702 WebKit::WebInputEvent* RenderWidget::DeviceEmulationHelper::ConvertInputEventToE mulated(
aelias_OOO_until_Jul13 2013/09/05 08:26:49 The CC impl thread captures input events as well.
dgozman 2013/09/10 19:54:02 As I understand, CC event handling is not interest
aelias_OOO_until_Jul13 2013/09/10 20:33:34 OK, I didn't notice you were only changing those s
dgozman 2013/09/10 20:55:36 Well, wrong screen position of events will conflic
aelias_OOO_until_Jul13 2013/09/10 21:00:02 should be restored back to apply backward scale.
2703 RenderWidget* widget, const WebKit::WebInputEvent* event) {
2704 if (!event)
2705 return NULL;
2706
2707 if (WebInputEvent::isKeyboardEventType(event->type)) {
2708 const WebKeyboardEvent& keyboard_event =
2709 *static_cast<const WebKeyboardEvent*>(event);
2710 WebKeyboardEvent* result = new WebKeyboardEvent(keyboard_event);
2711 return result;
2712 }
2713
2714 if (WebInputEvent::isMouseEventType(event->type)) {
2715 const WebMouseEvent& mouse_event =
2716 *static_cast<const WebMouseEvent*>(event);
2717 WebMouseEvent* result = new WebMouseEvent(mouse_event);
2718 ConvertMouseEventToEmulated(result);
2719 return result;
2720 }
2721
2722 if (WebInputEvent::MouseWheel == event->type) {
2723 const WebMouseWheelEvent& mouse_wheel_event =
2724 *static_cast<const WebMouseWheelEvent*>(event);
2725 WebMouseWheelEvent* result = new WebMouseWheelEvent(mouse_wheel_event);
2726 ConvertMouseEventToEmulated(result);
2727 return result;
2728 }
2729
2730 if (WebInputEvent::isGestureEventType(event->type)) {
2731 const WebGestureEvent& gesture_event =
2732 *static_cast<const WebGestureEvent*>(event);
2733 WebGestureEvent* result = new WebGestureEvent(gesture_event);
2734 result->globalX = widget_rect_.x() + result->x;
2735 result->globalY = widget_rect_.y() + result->y;
2736 return result;
2737 }
2738
2739 if (WebInputEvent::isTouchEventType(event->type)) {
2740 const WebTouchEvent& touch_event =
2741 *static_cast<const WebTouchEvent*>(event);
2742 WebTouchEvent* result = new WebTouchEvent(touch_event);
2743 for (size_t index = 0; index < result->touchesLength; ++index) {
2744 ConvertTouchPointToEmulated(&result->touches[index]);
2745 }
2746 for (size_t index = 0; index < result->changedTouchesLength; ++index) {
2747 ConvertTouchPointToEmulated(&result->changedTouches[index]);
2748 }
2749 for (size_t index = 0; index < result->targetTouchesLength; ++index) {
2750 ConvertTouchPointToEmulated(&result->targetTouches[index]);
2751 }
2752 return result;
2753 }
2754
2755 return NULL;
2756 }
2757
2758 void RenderWidget::DeviceEmulationHelper::ConvertMouseEventToEmulated(
2759 WebKit::WebMouseEvent* event) {
2760 event->windowX = widget_rect_.x() + event->x;
2761 event->windowY = widget_rect_.y() + event->y;
2762 event->globalX = event->windowX;
2763 event->globalY = event->windowY;
2764 }
2765
2766 void RenderWidget::DeviceEmulationHelper::ConvertTouchPointToEmulated(
2767 WebKit::WebTouchPoint* point) {
2768 point->screenPosition.x = widget_rect_.x() + point->position.x;
2769 point->screenPosition.y = widget_rect_.y() + point->position.y;
2770 }
2771
2772 void RenderWidget::DeviceEmulationHelper::PopupCreated(
2773 RenderWidget* widget, RenderWidget* popup) {
2774 popup->popup_device_emulation_helper_ = weak_ptr_factory_.GetWeakPtr();
2775 }
2776
2777 WebKit::WebRect RenderWidget::DeviceEmulationHelper::ConvertPopupScreenRectFromE mulated(
2778 RenderWidget* popup, const WebKit::WebRect& rect) {
2779 WebKit::WebRect result = rect;
2780 result.x = original_view_screen_rect_.x() +
2781 result.x - widget_rect_.x();
2782 result.y = original_view_screen_rect_.y() +
2783 result.y - widget_rect_.y();
2784 return result;
2785 }
2786
2531 } // namespace content 2787 } // namespace content
OLDNEW
« content/renderer/render_widget.h ('K') | « content/renderer/render_widget.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698