【问题标题】:How does window manager rendered borders from pixmap?窗口管理器如何从像素图渲染边框?
【发布时间】:2026-01-29 09:50:01
【问题描述】:

任何人都可以解释什么是内部手段以及如何从像素图呈现窗口边框?谢谢。

源码链接:https://github.com/wmutils/opt/blob/master/chwb2.c#L72

    xcb_rectangle_t inner[] = {
        /* you're not supposed to understand this. */
        {     w,0,b-o     ,h+b-   o      },
        {     w+b   +o,  0,   b  -o,     h+         b  -  o},
        {     0,h   ,w+b  -o,b-   o      },
        {     0,h   +b+      o,   w+     b-         o, b -o},
        {     w+b+o,b        +h    +o,b,b}
    };

    xcb_rectangle_t outer[] = {
        {w + b - o, 0, o, h + b * 2},
        {w + b,     0, o, h + b * 2},
        {0, h + b - o, w + b * 2, o},
        {0, h + b,     w + b * 2, o},
        {1, 1, 1, 1}
    };

    xcb_pixmap_t pmap = xcb_generate_id(conn);
    xcb_create_pixmap(conn, geom->depth, pmap, win,
            geom->width  + (b*2),
            geom->height + (b*2));
    xcb_gcontext_t gc = xcb_generate_id(conn);
    xcb_create_gc(conn, gc, pmap, 0, NULL);

    values[0] = oc;
    xcb_change_gc(conn, gc, XCB_GC_FOREGROUND, values);
    xcb_poly_fill_rectangle(conn, pmap, gc, 5, outer);

    values[0] = ic;
    xcb_change_gc(conn, gc, XCB_GC_FOREGROUND, values);
    xcb_poly_fill_rectangle(conn, pmap, gc, 5, inner);

    values[0] = pmap;
    xcb_change_window_attributes(conn, win, XCB_CW_BORDER_PIXMAP, values);

【问题讨论】:

    标签: xlib xorg window-managers xcb


    【解决方案1】:

    好吧,这段代码创建了一个像素图,然后绘制到它。首先,它用颜色oc 填充五个名为outer 的矩形,然后用颜色ic 填充另外五个名为inner 的矩形。

    为了理解每个矩形的含义,我想有一个结果的截图会有所帮助。然后你可以从中看出各种距离是多少,也许这足以弄清楚各种矩形的含义。

    【讨论】: