Chromium网页输入事件捕捉和手势检测过程分析文档格式.docx

上传人:b****2 文档编号:15154087 上传时间:2022-10-28 格式:DOCX 页数:39 大小:80.50KB
下载 相关 举报
Chromium网页输入事件捕捉和手势检测过程分析文档格式.docx_第1页
第1页 / 共39页
Chromium网页输入事件捕捉和手势检测过程分析文档格式.docx_第2页
第2页 / 共39页
Chromium网页输入事件捕捉和手势检测过程分析文档格式.docx_第3页
第3页 / 共39页
Chromium网页输入事件捕捉和手势检测过程分析文档格式.docx_第4页
第4页 / 共39页
Chromium网页输入事件捕捉和手势检测过程分析文档格式.docx_第5页
第5页 / 共39页
点击查看更多>>
下载资源
资源描述

Chromium网页输入事件捕捉和手势检测过程分析文档格式.docx

《Chromium网页输入事件捕捉和手势检测过程分析文档格式.docx》由会员分享,可在线阅读,更多相关《Chromium网页输入事件捕捉和手势检测过程分析文档格式.docx(39页珍藏版)》请在冰豆网上搜索。

Chromium网页输入事件捕捉和手势检测过程分析文档格式.docx

Java层的每一个ContentView控件在C++层都对应一个ContentViewCore对象。

C++层的ContentViewCore对象得到Touch事件之后,就会通过一个GestureDector和一个ScaleGestureDetector进行滑动(Scroll)和捏合(Pinch)手势检测。

检测出来的滑动和捏合手势将会统一保存在一个GestruePacket中。

这个GestruePacket接下来会被一个InputRouter封装在一个类型为InputMsg_HandleInputEvent的IPC消息中,发送给Render进程处理。

注意,Touch事件经过手势检测之后,它本身也会被上述InputRouter通过另外一个InputMsg_HandleInputEvent消息发送给Render进程处理。

这意味着在这种情况下,Render进程将收到两个InputMsg_HandleInputEvent消息。

接下来,我们就从ContentView类的成员函数onTouchEvent开始,分析Browser进程处理网页输入事件的过程,如下所示:

[java]viewplaincopy

publicclassContentViewextendsFrameLayout

implementsContentViewCore.InternalAccessDelegate,SmartClipProvider{

......

@Override

publicbooleanonTouchEvent(MotionEventevent){

returnmContentViewCore.onTouchEvent(event);

}

}

这个函数定义在文件external/chromium_org/content/public/Android/java/src/org/chromium/content/browser/ContentView.java中。

参数event指向的MotionEvent对象描述的就是当前发生的Touch事件。

ContentView类的成员变量mContentViewCore指向的是一个ContentViewCore对象,ContentView类的成员函数onTouchEvent调用这个ContentViewCore对象的成员函数onTouchEvent处理参数event所描述的Touch事件。

ContentViewCore类的成员函数onTouchEvent的实现如下所示:

publicclassContentViewCore

implementsNavigationClient,AccessibilityStateChangeListener,ScreenOrientationObserver{

TraceEvent.begin("

onTouchEvent"

);

try{

finalintpointerCount=event.getPointerCount();

finalbooleanconsumed=nativeOnTouchEvent(mNativeContentViewCore,event,

event.getEventTime(),eventAction,

pointerCount,event.getHistorySize(),event.getActionIndex(),

event.getX(),event.getY(),

pointerCount>

1?

event.getX

(1):

0,

event.getY

(1):

event.getPointerId(0),pointerCount>

event.getPointerId

(1):

-1,

event.getTouchMajor(),pointerCount>

event.getTouchMajor

(1):

event.getRawX(),event.getRawY(),

event.getToolType(0),

event.getToolType

(1):

MotionEvent.TOOL_TYPE_UNKNOWN,

event.getButtonState());

returnconsumed;

}finally{

TraceEvent.end("

这个函数定义在文件external/chromium_org/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java中。

ContentViewCore类的成员函数onTouchEvent主要是调用另外一个成员函数nativeOnTouchEvent处理参数event描述的Touch事件。

ContentViewCore类的成员函数nativeOnTouchEvent是一个JNI函数,它由C++层的函数Java_com_android_org_chromium_content_browser_ContentViewCore_nativeOnTouchEvent实现,如下所示:

[cpp]viewplaincopy

__attribute__((visibility("

default"

)))

jboolean

Java_com_android_org_chromium_content_browser_ContentViewCore_nativeOnTouchEvent(JNIEnv*

env,

jobjectjcaller,

jlongnativeContentViewCoreImpl,

jobjectevent,

jlongtimeMs,

jintaction,

jintpointerCount,

jinthistorySize,

jintactionIndex,

jfloatx0,

jfloaty0,

jfloatx1,

jfloaty1,

jintpointerId0,

jintpointerId1,

jfloattouchMajor0,

jfloattouchMajor1,

jfloatrawX,

jfloatrawY,

jintandroidToolType0,

jintandroidToolType1,

jintandroidButtonState){

ContentViewCoreImpl*native=

reinterpret_cast<

ContentViewCoreImpl*>

(nativeContentViewCoreImpl);

CHECK_NATIVE_PTR(env,jcaller,native,"

OnTouchEvent"

false);

returnnative->

OnTouchEvent(env,jcaller,event,timeMs,action,pointerCount,

historySize,actionIndex,x0,y0,x1,y1,pointerId0,pointerId1,

touchMajor0,touchMajor1,rawX,rawY,androidToolType0,androidToolType1,

androidButtonState);

这个函数定义在文件out/target/product/generic/obj/GYP/shared_intermediates/content/jni/ContentViewCore_jni.h中。

参数nativeContentViewCoreImpl描述的是C++层的一个ContentViewCoreImpl对象,函数Java_com_android_org_chromium_content_browser_ContentViewCore_nativeOnTouchEvent调用这个ContentViewCoreImpl对象的成员函数OnTouchEvent处理其它参数所描述的Touch事件。

ContentViewCoreImpl类的成员函数OnTouchEvent的实现如下所示:

jbooleanContentViewCoreImpl:

:

OnTouchEvent(JNIEnv*env,

jobjectobj,

jobjectmotion_event,

jlongtime_ms,

jintandroid_action,

jintpointer_count,

jinthistory_size,

jintaction_index,

jfloatpos_x_0,

jfloatpos_y_0,

jfloatpos_x_1,

jfloatpos_y_1,

jintpointer_id_0,

jintpointer_id_1,

jfloattouch_major_0,

jfloattouch_major_1,

jfloatraw_pos_x,

jfloatraw_pos_y,

jintandroid_tool_type_0,

jintandroid_tool_type_

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 财会金融考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1