no route to host Chromium网页输入事件捕捉和手势检测过程分析(12)

电脑杂谈  发布时间:2018-02-16 22:46:44  来源:网络整理

这个函数定义在文件external/chromium_org/ui/events/gesture_detection/gesture_provider.cc中。

GestureListenerImpl类的成员函数OnScroll首先调用成员变量provider_指向的一个GestureProvider对象的成员函数IsScrollInProgress推断网页当前是否正在滑动过程中。假设不是的话,那么就说明如今要开始对网页进行滑动。

这时候Browser进程会先发送一个类型为ET_GESTURE_SCROLL_BEGIN的手势操作给Render进程。

在网页有滑动的情况下。也就是网页至少在X轴和Y轴之中的一个有偏移时。GestureListenerImpl类的成员函数OnScroll接下来还会向Render进程发送一个类型为ET_GESTURE_SCROLL_UPDATE的手势操作。

无论是类型为ET_GESTURE_SCROLL_BEGIN的手势操作,还是类型为ET_GESTURE_SCROLL_UPDATE的手势操作,它们都会通过函数CreateGesture封装为一个GestureEventData对象。这两个GestureEventData对象都是通过调用GestureListenerImpl类的成员变量provider_指向的GestureProvider对象的成员函数Send发送给Render进程的。例如以下所看到的:

void GestureProvider::Send(GestureEventData gesture) {
  ......

  client_->OnGestureEvent(gesture);
}
这个函数定义在文件external/chromium_org/ui/events/gesture_detection/gesture_provider.cc中。

GestureProvider类的成员变量client_指向的是一个FilteredGestureProvider对象。这个FilteredGestureProvider对象就是前面分析的RenderWidgetHostViewAndroid类的成员变量gesture_provider_所指向的FilteredGestureProvider对象。

GestureProvider类的成员函数Send主要是调用上述FilteredGestureProvider对象的成员函数OnGestureEvent将参数gesture描写叙述的手势操作发送给Render进程处理。例如以下所看到的:

void FilteredGestureProvider::OnGestureEvent(const GestureEventData& event) {
  if (handling_event_) {
    pending_gesture_packet_.Push(event);
    return;
  }

  gesture_filter_.OnGesturePacket(
      GestureEventDataPacket::FromTouchTimeout(event));
}
这个函数定义在文件external/chromium_org/ui/events/gesture_detection/filtered_gesture_provider.cc中。

从前面的分析能够知道,当前正在处理的FilteredGestureProvider对象的成员变量handling_event_已经被设置为true,表示此时只收集参数event描写叙述的手势操作。而不要将它发送给Render进程。


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-81055-12.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 熊德修
      熊德修

      烊烊棒棒哒你就是我们心中的小王子

    • 后废帝
      后废帝

      前有周觅

    • 安思佳
      安思佳

      甲午海战时我们的装备也杠杠的

    热点图片
    拼命载入中...