syncRegions:此函数主要是向客户端发送RegionModified事件,真正的绘图也是由客户端来完成。 还是通过代码来分析:
void QWSServer::syncRegions( QWSWindow *active )
{
rgnMan->commit(); //拷贝数据到一段共享内存,服务器为读写权限,客户端为只读
notifyModified( active );//通过客户端显示区域已更改,客户端绘制相关区域
paintBackground( dirtyBackground );//绘制背景区域修改部分。
dirtyBackground = QRegion();
}
void QWSServer::notifyModified( QWSWindow *active )
{
// notify active window first
if ( active )
active->updateAllocation(); //首先通知active 窗体
// now the rest //通知所有modified标志为TRUE的窗体
for (uint i=0; i<windows.count(); i++) {
QWSWindow* w = windows.at(i);
w->updateAllocation();
}
}
void QWSWindow::updateAllocation()
{
if ( modified || needAck) {
c->sendRegionModifyEvent( id, exposed, needAck ); // 发送消息
exposed = QRegion(); //复位低级窗体新增显示区域
modified = FALSE; //modified为真表示窗体的显示区域被修改。
needAck = FALSE;
}
}