如何从原始数据 C++ 在 X11 中创建游标

How to create a cursor in X11 from raw data c++

我一直在搜索这个问题一段时间。我正在制作一个跨平台程序,我已经弄清楚如何使用 windows API 加载动画光标以及如何在 运行 时间内从原始位图数据创建光标。但是,对于我的 Unix/Linux 程序构建,我找不到 X11 的良好文档。我知道我需要使用本文档中的 XRender 扩展函数、XRenderCreateCursor 和 XRenderCreateAnimCursor https://www.x.org/releases/X11R7.6/doc/libXrender/libXrender.txt,但我不知道如何使用这些函数,文档现在没有显示任何示例。

此外,原始图像数据是 ARGB 格式,如果可能的话,我希望这些光标支持 Alpha 通道。

有人可以告诉我如何使用 X11 和 XRender(或 XCursor)库来创建静态和动画光标,以及如何创建光标可以与任何 X11 一起使用 window .

谢谢!

PS.

我正在为我的程序使用的 Gui 跨平台编辑一个开源库,我正在尝试将此功能添加到库中,但我不习惯使用 X11 进行编程。

说到 X,没有什么是简单的。

首先,回顾specification of the X render extension

创建动画光标的步骤如下。

  1. 首先需要为动画光标的每一帧创建一个PICTURE,使用CreatePicture.

  2. 使用 CreateCursor 从每个 PICTURE 创建一个 CURSORCreateCursor returns一个CURSOR句柄。

  3. 然后,您获取所有帧的所有 CURSOR 的列表,然后使用 CreateAnimCursor 创建一个表示动画的 CURSOR光标.

这一切都归结为为每一帧创建一个 PICTUREPICTURE 是使用 DRAWABLEPICTFORMAT 中的 CreatePicture 创建的。 DRAWABLE 将是带有光标帧实际位掩码的 PIXMAPPICTFORMAT 指定像素图中的哪些通道代表红色、彩色和绿色通道,并且必须是从 QueryPictformat.

返回的枚举 PICTFORMATs

有关详细信息,请参阅上述 X 渲染扩展规范。