| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "web/DevToolsEmulator.h" | 5 #include "web/DevToolsEmulator.h" |
| 6 | 6 |
| 7 #include "core/exported/WebViewBase.h" | 7 #include "core/exported/WebViewBase.h" |
| 8 #include "core/frame/FrameView.h" | 8 #include "core/frame/FrameView.h" |
| 9 #include "core/frame/Settings.h" | 9 #include "core/frame/Settings.h" |
| 10 #include "core/frame/VisualViewport.h" | 10 #include "core/frame/VisualViewport.h" |
| (...skipping 500 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 511 script_execution_disabled_ = script_execution_disabled; | 511 script_execution_disabled_ = script_execution_disabled; |
| 512 web_view_impl_->GetPage()->GetSettings().SetScriptEnabled( | 512 web_view_impl_->GetPage()->GetSettings().SetScriptEnabled( |
| 513 script_execution_disabled_ ? false : embedder_script_enabled_); | 513 script_execution_disabled_ ? false : embedder_script_enabled_); |
| 514 } | 514 } |
| 515 | 515 |
| 516 bool DevToolsEmulator::HandleInputEvent(const WebInputEvent& input_event) { | 516 bool DevToolsEmulator::HandleInputEvent(const WebInputEvent& input_event) { |
| 517 Page* page = web_view_impl_->GetPage(); | 517 Page* page = web_view_impl_->GetPage(); |
| 518 if (!page) | 518 if (!page) |
| 519 return false; | 519 return false; |
| 520 | 520 |
| 521 if (!touch_event_emulation_enabled_ || |
| 522 !WebInputEvent::IsPinchGestureEventType(input_event.GetType())) { |
| 523 return false; |
| 524 } |
| 525 |
| 521 // FIXME: This workaround is required for touch emulation on Mac, where | 526 // FIXME: This workaround is required for touch emulation on Mac, where |
| 522 // compositor-side pinch handling is not enabled. See http://crbug.com/138003. | 527 // compositor-side pinch handling is not enabled. See http://crbug.com/138003. |
| 523 bool is_pinch = input_event.GetType() == WebInputEvent::kGesturePinchBegin || | 528 FrameView* frame_view = page->DeprecatedLocalMainFrame()->View(); |
| 524 input_event.GetType() == WebInputEvent::kGesturePinchUpdate || | 529 WebGestureEvent scaled_event = TransformWebGestureEvent( |
| 525 input_event.GetType() == WebInputEvent::kGesturePinchEnd; | 530 frame_view, static_cast<const WebGestureEvent&>(input_event)); |
| 526 if (is_pinch && touch_event_emulation_enabled_) { | 531 float page_scale_factor = page->PageScaleFactor(); |
| 527 FrameView* frame_view = page->DeprecatedLocalMainFrame()->View(); | 532 if (scaled_event.GetType() == WebInputEvent::kGesturePinchBegin) { |
| 528 WebGestureEvent scaled_event = TransformWebGestureEvent( | 533 WebFloatPoint gesture_position = scaled_event.PositionInRootFrame(); |
| 529 frame_view, static_cast<const WebGestureEvent&>(input_event)); | 534 last_pinch_anchor_css_ = WTF::WrapUnique(new IntPoint( |
| 530 float page_scale_factor = page->PageScaleFactor(); | 535 RoundedIntPoint(gesture_position + frame_view->GetScrollOffset()))); |
| 531 if (scaled_event.GetType() == WebInputEvent::kGesturePinchBegin) { | 536 last_pinch_anchor_dip_ = |
| 532 WebFloatPoint gesture_position = scaled_event.PositionInRootFrame(); | 537 WTF::WrapUnique(new IntPoint(FlooredIntPoint(gesture_position))); |
| 533 last_pinch_anchor_css_ = WTF::WrapUnique(new IntPoint( | 538 last_pinch_anchor_dip_->Scale(page_scale_factor, page_scale_factor); |
| 534 RoundedIntPoint(gesture_position + frame_view->GetScrollOffset()))); | |
| 535 last_pinch_anchor_dip_ = | |
| 536 WTF::WrapUnique(new IntPoint(FlooredIntPoint(gesture_position))); | |
| 537 last_pinch_anchor_dip_->Scale(page_scale_factor, page_scale_factor); | |
| 538 } | |
| 539 if (scaled_event.GetType() == WebInputEvent::kGesturePinchUpdate && | |
| 540 last_pinch_anchor_css_) { | |
| 541 float new_page_scale_factor = | |
| 542 page_scale_factor * scaled_event.PinchScale(); | |
| 543 IntPoint anchor_css(*last_pinch_anchor_dip_.get()); | |
| 544 anchor_css.Scale(1.f / new_page_scale_factor, | |
| 545 1.f / new_page_scale_factor); | |
| 546 web_view_impl_->SetPageScaleFactor(new_page_scale_factor); | |
| 547 web_view_impl_->MainFrame()->SetScrollOffset( | |
| 548 ToIntSize(*last_pinch_anchor_css_.get() - ToIntSize(anchor_css))); | |
| 549 } | |
| 550 if (scaled_event.GetType() == WebInputEvent::kGesturePinchEnd) { | |
| 551 last_pinch_anchor_css_.reset(); | |
| 552 last_pinch_anchor_dip_.reset(); | |
| 553 } | |
| 554 return true; | |
| 555 } | 539 } |
| 556 | 540 if (scaled_event.GetType() == WebInputEvent::kGesturePinchUpdate && |
| 557 return false; | 541 last_pinch_anchor_css_) { |
| 542 float new_page_scale_factor = page_scale_factor * scaled_event.PinchScale(); |
| 543 IntPoint anchor_css(*last_pinch_anchor_dip_.get()); |
| 544 anchor_css.Scale(1.f / new_page_scale_factor, 1.f / new_page_scale_factor); |
| 545 web_view_impl_->SetPageScaleFactor(new_page_scale_factor); |
| 546 web_view_impl_->MainFrame()->SetScrollOffset( |
| 547 ToIntSize(*last_pinch_anchor_css_.get() - ToIntSize(anchor_css))); |
| 548 } |
| 549 if (scaled_event.GetType() == WebInputEvent::kGesturePinchEnd) { |
| 550 last_pinch_anchor_css_.reset(); |
| 551 last_pinch_anchor_dip_.reset(); |
| 552 } |
| 553 return true; |
| 558 } | 554 } |
| 559 | 555 |
| 560 } // namespace blink | 556 } // namespace blink |
| OLD | NEW |