QtWebkit里RenderLayer树的绘制具体流程分析
更新:RenderLayer树的绘制对RenderObject的绘制。同一时候补足绘制阶段的描写叙述。
QtWebkit里,QWebView,QWebPage和QWebFrame的关系例如以下:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGljaHdlaTE5ODM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
QtWebKit从绘制事件(Qt的paint)发出,到WebCore里面的RenderLayers树的绘制具体流程分析例如以下。
首先是QWidget收到paintEvent,发送给Qt的QWebView,在QWebView里。创建Qt的画笔QPainter,并基于此画笔创建画图上下文:GraphicContext,然后使用此画笔再调用Qt的QWebFrame的渲染函数render把这个QWebFrame绘制到裁剪区里。在QWebFrame的render函数里。再调用QWebFramePrivate的绘制相对坐标函数:renderRelativeCoords,后者就会计算每个裁剪区和QWebView的交集、同一时候调用FrameView的绘制内容函数:paintContents。
FrameView的paintContents函数内部就会開始绘制RenderLayer--通过paintLayer函数,此函数自己不干活,实际调用的是RenderLayer自己的绘制函数:RenderLayer::paint,此RenderLayer的函数内部又会调用自己的paintLayer函数,这里才是重中之重。
在paintLayer函数里,主要分成三件事:1 做几何表换:比方平移、翻转、旋转等等;2 绘制RenderLayer的内容。3 绘制RenderLayer的反射。
后面两件事情事实上都是调用与本RenderLayer关联的RenderObject来绘制,每一层的绘制都包含:绘制背景、绘制前景、绘制外边框、绘制掩模、绘制z坐标为负数的RenderLayer、以及z坐标为正数的RenderLayer--即paintList。这paintLayer是递归调用的。具体序列图例如以下:
最新文章
- Ajax技术
- C# LIST列表的使用
- HDU 4749 Parade Show(贪心+kmp)
- Codeforces Round #180 (Div. 2) A. Snow Footprints 贪心
- JDBC学习笔记(一)
- tp中调用PHP系统扩展类
- ruby gems安装镜像
- AngularJs练习Demo13Provider_factory
- [POJ] 3461 Oulipo [KMP算法]
- USB 传输协议
- JAVA GUI学习 - JTree树结构组件学习 ***
- HTML之禁止输入文本
- UVA-12166 天平性质+字符处理
- 【WEB】带边框的网页页面实现
- linux命令行命令
- 如何在Skyline中加载ArcGISServer发布的WMS和WMTS服务
- oracle 常用 sql
- p1209 Barn Repair
- 新加了一块硬盘,在bios中可以看的到,在系统的磁盘管理器中看不到新加硬盘
- 关于Linux系统指令 top 之 %si 占用高,分析实例一
热门文章
- 【Codeforces Round #476 (Div. 2) [Thanks, Telegram!] B】Battleship
- web_custom_request函数做get接口测试
- (转)彻底学会使用epoll(一)——ET模式实现分析
- php给图片加入文字水印
- 更换oracle 集群网卡(Changing a Network Interface)
- STM32系列ARM单片机介绍
- 【MongoDB】深入了解MongoDB不可不知的十点
- Objective-c 中如何重写父类的初始化方法
- ES 遇到 unassigned shard如何处理?
- (五)api网关服务 zuul-路由