参数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
我赞成我们不和任何国家搞对抗而广泛合作的外交政策