Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在哪里可以找到xcb库的实现?_C_Linux_X11_Xcb - Fatal编程技术网

在哪里可以找到xcb库的实现?

在哪里可以找到xcb库的实现?,c,linux,x11,xcb,C,Linux,X11,Xcb,我试图学习xcb,由于文档非常稀少,我想研究方法本身的实现。例如,源代码中没有给出方法xcb_poly_line的定义。但是,当我包含它时,它就可以工作。XCB中的大多数协议绑定都是在构建时根据协议的XML描述自动生成的。因此,要获得“真正的源代码”,您必须自己构建XCB(但您不必安装它,因为对于构建,首先生成C源代码) 然而,我认为生成的源代码不是很有用。你要的是xcb\u poly\u line。此请求的XCB说明如下所示(取自): 此函数只接受给定的参数并将其发送到X11服务器。不施魔法

我试图学习xcb,由于文档非常稀少,我想研究方法本身的实现。例如,源代码中没有给出方法xcb_poly_line的定义。但是,当我包含它时,它就可以工作。

XCB中的大多数协议绑定都是在构建时根据协议的XML描述自动生成的。因此,要获得“真正的源代码”,您必须自己构建XCB(但您不必安装它,因为对于构建,首先生成C源代码)

然而,我认为生成的源代码不是很有用。你要的是
xcb\u poly\u line
。此请求的XCB说明如下所示(取自):

此函数只接受给定的参数并将其发送到X11服务器。不施魔法


在X.org X11服务器中,多段线请求由函数
ProcPolyLine
处理。它的实现很可能也不会给您带来太多启示:

您链接的存储库已经过时(2012年)。功能xcb_poly_line似乎添加到了版本1.13中。你应该浏览一下。也就是说,我无法找到
xcb\u poly\u line
,但我猜它一定在libxcb-*项目中的某个地方。我认为
xcb\u poly\u line
xbc/proto.h
中定义为其他东西的原型,尝试打开
xbc/proto.h
,然后搜索它,它可能位于
/include
/usr/include(最好使用
gcc-xc-E-v-
来计算,如中所示),也可以用于它,但除了如何使用它的文档外,什么也找不到。
  <request name="PolyLine" opcode="65" combine-adjacent="true">
    <field type="BYTE" name="coordinate_mode" enum="CoordMode" />
    <field type="DRAWABLE" name="drawable" />
    <field type="GCONTEXT" name="gc" />
    <list type="POINT" name="points" />
    <doc>
      [snip]
    </doc>
  </request>
xcb_void_cookie_t
xcb_poly_line (xcb_connection_t  *c,
               uint8_t            coordinate_mode,
               xcb_drawable_t     drawable,
               xcb_gcontext_t     gc,
               uint32_t           points_len,
               const xcb_point_t *points)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 4,
        .ext = 0,
        .opcode = XCB_POLY_LINE,
        .isvoid = 1
    };

    struct iovec xcb_parts[6];
    xcb_void_cookie_t xcb_ret;
    xcb_poly_line_request_t xcb_out;

    xcb_out.coordinate_mode = coordinate_mode;
    xcb_out.drawable = drawable;
    xcb_out.gc = gc;

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    /* xcb_point_t points */
    xcb_parts[4].iov_base = (char *) points;
    xcb_parts[4].iov_len = points_len * sizeof(xcb_point_t);
    xcb_parts[5].iov_base = 0;
    xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}