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
但对有损我国主权的行为