这个函数定义在文件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
前有周觅
甲午海战时我们的装备也杠杠的
烊烊棒棒哒你就是我们心中的小王子