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

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

ContentViewCoreImpl类的成员函数OnTouchEvent首先调用成员函数GetRenderWidgetHostViewAndroid获得一个RenderWidgetHostViewAndroid对象。

这个RenderWidgetHostViewAndroid对象用来在C++层描写叙述载入网页的控件,它的创建过程能够参考前面Chromium硬件加速渲染的OpenGL上下文画图表面创建过程分析一文。

ContentViewCoreImpl类的成员函数OnTouchEvent接下来又将参数描写叙述的Touch事件封装在一个MotionEventAndroid对象中。然后将该MotionEventAndroid对象传递给前面获得的RenderWidgetHostViewAndroid对象的成员函数OnTouchEvent处理。

RenderWidgetHostViewAndroid对象的成员函数OnTouchEvent的实现例如以下所看到的:

bool RenderWidgetHostViewAndroid::OnTouchEvent(
    const ui::MotionEvent& event) {
  ......

  if (!gesture_provider_.OnTouchEvent(event))
    return false;

  ......

  // Short-circuit touch forwarding if no touch handlers exist.
  if (!host_->ShouldForwardTouchEvent()) {
    const bool event_consumed = false;
    gesture_provider_.OnTouchEventAck(event_consumed);
    return true;
  }

  SendTouchEvent(CreateWebTouchEventFromMotionEvent(event));
  return true;
}
这个函数定义在文件external/chromium_org/content/browser/renderer_host/render_widget_host_view_android.cc中。

RenderWidgetHostViewAndroid类的成员变量gesture_provider_描写叙述的是一个FilteredGestureProvider对象。RenderWidgetHostViewAndroid类的成员函数OnTouchEvent首先调用这个FilteredGestureProvider对象的成员函数OnTouchEvent检测参数event描写叙述的Touch事件是否产生了手势操作。假设有发生,那么就会将它们发送给Render进程处理。

RenderWidgetHostViewAndroid类的成员变量host_指向的是一个RenderWidgetHostImpl对象。

这个RenderWidgetHostImpl对象也是用来在C++层描写叙述载入网页的控件的,它的创建过程能够参考前面Chromium硬件加速渲染的OpenGL上下文画图表面创建过程分析一文。

RenderWidgetHostViewAndroid类的成员函数OnTouchEvent接下来调用这个RenderWidgetHostImpl对象的成员函数ShouldForwardTouchEvent检查Render进程是否注册了处理Touch事件的Handler。假设没有注册的话,那么就不须要将参数event描写叙述的Touch事件发送给它处理了。


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

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

    • 笹川亚矢奈
      笹川亚矢奈

      但对有损我国主权的行为

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