调整双缓冲小部件的大小?

时间:2011-03-28 00:42:38

标签: c++ user-interface

现在,我的文本小部件是双缓冲的(它在事件发生时将文本绘制到位图)。这很有效,除非我调整小部件的大小。当我调整大小时,我al_destroy_bitmap并使用新维度创建一个新的这个非常慢。大多数双缓冲guis如Windows和Mac OSX如何避免这个问题?

由于

2 个答案:

答案 0 :(得分:4)

大多数由位图支持(或用于通过OGL或DX渲染)的小部件都有锁定边框,不允许调整大小。

那些经常遭受由此引起的速度问题的人。

您可以注意调整开始和结束的大小,只有在完成时才更新位图,或者只接收调整大小的事件,请注意几个背靠背并禁用位图调整大小,直到它们停止(之后,比如,前一秒钟,等到没有调整大小的事件到达250毫秒)。

答案 1 :(得分:2)

我最近为了在Flash中进行碰撞检测而进行了双缓冲。它有一个类似的问题,创建位图数据结构相对较慢(这本身很难过,因为分配原始内存应该很快,对于Flash和你的情况)。

我所做的只是缓存后备位图并在可能的情况下重用它们。因此,如果某人将调整为250x250,我可以重用280x260的位图。每当使用位图完成一个小部件时,它就会将其释放回来再次使用,或者如果它们缩小并且可以使用较小的一个。我对可以使用的总内存设置了上限,如果超出则会修剪未使用的位图。

但你不必如此极端。对于简单的第一步,确保以较大的增量调整大小。例如,即使用户仅调整了2个像素的大小,您也可以将内部位图的大小调整为50.这样,您可以继续重复使用位图,直到用户达到新的大小限制。

如果用户减小了尺寸,则无需执行任何操作,因为现有的位图足以进行绘图。当您将其复制到屏幕时,只需复制它的左上角(您实际使用的部分)。