码迷,mamicode.com
首页 > 其他好文 > 详细

Tiled Backing Store(三)

时间:2015-03-03 11:40:08      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:

3.Qt WebKit之QGraphicsWebView

     本节叙述如何通过Qt的QGraphicsWebView实现分片底衬存储区(tiled backing store)。
技术分享

如上静态类图所示,只有实现了分片底衬存储区客户端(TiledBackingStoreClient)的接口的WebCore::Frame才拥有分片底衬存储区实例。其他类只能通过WebCore::Frame发消息给分片底衬存储区。 

QGraphicsWebView是QGraphicsWidget的子类. 它被用于显示屏幕上的可见内容。

3.1 按照内容重置QGraphicsWebView的大小(Resize to Content)

      resizesToContents(布尔变量)是QGraphicsWebView的属性。 当使用分片策略时, QGraphicsWebView用来充当我们的内容,它应当按照main frame内容立即重置自己的大小
     如Qt4.7文档所说, 如果设置此属性, QGraphicsWebView将自动按照main frame的尺寸设置自己的大小。结果就是,顶层的frame绝不会有滚动条。这样就会使得CSS的定点定位(fixed positioning)看起来就像是绝对定位(absolute positioning)--元素相对文档而不是视图端口定位。
     如果resizesToContents设置为true, 一旦Frame的内容发生改变,WebCore::FrameView 就会通知QGraphicsWebView去更新自己的大小。

3.2 绘制过程

    以下是绘制QGraphicsWebView所需步骤:

  • 按照QGraphicsWebView坐标计算可见区矩形。因为QGraphicsWebView按照frame内容的大小重置自己的尺寸,当QGraphicsWebView滚动或者缩放时,可见区矩形随之改变分片底衬存储区创建瓦片需要这样的可见区域

  • 确保整个可见区域被瓦片覆盖。对于那些没有被瓦片覆盖的可见区域, 它将重复创建最靠经视图端口中心的瓦片,直到所有可见区域被覆盖。距离的计算方法是基于Manhattan距离算法(Manhattan distance)。
           为了尽可能不阻塞绘制操作,瓦片创建采用异步执行方式,体现在分片底衬存储区,异步方式是通过启动分片底衬存储区定时器实现的分片底衬存储区:startTileCreationTimer.

  • 把frame的内容绘制到每一个瓦片的后缓冲区,通过这样的方式来更新瓦片,当然更新也是异步方式。

  • 由Qt画笔的drawPixmap函数来绘制后缓冲区
技术分享
原文:http://xbfp2b2n.blog.sohu.com/196617339.html

Tiled Backing Store(三)

标签:

原文地址:http://blog.csdn.net/lichwei1983/article/details/44035041

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!