summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/core/frame/web_frame_widget_base.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/blink/renderer/core/frame/web_frame_widget_base.cc')
-rw-r--r--chromium/third_party/blink/renderer/core/frame/web_frame_widget_base.cc176
1 files changed, 2 insertions, 174 deletions
diff --git a/chromium/third_party/blink/renderer/core/frame/web_frame_widget_base.cc b/chromium/third_party/blink/renderer/core/frame/web_frame_widget_base.cc
index b4b93ca50aa..bfa6a1fcae6 100644
--- a/chromium/third_party/blink/renderer/core/frame/web_frame_widget_base.cc
+++ b/chromium/third_party/blink/renderer/core/frame/web_frame_widget_base.cc
@@ -9,7 +9,6 @@
#include "base/time/time.h"
#include "third_party/blink/public/platform/platform.h"
-#include "third_party/blink/public/platform/web_gesture_curve.h"
#include "third_party/blink/public/web/web_local_frame.h"
#include "third_party/blink/public/web/web_widget_client.h"
#include "third_party/blink/renderer/core/dom/element.h"
@@ -29,7 +28,6 @@
#include "third_party/blink/renderer/core/page/focus_controller.h"
#include "third_party/blink/renderer/core/page/page.h"
#include "third_party/blink/renderer/core/page/pointer_lock_controller.h"
-#include "third_party/blink/renderer/platform/exported/web_active_gesture_animation.h"
#include "third_party/blink/renderer/platform/wtf/assertions.h"
namespace blink {
@@ -48,9 +46,7 @@ STATIC_ASSERT_ENUM(kDragOperationEvery, kWebDragOperationEvery);
bool WebFrameWidgetBase::ignore_input_events_ = false;
WebFrameWidgetBase::WebFrameWidgetBase(WebWidgetClient& client)
- : client_(&client),
- fling_modifier_(0),
- fling_source_device_(kWebGestureDeviceUninitialized) {}
+ : client_(&client) {}
WebFrameWidgetBase::~WebFrameWidgetBase() = default;
@@ -208,7 +204,7 @@ void WebFrameWidgetBase::CancelDrag() {
void WebFrameWidgetBase::StartDragging(WebReferrerPolicy policy,
const WebDragData& data,
WebDragOperationsMask mask,
- const WebImage& drag_image,
+ const SkBitmap& drag_image,
const WebPoint& drag_image_offset) {
doing_drag_and_drop_ = true;
Client()->StartDragging(policy, data, mask, drag_image, drag_image_offset);
@@ -379,176 +375,8 @@ LocalFrame* WebFrameWidgetBase::FocusedLocalFrameInWidget() const {
: nullptr;
}
-bool WebFrameWidgetBase::EndActiveFlingAnimation() {
- if (gesture_animation_) {
- gesture_animation_.reset();
- fling_source_device_ = kWebGestureDeviceUninitialized;
- if (WebLayerTreeView* layer_tree_view = GetLayerTreeView())
- layer_tree_view->DidStopFlinging();
- return true;
- }
- return false;
-}
-
-bool WebFrameWidgetBase::ScrollBy(const WebFloatSize& delta,
- const WebFloatSize& velocity) {
- DCHECK_NE(fling_source_device_, kWebGestureDeviceUninitialized);
-
- if (fling_source_device_ == kWebGestureDeviceTouchpad) {
- bool enable_touchpad_scroll_latching =
- RuntimeEnabledFeatures::TouchpadAndWheelScrollLatchingEnabled();
- WebMouseWheelEvent synthetic_wheel(
- WebInputEvent::kMouseWheel, fling_modifier_, WTF::CurrentTimeTicks());
- const float kTickDivisor = WheelEvent::kTickMultiplier;
-
- synthetic_wheel.delta_x = delta.width;
- synthetic_wheel.delta_y = delta.height;
- synthetic_wheel.wheel_ticks_x = delta.width / kTickDivisor;
- synthetic_wheel.wheel_ticks_y = delta.height / kTickDivisor;
- synthetic_wheel.has_precise_scrolling_deltas = true;
- synthetic_wheel.phase = WebMouseWheelEvent::kPhaseChanged;
- synthetic_wheel.SetPositionInWidget(position_on_fling_start_.x,
- position_on_fling_start_.y);
- synthetic_wheel.SetPositionInScreen(global_position_on_fling_start_.x,
- global_position_on_fling_start_.y);
-
- // TODO(wjmaclean): Is local_root_ the right frame to use here?
- if (GetPageWidgetEventHandler()->HandleMouseWheel(*local_root_->GetFrame(),
- synthetic_wheel) !=
- WebInputEventResult::kNotHandled) {
- return true;
- }
-
- if (!enable_touchpad_scroll_latching) {
- WebGestureEvent synthetic_scroll_begin =
- CreateGestureScrollEventFromFling(WebInputEvent::kGestureScrollBegin,
- kWebGestureDeviceTouchpad);
- synthetic_scroll_begin.data.scroll_begin.delta_x_hint = delta.width;
- synthetic_scroll_begin.data.scroll_begin.delta_y_hint = delta.height;
- synthetic_scroll_begin.data.scroll_begin.inertial_phase =
- WebGestureEvent::kMomentumPhase;
- GetPageWidgetEventHandler()->HandleGestureEvent(synthetic_scroll_begin);
- }
-
- WebGestureEvent synthetic_scroll_update = CreateGestureScrollEventFromFling(
- WebInputEvent::kGestureScrollUpdate, kWebGestureDeviceTouchpad);
- synthetic_scroll_update.data.scroll_update.delta_x = delta.width;
- synthetic_scroll_update.data.scroll_update.delta_y = delta.height;
- synthetic_scroll_update.data.scroll_update.velocity_x = velocity.width;
- synthetic_scroll_update.data.scroll_update.velocity_y = velocity.height;
- synthetic_scroll_update.data.scroll_update.inertial_phase =
- WebGestureEvent::kMomentumPhase;
- bool scroll_update_handled =
- GetPageWidgetEventHandler()->HandleGestureEvent(
- synthetic_scroll_update) != WebInputEventResult::kNotHandled;
-
- if (!enable_touchpad_scroll_latching) {
- WebGestureEvent synthetic_scroll_end = CreateGestureScrollEventFromFling(
- WebInputEvent::kGestureScrollEnd, kWebGestureDeviceTouchpad);
- synthetic_scroll_end.data.scroll_end.inertial_phase =
- WebGestureEvent::kMomentumPhase;
- GetPageWidgetEventHandler()->HandleGestureEvent(synthetic_scroll_end);
- }
-
- return scroll_update_handled;
- }
-
- WebGestureEvent synthetic_gesture_event = CreateGestureScrollEventFromFling(
- WebInputEvent::kGestureScrollUpdate, fling_source_device_);
- synthetic_gesture_event.data.scroll_update.delta_x = delta.width;
- synthetic_gesture_event.data.scroll_update.delta_y = delta.height;
- synthetic_gesture_event.data.scroll_update.velocity_x = velocity.width;
- synthetic_gesture_event.data.scroll_update.velocity_y = velocity.height;
- synthetic_gesture_event.data.scroll_update.inertial_phase =
- WebGestureEvent::kMomentumPhase;
-
- return GetPageWidgetEventHandler()->HandleGestureEvent(
- synthetic_gesture_event) != WebInputEventResult::kNotHandled;
-}
-
-WebInputEventResult WebFrameWidgetBase::HandleGestureFlingEvent(
- const WebGestureEvent& event) {
- WebInputEventResult event_result = WebInputEventResult::kNotHandled;
- switch (event.GetType()) {
- case WebInputEvent::kGestureFlingStart: {
- if (event.SourceDevice() != kWebGestureDeviceSyntheticAutoscroll)
- EndActiveFlingAnimation();
- position_on_fling_start_ = event.PositionInWidget();
- global_position_on_fling_start_ = event.PositionInScreen();
- fling_modifier_ = event.GetModifiers();
- fling_source_device_ = event.SourceDevice();
- DCHECK_NE(fling_source_device_, kWebGestureDeviceUninitialized);
- std::unique_ptr<WebGestureCurve> fling_curve =
- Platform::Current()->CreateFlingAnimationCurve(
- event.SourceDevice(),
- WebFloatPoint(event.data.fling_start.velocity_x,
- event.data.fling_start.velocity_y),
- WebSize());
- DCHECK(fling_curve);
- gesture_animation_ = WebActiveGestureAnimation::CreateWithTimeOffset(
- std::move(fling_curve), this, event.TimeStamp());
- ScheduleAnimation();
-
- WebGestureEvent scaled_event =
- TransformWebGestureEvent(local_root_->GetFrameView(), event);
- // Plugins may need to see GestureFlingStart to balance
- // GestureScrollBegin (since the former replaces GestureScrollEnd when
- // transitioning to a fling).
- // TODO(dtapuska): Why isn't the response used?
- local_root_->GetFrame()->GetEventHandler().HandleGestureScrollEvent(
- scaled_event);
-
- event_result = WebInputEventResult::kHandledSystem;
- break;
- }
- case WebInputEvent::kGestureFlingCancel:
- if (EndActiveFlingAnimation())
- event_result = WebInputEventResult::kHandledSuppressed;
-
- break;
- default:
- NOTREACHED();
- }
- return event_result;
-}
-
WebLocalFrame* WebFrameWidgetBase::FocusedWebLocalFrameInWidget() const {
return WebLocalFrameImpl::FromFrame(FocusedLocalFrameInWidget());
}
-WebGestureEvent WebFrameWidgetBase::CreateGestureScrollEventFromFling(
- WebInputEvent::Type type,
- WebGestureDevice source_device) const {
- WebGestureEvent gesture_event(type, fling_modifier_, WTF::CurrentTimeTicks(),
- source_device);
- gesture_event.SetPositionInWidget(position_on_fling_start_);
- gesture_event.SetPositionInScreen(global_position_on_fling_start_);
- return gesture_event;
-}
-
-bool WebFrameWidgetBase::IsFlinging() const {
- return !!gesture_animation_;
-}
-
-void WebFrameWidgetBase::UpdateGestureAnimation(
- base::TimeTicks last_frame_time) {
- if (!gesture_animation_)
- return;
-
- if (gesture_animation_->Animate(last_frame_time)) {
- ScheduleAnimation();
- } else {
- DCHECK_NE(fling_source_device_, kWebGestureDeviceUninitialized);
- WebGestureDevice last_fling_source_device = fling_source_device_;
- EndActiveFlingAnimation();
-
- if (last_fling_source_device != kWebGestureDeviceSyntheticAutoscroll) {
- WebGestureEvent end_scroll_event = CreateGestureScrollEventFromFling(
- WebInputEvent::kGestureScrollEnd, last_fling_source_device);
- local_root_->GetFrame()->GetEventHandler().HandleGestureScrollEnd(
- end_scroll_event);
- }
- }
-}
-
} // namespace blink