XCOMPOSITE翻译
https://www.x.org/releases/X11R7.7/doc/man/man3/Xcomposite.3.xhtml
XCOMPOSITE
名称
Xcomposite − X Composite Extension 库
概要
#include <X11/extensions/Xcomposite.h>Bool XCompositeQueryExtension(Display *dpy, int *event_base_return, int *error_base_return);
Status XCompositeQueryVersion(Display *dpy, int *major_version_return, int *minor_version_return);
int XCompositeVersion(void);
void XCompositeRedirectWindow(Display *dpy, Window window, int update);
void XCompositeRedirectSubwindows(Display *dpy, Window window, int update);
void XCompositeUnredirectWindow(Display *dpy, Window window, int update);
void XCompositeUnredirectSubwindows(Display *dpy, Window window, int update);
XserverRegion XCompositeCreateRegionFromBorderClip(Display *dpy, Window window);
Pixmap XCompositeNameWindowPixmap(Display *dpy, Window window);
Window XCompositeGetOverlayWindow(Display *dpy, Window window);
void XCompositeReleaseOverlayWindow(Display *dpy, Window window);
描述
Composite扩展提供了几种相关的机制:
分层存储
整个窗口层次的渲染被重定向到屏幕外的存储。只要层次结构可见,这些像素就可用。当顶级窗口大小改变时,存储会自动重新分配。超出顶级窗口几何形状的内容不会被保留。
自动阴影更新
当层次结构在屏幕外渲染时,X服务器提供了一种自动机制,将这些内容显示在父窗口内。实现可以让此更新滞后于实际渲染操作一段不确定的时间。可以禁用此自动更新机制,以便外部应用程序完全确定父窗口内容。
组合覆盖窗口
协议的0.3版本增加了组合覆盖窗口,提供了一个没有干扰的表面供合成管理器绘制。此窗口总是位于普通窗口之上,但位于屏幕保护程序窗口之下。它是一个宽度和高度为屏幕尺寸的InputOutput窗口。其视觉是根视觉,边框宽度为零。试图使用组合扩展重定向它将被忽略。此窗口不会出现在QueryTree请求的回复中。它也是一个覆盖重定向窗口。这两个特性使它对窗口管理器和其他X11客户端不可见。获取此窗口的唯一途径是通过CompositeGetOverlayWindow请求。最初,组合覆盖窗口是未映射的。
父窗口裁剪
协议的0.4版本修改了在手动重定向子窗口存在情况下的父窗口裁剪语义。在此版本中,被手动重定向的子窗口覆盖的区域保留在父剪辑列表中,而不是像旧版本那样被移除。
可以为单个窗口或窗口的所有子窗口创建分层存储。只有一个应用程序可以为每个窗口选择手动阴影更新;手动更新也可以按窗口或每个窗口的子窗口选择。可以使用Damage扩展检测何时更新。
屏幕外存储包括窗口内容、其边框和所有子孙的内容。
参数
display
指向从XOpenDisplay返回的Display结构的指针,表示与X服务器的连接。
event_base_return
指向整数的指针,用于存储Composite Extension事件的基值。
error_base_return
指向整数的指针,用于存储Composite Extension错误的基值。
major_version_return
指向整数的指针,用于存储X服务器支持的Composite Extension的主要版本号。
minor_version_return
指向整数的指针,用于存储X服务器支持的Composite Extension的次要版本号。
window
指定要操作的窗口ID。
update
指定更新窗口内容的模式。必须是CompositeRedirectAutomatic或CompositeRedirectManual之一。
函数
XCompositeQueryExtension
XCompositeQueryExtension确定给定显示是否支持Composite Extension。如果支持,则返回True,否则返回False。如果扩展存在,则返回事件和错误的基值,可用于解码传入的事件和错误值。
XCompositeQueryVersion
XCompositeQueryVersion确定X服务器是否支持与客户端库兼容的X Composite Extension版本。如果支持兼容版本,则返回非零状态,否则返回零状态。如果扩展支持,则返回主要和次要版本号以指示Composite Extension支持的级别。在调用此函数之前,不能调用其他XComposite函数(除了XCompositeQueryExtension)。如果客户端违反此规则,则它进行的所有后续XComposite调用的效果都是未定义的。
XCompositeVersion
XCompositeVersion返回X Composite库的版本号。版本号编码为:(major * 10000) + (minor * 100) + revision。例如,版本1.4.6编码为整数10406。
XCompositeRedirectWindow
XCompositeRedirectWindow请求X服务器将从window开始的层次结构重定向到屏幕外的存储。update参数指定内容是否自动镜像到父窗口。只有一个客户端可以指定CompositeRedirectManual更新类型,另一次尝试将导致BadAccess错误。当启用重定向的所有客户端终止时,重定向会自动禁用。根窗口不能被重定向,尝试将导致BadMatch错误。指定无效的窗口ID将导致BadWindow错误。
XCompositeRedirectSubwindows
XCompositeRedirectSubwindows请求X服务器重定向当前窗口的所有子窗口和未来的子窗口,如XCompositeRedirectWindow。如果update是CompositeRedirectManual,则在窗口操作期间和ClearArea请求期间将禁止绘制窗口背景。
XCompositeUnredirectWindow
XCompositeUnredirectWindow请求X服务器终止窗口的重定向。如果指定的窗口未被当前客户端选择为重定向,则会导致BadValue错误。
XCompositeUnredirectSubwindows
XCompositeUnredirectWindow请求X服务器终止窗口所有子窗口的重定向。如果指定的窗口未被当前客户端选择为子重定向,则会导致BadValue错误。
XCompositeCreateRegionFromBorderClip
XCompositeCreateRegionFromBorderClip创建一个区域,包含“通常”的边界剪辑值;即窗口与兄弟和父窗口剪辑后的区域。此区域可用于在仅更新单个窗口时限制渲染到合适的区域。此区域在请求执行时被复制;未来的窗口层次结构更改不会反映在此区域中。
XCompositeNameWindowPixmap
XCompositeNameWindowPixmap创建并返回一个pixmap ID,作为对窗口屏幕外存储的引用。此pixmap将保持分配状态,直到被释放,即使窗口被取消映射、重新配置或销毁。然而,每次映射或调整窗口大小时,窗口将分配一个新的pixmap,因此需要重新调用此函数以继续引用当前窗口内容的存储。如果窗口未被重定向或不可见,将生成BadMatch错误。X服务器必须至少支持Composite Extension版本0.2以支持XCompositeNameWindowPixmap。
XCompositeGetOverlayWindow
XCompositeGetOverlayWindow返回窗口参数指定的屏幕的Composite Overlay Window的窗口ID。此函数通知X服务器客户端希望使用此屏幕的Composite Overlay Window。如果此Composite Overlay Window尚未被映射,则此请求将映射它。当所有调用此函数的客户端要么调用XCompositeReleaseOverlayWindow,要么终止与X服务器的连接时,此屏幕的Composite Overlay Window将被取消映射。X服务器必须至少支持Composite Extension版本0.3以支持XCompositeGetOverlayWindow。
XCompositeReleaseOverlayWindow
此请求指定客户端不再使用窗口参数指定的屏幕上的Composite Overlay Window。当没有客户端使用屏幕的Composite Overlay Window时,将取消映射它。X服务器必须至少支持Composite Extension版本0.3以支持XCompositeReleaseOverlayWindow。