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

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

参数action表示要封装的Touch事件的类型。

函数ToWebInputEventType会依据不同的Touch事件类型返回不同的blink::WebTouchEvent对象类型。

比如,对于类型为MotionEvent::ACTION_MOVE的Touch事件。函数ToWebInputEventType返回的blink::WebTouchEvent对象类型为WebInputEvent::TouchMove。

回到函数CreateWebTouchEventFromMotionEvent中。它获得了接下来要创建的blink::WebTouchEvent对象的类型之后,就会创建这个blink::WebTouchEvent对象。而且会将event描写叙述的Touch事件的全部信息。比如触摸点位置,保存在创建出来的blink::WebTouchEvent对象中。

这一步运行完毕之后。再回到前面分析的RenderWidgetHostViewAndroid类的成员函数OnTouchEvent中,它接下来就会将前面创建的blink::WebTouchEvent对象发送给Render进程处理。这是通过调用另外一个成员函数SendTouchEvent实现的,例如以下所看到的:

void RenderWidgetHostViewAndroid::SendTouchEvent(
    const blink::WebTouchEvent& event) {
  if (host_)
    host_->ForwardTouchEventWithLatencyInfo(event, CreateLatencyInfo(event));

  ......
}
这个函数定义在文件external/chromium_org/content/browser/renderer_host/render_widget_host_view_android.cc中。

前面提到,RenderWidgetHostViewAndroid类的成员变量host_指向的是一个RenderWidgetHostImpl对象,RenderWidgetHostViewAndroid类的成员函数SendTouchEvent调用这个RenderWidgetHostImpl对象的成员函数ForwardTouchEventWithLatencyInfo将参数event描写叙述的Touch事件发送给Render进程。

RenderWidgetHostImpl类的成员函数ForwardTouchEventWithLatencyInfo的实现例如以下所看到的:

void RenderWidgetHostImpl::ForwardTouchEventWithLatencyInfo(
      const blink::WebTouchEvent& touch_event,
      const ui::LatencyInfo& ui_latency) {
  ......

  ui::LatencyInfo latency_info =
      CreateRWHLatencyInfoIfNotExist(&ui_latency, touch_event.type);
  TouchEventWithLatencyInfo touch_with_latency(touch_event, latency_info);
  input_router_->SendTouchEvent(touch_with_latency);
}
这个函数定义在文件external/chromium_org/content/browser/renderer_host/render_widget_host_impl.cc中。


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

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

    • 李豪
      李豪

      我赞成我们不和任何国家搞对抗而广泛合作的外交政策

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