x11
x11
函数介绍
XCreateGC
GC XCreateGC(Display *display, Drawable d, unsigned long valuemask, XGCValues *values);
参数说明
- display: 目标显示器的 Display 结构体,表示当前连接的 X 服务器。
- d: Drawable 对象,它可以是一个窗口或一个 Pixmap,表示你要在哪个目标对象上进行图形操作。
- valuemask: 一个位掩码,指示哪些字段需要从 values 结构中提取并应用。它用于选择哪些图形上下文属性是有效的。例如,你可以指定线条颜色、填充模式等。
- values: 一个指向 XGCValues 结构体的指针,其中包含具体的图形上下文参数。根据 valuemask 的设置,XCreateGC 会读取 XGCValues 中的相应字段。
XGCValues:
typedef struct {
Pixel foreground; /* 前景色 */
Pixel background; /* 背景色 */
int line_width; /* 线条宽度 */
int line_style; /* 线条样式(实线、虚线等) */
int cap_style; /* 线条端点样式 */
int join_style; /* 线条连接点样式 */
int fill_style; /* 填充样式 */
int fill_rule; /* 填充规则 */
int tile; /* 图案填充的图像(如果有) */
int stipple; /* 点画图案 */
int ts_x_origin; /* 图案横坐标偏移 */
int ts_y_origin; /* 图案纵坐标偏移 */
int font; /* 字体 */
int subwindow_mode; /* 子窗口绘制模式 */
int graphics_exposures; /* 是否启用图形曝光 */
int clip_x_origin; /* 裁剪区域偏移 */
int clip_y_origin; /* 裁剪区域偏移 */
Pixmap clip_mask; /* 裁剪区域的掩码 */
int dash_offset; /* 虚线起始位置 */
unsigned char dash_list; /* 虚线的样式 */
int arc_mode; /* 弧形绘制模式 */
} XGCValues;
XChangeGC
XChangeGC 是 X11 库中的一个函数,用于 更改图形上下文(GC) 的属性。图形上下文(GC, Graphics Context)是用来描述绘制操作的一组属性,如颜色、线条宽度、填充样式等。这个函数允许你动态地修改这些属性,而无需创建新的图形上下文。
int XChangeGC(Display *display, GC gc, unsigned long valuemask, XGCValues *values);
参数解释:
-
display:
- 指向一个有效的 Display 连接对象的指针,表示要操作的 X11 显示服务器。
- 通过 XOpenDisplay() 获取。
-
gc:
- 要更改的图形上下文(GC)。这通常是在绘制操作之前创建的 GC。
- 你可以通过 XCreateGC() 创建一个新的 GC。
-
valuemask:
- 一个位掩码,指示要更改的 GC 属性。此值指示 XGCValues 结构体中哪些字段需要更新。位掩码的值是一个按位与操作的集合,具体的选项有:
- GCForeground:前景色(绘制图形时的颜色)
- GCBackground:背景色
- GCFillStyle:填充样式(如实心填充或点状填充)
- GCLineWidth:线条宽度
- GCLineStyle:线条样式
- GCFont:字体
- 其他图形属性
- 一个位掩码,指示要更改的 GC 属性。此值指示 XGCValues 结构体中哪些字段需要更新。位掩码的值是一个按位与操作的集合,具体的选项有:
-
values:
- 一个 XGCValues 结构,包含了你希望更改的具体值。这些值将被应用到指定的图形上下文 gc 中。
- 只有在 valuemask 中指定的字段会被更新。
XGCValues 结构:
XGCValues 结构体包含了所有可能的 GC 属性。你可以通过 valuemask 指定需要修改的部分。例如,如果你想要更改 GCForeground 和 GCFillStyle,你需要在 valuemask 中包含相应的位掩码。
示例:
#include <X11/Xlib.h>
#include <X11/Xutil.h>
void changeGC(Display *dpy, GC gc) {
XGCValues gcv;
unsigned long valuemask;
// 设置前景色
gcv.foreground = BlackPixel(dpy, DefaultScreen(dpy));
// 设置填充样式为实心
gcv.fill_style = FillSolid;
// 设置 valuemask,只修改前景色和填充样式
valuemask = GCForeground | GCFillStyle;
// 使用 XChangeGC 更新 GC
XChangeGC(dpy, gc, valuemask, &gcv);
}
XSetFillRule
XSetFillRule 是 X11 库中的一个函数,用于设置图形上下文(GC)中的 填充规则。填充规则决定了如何填充复杂路径(如交叉或重叠的多边形)。该规则影响填充区域的计算方式。
int XSetFillRule(Display *display, GC gc, int fill_rule);
参数解释
-
display:
- 一个 Display 类型的指针,表示与 X11 服务器的连接。
- 通常通过 XOpenDisplay() 获得。
-
gc:
- 一个 GC(图形上下文)指针,表示需要更改填充规则的图形上下文。
- 你可以通过 XCreateGC() 创建一个新的图形上下文。
-
fill_rule:
- 一个整数值,指定填充规则。它可以是以下两种之一:
- EvenOddFill(值为 0):偶数-奇数规则。当路径自交时,如果路径内的区域被交点偶数次包围,则该区域不会被填充;如果路径内的区域被交点奇数次包围,则该区域会被填充。
- WindingFill(值为 1):环绕规则。当路径自交时,如果路径内的区域被路径的绕行数(即围绕次数)为正数,则该区域会被填充。如果绕行数为负数,则不填充。
- 一个整数值,指定填充规则。它可以是以下两种之一:
填充规则说明
-
偶数-奇数规则(EvenOddFill):
- 对于任何封闭路径,计算该路径与区域之间的交点数。每次路径经过一个交点时,累加计数。如果交点数为 偶数,该区域不填充;如果交点数为 奇数,该区域填充。
-
环绕规则(WindingFill):
- 对于封闭路径,计算路径围绕区域的“绕行”次数。每次路径围绕该区域一圈时,计数加一。只有当围绕次数为正值时,该区域才会被填充;如果围绕次数为负值,则不填充。
XSetGraphicsExposures
XSetGraphicsExposures 是 X11 库中的一个函数,用于设置 图形上下文(GC) 的 图形曝光(Graphics Exposures) 选项。图形曝光用于控制是否在某些操作(如窗口遮挡或更新)后自动生成暴露事件(Expose Events)。
函数原型
int XSetGraphicsExposures(Display *display, GC gc, Bool graphics_exposures);
参数解释
-
display:
- 一个指向 Display 结构的指针,表示与 X11 服务器的连接。
- 通常通过 XOpenDisplay() 获取。
-
gc:
- 一个 GC(图形上下文)指针,表示需要更改的图形上下文。
-
graphics_exposures:
- 一个布尔值(True 或 False),指定是否启用图形曝光:
- True:启用图形曝光,表示在图形操作(如绘制或填充)导致的窗口区域暴露时,X11 会自动生成暴露事件。
- False:禁用图形曝光,表示不会自动生成暴露事件。通常在使用自定义重绘逻辑时使用。
- 一个布尔值(True 或 False),指定是否启用图形曝光:
作用和使用场景
-
图形曝光:图形曝光事件是由 X11 生成的,当窗口部分或全部被遮挡或重新显示时,会触发这些事件。XSetGraphicsExposures 控制图形上下文(GC)是否启用该功能。
- 启用时,绘图操作可能会引发 Expose 事件,这些事件通常用于在窗口暴露时重新绘制被遮挡的内容。
- 禁用时,X11 不会自动生成暴露事件,应用程序需要自己管理绘制的时机,尤其是在优化重绘时。
-
性能优化:禁用图形曝光(False)通常用于优化性能,避免在每次图形绘制时都生成暴露事件。此时,应用程序可能会选择在特定时机(例如,窗口完全显示时)进行绘制操作。
XSetForeground
XSetForeground 是 X11 库中的一个函数,用于设置 图形上下文(GC) 中的 前景色。前景色是用于绘制图形的颜色,比如绘制线条、填充区域或绘制文本时所使用的颜色。
函数原型
void XSetForeground(Display *display, GC gc, unsigned long foreground);
参数解释
-
display:
- 一个指向 Display 结构的指针,表示与 X11 服务器的连接。
- 通常通过 XOpenDisplay() 获取。
-
gc:
- 一个指向图形上下文(GC)的指针,表示要设置前景色的图形上下文。
- 图形上下文(GC)包含了所有绘制操作的属性,如颜色、线条宽度、填充样式等。
-
foreground:
- 一个无符号长整型值,表示前景色的像素值。此值通常是通过 XAllocColor() 或 XParseColor() 获取的颜色像素值。
作用
XSetForeground 用于设置图形上下文(GC)的前景色。前景色通常用于图形绘制操作,如:
- 绘制线条
- 填充区域
- 绘制文本等
浙公网安备 33010602011771号