更新: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是递归调用的。具体序列图例如以下:

最新文章

  1. Ajax技术
  2. C# LIST列表的使用
  3. HDU 4749 Parade Show(贪心+kmp)
  4. Codeforces Round #180 (Div. 2) A. Snow Footprints 贪心
  5. JDBC学习笔记(一)
  6. tp中调用PHP系统扩展类
  7. ruby gems安装镜像
  8. AngularJs练习Demo13Provider_factory
  9. [POJ] 3461 Oulipo [KMP算法]
  10. USB 传输协议
  11. JAVA GUI学习 - JTree树结构组件学习 ***
  12. HTML之禁止输入文本
  13. UVA-12166 天平性质+字符处理
  14. 【WEB】带边框的网页页面实现
  15. linux命令行命令
  16. 如何在Skyline中加载ArcGISServer发布的WMS和WMTS服务
  17. oracle 常用 sql
  18. p1209 Barn Repair
  19. 新加了一块硬盘,在bios中可以看的到,在系统的磁盘管理器中看不到新加硬盘
  20. 关于Linux系统指令 top 之 %si 占用高,分析实例一

热门文章

  1. 【Codeforces Round #476 (Div. 2) [Thanks, Telegram!] B】Battleship
  2. web_custom_request函数做get接口测试
  3. (转)彻底学会使用epoll(一)——ET模式实现分析
  4. php给图片加入文字水印
  5. 更换oracle 集群网卡(Changing a Network Interface)
  6. STM32系列ARM单片机介绍
  7. 【MongoDB】深入了解MongoDB不可不知的十点
  8. Objective-c 中如何重写父类的初始化方法
  9. ES 遇到 unassigned shard如何处理?
  10. (五)api网关服务 zuul-路由