QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10107|回复: 45

窗口裁减

[复制链接]
发表于 2006-6-15 18:08:51 | 显示全部楼层 |阅读模式
1.屏幕中有一个窗口A,窗口A中有一个转动的直线。(例如时钟里的秒针)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 发表于 2006-6-15 18:09:42 | 显示全部楼层
这时候有一个窗口B叠加在A上

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复

使用道具 举报

 楼主| 发表于 2006-6-15 18:13:01 | 显示全部楼层
当直线继续变化时:被B挡住的部分不能显示,暴露的必须显示。

实现方法:将A备份到内存中,将变化的图形写到内存中,
将暴露的矩形部分cp到显示区域。
回复

使用道具 举报

 楼主| 发表于 2006-6-15 18:14:02 | 显示全部楼层
看复杂的图形

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复

使用道具 举报

 楼主| 发表于 2006-6-15 18:15:48 | 显示全部楼层
另外一种情况,只有A,B,
当B移动后要暴露以前被B遮挡的部分

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复

使用道具 举报

 楼主| 发表于 2006-6-15 18:17:51 | 显示全部楼层
这就要计算出,窗口在被各种遮挡的情况下,计算出自己暴露的部分。
将这些暴露的部分,用很多矩形组合表示出来。
回复

使用道具 举报

 楼主| 发表于 2006-6-15 18:18:16 | 显示全部楼层
不知道目前有没有比较好的方法。
回复

使用道具 举报

发表于 2006-6-16 04:18:07 | 显示全部楼层
做ETK++双缓冲时(0.1.7版本后)类似上述情况时,
所有更新区域用ERegion(多个矩形组合),

并对EView的响应作如下两种处理:
1. 一般情况下,最后更新时需要更新的区域都合成为一个矩形
并裁减去Sibling的遮罩区域后的ERect传给EView->Draw
2.当EView指定E_UPDATE_WITH_REGION时上述传递参数
及裁减过程均使用ERegion

对于EWindow的暴露回调,为加快速度均最后合成一个矩形区域
并整体把EView已经绘制好的缓冲区一股脑写上去

某些地方仍大有可改进的地方...
回复

使用道具 举报

 楼主| 发表于 2006-6-16 08:26:12 | 显示全部楼层
ETK++代码何时开放?或者你能讲解一下Etk上述几种情况的实现.?
回复

使用道具 举报

发表于 2006-6-17 10:19:32 | 显示全部楼层
保存有效区域的理论还是蛮简单的
这边有篇我写的文档,比较粗的描述了一下.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复

使用道具 举报

 楼主| 发表于 2006-6-17 18:11:38 | 显示全部楼层
在我描述的第三个图,连接如下:
http://www.linuxfans.org/nuke/modules.php?name=Forums&file=download&id=28816

图中B,C覆盖了A,
A中可视区域应该为3个矩形。怎么计算这个矩形呢?
我看了,你的文档,并没有描述这一部分。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复

使用道具 举报

 楼主| 发表于 2006-6-17 18:24:22 | 显示全部楼层
当然,现实中,B,C的位置并不固定,或者还有更多的窗口会覆盖在A上面。
那么怎么计算出类似被暴露的矩形。
回复

使用道具 举报

发表于 2006-6-17 18:34:34 | 显示全部楼层
假设C在B之下(比如Z轴空间)。那久首先将A的Rect 和 C的相交。
去除相交部分,得到的就是两个可见的rect, 然后再把可见rect和B的rect相交
相交算法可以参考minigui的那个文档
回复

使用道具 举报

 楼主| 发表于 2006-6-17 18:35:08 | 显示全部楼层
看这张图,
当媒体播放器在最底层,有4个窗口覆盖在上面。

这时正在播放媒体。

窗口程序只能更新暴露的部分。

那么就算计算那些区域被暴露了。

怎么计算呢?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复

使用道具 举报

 楼主| 发表于 2006-6-17 18:39:19 | 显示全部楼层
那么这种方法就有些复杂了。

你说的方法,我也想过。不知道有没有更好的方法。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-4-20 13:46 , Processed in 0.120174 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表