簡體   English   中英

如何使用 XCB 獲取模式名稱?

[英]How to get mode name using XCB?

在 Xlib 中,除了nameLength字段之外,結構XRRModeInfo還包含name本身。 但是在 XCB 中對應的結構xcb_randr_mode_info_t只包含name_len ,似乎沒有 function 來獲取實際的名稱字符串。

我確實在xcb_randr_get_screen_resources_names()返回的字符串中看到了所有模式名稱,但它們都是串聯的,我不知道如何在這個字符串中找到特定模式的偏移量。

那么,如何使用 XCB 獲取模式名稱?

我確實在 xcb_randr_get_screen_resources_names() 返回的字符串中看到了所有模式名稱,但它們都是串聯的,我不知道如何在這個字符串中找到特定模式的偏移量。

您知道各個名稱的長度,並且知道每個名稱的長度,因此您只需計算字節數:

#include <stdio.h>
#include <xcb/randr.h>

int main()
{
        xcb_connection_t *c = xcb_connect(NULL, NULL);
        xcb_screen_t *screen = xcb_setup_roots_iterator(xcb_get_setup(c)).data;
        // TODO: Error handling
        // TODO: Checking if the RandR extension is available
        xcb_randr_get_screen_resources_reply_t *reply =
                xcb_randr_get_screen_resources_reply(c,
                                xcb_randr_get_screen_resources(c, screen->root),
                                NULL);
        xcb_randr_mode_info_iterator_t iter = xcb_randr_get_screen_resources_modes_iterator(reply);
        uint8_t *names = xcb_randr_get_screen_resources_names(reply);
        while (iter.rem) {
                xcb_randr_mode_info_t *mode = iter.data;
                printf("Mode %d has size %dx%d and name %.*s\n",
                                mode->id, mode->width, mode->height, mode->name_len, names);
                names += mode->name_len;
                xcb_randr_mode_info_next(&iter);
        }
        free(reply);
        xcb_disconnect(c);
        return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM