如何在X Windows / Linux中确定Windows的可见区域?

时间:2008-09-16 13:37:33

标签: linux firefox x11 viewport

我有几个嵌套的X Windows - 比方说 - 可滚动窗口中的可滚动窗口(参见下面的示例)。在这种情况下,主窗口包含(至少)主要滚动条和它们控制的(主要)绘图区域。此绘图区域包含(至少)一个可滚动窗口批处理 - 一个(次要)主窗口,其中包含滚动条和次要绘图区域。

在内部绘图区域的实时滚动期间,重绘过程会混乱,因为我正在使用XCopyArea来加速进程并移动有效的内容并仅为新出现的内容调用实际的重绘例程。当内部绘图批处理本身时,这样可以正常工作,但是当嵌套在另一个内部时,会出现问题 - 当内部滚动面板部分可见时(即主要绘图区域被滚动),重新绘制新出现的内容将从主要部分剪切掉绘图区域,从未实际重绘,但认为是这样。当在下一个滚动时,XCopyArea得到这个所谓的重绘区域,它实际上是空的。最后,这个空白区域显示在部分可见的内部滚动批处理中,它是空的。在第一个一般重绘消息上,它们是固定的。

如果我可以从(我的)内部绘图区域获取实际可见内容的剪贴蒙版,我可以调整XCopyArea()调用和重绘调用并克服问题,而不会重新绘制每个内容上的所有内容的计划“B”滚动条移动。

示例:为Mozilla Firefox开发插件并需要确定描述“my”窗口可见区域的区域,即从Mozilla系统作为插件视口传递的区域。

1 个答案:

答案 0 :(得分:1)

如果你真的是一个X Window,而不是来自某个特定工具包的小部件(比如GTK +?)那么你可以使用XGetWindowAttributes函数调用。

这将填充一个提供的XWindowAttributes结构,其中包括窗口x和y位置的整数,以及它的宽度和高度以及其他有用的事实。

但实际上我认为你可能正在使用从Netscape继承的Mozilla插件API,也就是NSAPI,在这种情况下,你得到的是至少调用一次你的函数NPP_SetWindow()(如果有必要的话会再次改变) )包含您正在寻找的信息的结构。尝试查看http://www.mozilla.org/projects/plugins/以获取有关您应该使用的API的更多信息。