Webkit Painting and Event Flow 绘屏和事件 探讨
来源:互联网 发布:索引超出矩阵维度 编辑:程序博客网 时间:2024/06/15 02:28
WebKit来自khtml, 以前khtml中, 整个页面是一个大qscrollview, 网页上的控制元素就是Qt里的控件, 可能是为了移植方面原因, 现在webkit中没有用传统的控件概念来实现网页上的button等元素, 而是把控件的两个主要功能分离出来, (painting 和 事件响应 ) 各走一套接口和platform对接. Webkit自己来完成整个 事件-响应-绘图 的逻辑. 对于移植来说, 这自然是一个很好的构架, 不用深入内部, 只要把两头接口做好就OK了: 丢进去事件, 等待WebKit来调用paint函数.
事件
为了理清楚事件的流程, 我用gdb来帮忙. 在浩如烟海的的代码中找到一两个流程的必经之地, 设置断点, 再用backtrace倒过来看WebKit是怎么跑到这个函数的.
以浏览网页最常见的一个操作为例, 点击链接打开新页面. 事件的传播流程如下:
这个过程得到点击处的RenderObject, 如果该对象isLinke() 那么再触发打开连接的事件. 至于打开链接的流程这里先不涉及了.
Painting
相关的文件最主要的两个:
RenderTheme.h/cpp
RenderThemeQt.h/cpp
RenderTheme 是关键的一个类.
RenderThemeQt继承了它, 重载了很多虚函数, 这些虚函数用来进行具体的绘制工作比如:
以paintButton()为例, 传进去的的参数包含了:
PaintInfo: 屏幕的buffer(QPainterDevice), 相当于画布,
IntRect: 绘制的区域
在指定的区域内, 就可以用QPainter来画button了. 至于是windows风格的还是mac水晶风格的, 还是简单的画个长方体, 那就任由发挥了.
上面是一些控件的流程, 常见的Text对象走的是另外一条路, 大概的backtrace如下:
备注:
WebKit版本是r39370.
Platform: Qt
- Webkit Painting and Event Flow 绘屏和事件 探讨
- Webkit Painting and Event Flow 绘屏和事件 探讨
- AS3 event flow 事件冒泡机制
- AS3 event flow 事件冒泡机制
- AS3 event flow 事件冒泡机制
- 委托和事件之烧开水:Delegate and Event
- WebKit Event
- Actionscript 3.0 事件机制剖析--The Event Flow
- AS3 event flow 事件冒泡机制 以及 stopImmediatePropagation() stopPropagation()用法
- SAP事件 Event Flow(转 感谢原创)
- Event 事件和托管
- android 4.0.1 webkit Event 事件处理过程分析
- android 4.0.1 webkit Event 事件处理过程分析
- webkit 添加自定义事件接口发送自定义Event
- 委托(delegate)和事件(event)
- Delegate委托 和 Event事件
- HTML5中的新标签和新事件属性(Tags and Event Attributes)
- Event事件之剪贴板和拖动事件
- 建立链接服务器
- Global.asax 介绍
- Axure RP Pro - jQuery - 如何在Axure RP Pro生成的HTML原型文档中使用自定义脚本
- .NET开发资源站点和部分优秀.NET开源项目
- 在ASP.NET中实现Url Rewriting
- Webkit Painting and Event Flow 绘屏和事件 探讨
- SSH Communications Security【强大的工具,附带可视化scp功能】
- 09.1.14
- 今天进步甚微
- 鼠标移到gridview上改变样子
- 史上最厉害的拼音打字高手间的对话
- Rails onblur事件 Ajax验证表单
- C# 插件构架实战(Jack H Hansen )
- pidgin移植完了,show一把