Tiled Backing Store(三)

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

时间: 2024-10-11 20:56:23

Tiled Backing Store(三)的相关文章

Tiled Backing Store(一)

1. 概述 下列图片从层次的角度解释了什么是Tiled Backing Store: viewport 视图端口:代表用来显示网页内容的区域.Qt里,实际上就是QWidget. Tiled backing store: 可以看作是off-screen的pixmap的缓冲区.为了滚动.缩放操作的平滑,它覆盖的区域总是比viewport要大. Covered content :代表被Tiled backing store覆盖的页面内容.如果需要,这部分内容可以缩放. Page content:指的是

Tiled Backing Store (二)

2.2 前缓冲区(Front buffer) 通过QPinter来绘制tile实际上就是要绘制存储在前缓冲区里的pixmap.没有前缓冲区的tile意味着它不需要绘制. 2.3 后缓冲区(Backend Buffer) 后缓冲区充当tile内容的屏下(off-screen)后缓冲区并且可以采用Qt的画笔绘制到Qt widget上.在更新后缓冲区的过程中(In the process of updateBackBuffer),对于无效操作(invalidate)引起的脏区域,WebKit绘制脏区域

Tiled Backing Store(四)

3.3 分片底衬仓库(TiledBackingStore)的可见区域矩形 如下图所示,WebCore::Frame::tiledBackingStoreVisibleRect最终请求QGraphicsWebView给出可见区域: 3.4 使分片底衬仓库无效 如果frame内容所在的矩形变脏了,WebCore::Frame会使这个矩形变成无效区域,同时告诉分片底衬仓库使之无效.分片底衬仓库使无效的操作完成, 它就会安排一次缓冲区更新任务. 如下列序列图所示,分片底衬仓库使无效的操作最终会触发一次Q

Backing Store ( 五 )的创建

不是所有的RenderLayer都需要创建它的Backing Store,只有网页的RenderObject树之RenderLayer满足如下条件: 1 Transform:几何变换 2 Video:页面有<video> 3 Canvas: 页面有<canvas> 4 Plugin 5 Frame 6 3DTransforms 7 Animation 8 Filters:CSS过滤器 9 Position:CSS之定位 10 clipsCompositingDescendants:

webkit内核分析之 Frame

参考地址:http://blog.csdn.net/dlmu2001/article/details/6164873 1.    描述 Frame类是WebCore内核同应用之间联系的一个重要的类.它有点像设计模式中的Façade,将内核的各个不同的零配件组装在了一起,但又不是Façade,因为用户很多时候还是要直接去操作里面的组件.除了设计上的考虑,Frame还有语法上的意义,它对应于Page里面的帧. 看一下类定义: 1 class Frame : public RefCounted<Fra

External Configuration Store Pattern 外部配置存储模式

Move configuration information out of the application deployment package to a centralized location. This pattern can provide opportunities for easier management and control of configuration data, and for sharing configuration data across applications

pool(三)——Timer

1.关于Timer的三个维度 首先是 {@link java.util.Timer},这个是最外层的类,其中包含了{@link java.util.TaskQueue},这个是存放{@link java.util.TimerTask}的队列--a priority queue of TimerTasks. 第二层是 {@link java.util.TimerThread},这个是{@link java.util.Timer}在初始化的时候创建并启动的一个线程,这个线程取任务并且执行. /**

第三部分:内存管理

第三部分 内存管理 第8章 内存管理 8.1 背景 内存:是现代计算机运行中心.内存由很大一组字或字节组成,每个字或字节都有他们自己的地址.CPU根据程序计数器(PC)值从内存中提取指令,这些指令可能会引起进一步对特定内存地址的读取和写入. 8.1.1 基本硬件 CPU所能访问的存储器只有内存和处理器内的寄存器: 保证物理内存的相对速度:高速缓存(cache)[k??]:CPU和内存之间增加高速内存: 确保操作系统不被用户进程所访问,以及确保用户进程不被其他用户进程所访问.其可通过硬件来实现.

项目三. 基于图像压缩的视频监控系统

项目三. 基于图像压缩的视频监控系统 Sprint0-产品设计与规划 基于图像压缩的视频监控系统 1. 产品功能演示 在linux系统上运行程序,弹出登录界面,输入地址.端口信息,弹出视频监控界面,实时传出视频信息. 2. 功能模块分析 采集端: 图像采集子系统 图像编码子系统 传输子系统 主程序 监控端: 传输子系统 图像编码子系统 传输子系统 主程序 Sprint1-基于Epoll架构的采集端程序框架设计 第1课-Epoll机制精通 大纲: v  为什么用Epoll? 阻塞型IO与多路复用