Obtenha as dimensões atuais da tela via Xlib usando C

Obtenha as dimensões atuais da tela via Xlib usando C

Existe alguma maneira de obter as dimensões da tela de um display via Xlib usando C? Tentei consultar os documentos do X.org (https://tronche.com/gui/x/xlib/display/screen-information.html) e só me fornece macros que não aceitam números inteiros, então estou perdido.

Eu usei especificamente essas funções desta maneira:

int sx;
int sy;
XWidthOfScreen(sx);
XWidthOfScreen(sy);

...

move_window(sx / 4)
move_window(sy / 4)

Sou novato em programação C e estou trabalhando em meu primeiro projeto.

Responder1

Este é um exemplo simples, que irá imprimir o tamanho do display e mover a janela do emulador de terminal em que ele é executado (se definido corretamente na WINDOWIDvariável de ambiente) para largura/4, altura/4:

#include <X11/Xlib.h>
#include <err.h>
#include <stdio.h>
#include <stdlib.h>

int main(int ac, char **av){
        char *wid; Display *dpy; Window w;
        int width, height, snum;
        if(!(dpy = XOpenDisplay(0)))
                errx(1, "cannot open display '%s'", XDisplayName(0));
        snum = DefaultScreen(dpy);
        width = DisplayWidth(dpy, snum);
        height = DisplayHeight(dpy, snum);
        printf("display size is %d x %d\n", width, height);
        if((wid = getenv("WINDOWID")) && (w = strtoul(wid, 0, 0))){
                XMoveWindow(dpy, w, width / 4, height / 4);
                XSync(dpy, False);
        }
        return 0;
}

Meu conselho seria uma cópia deO manual de programação do X11, que é um HTML de página única que você pode pesquisar e contém tudo sobre a programação do X11.

Observe que pode haver bibliotecas mais amigáveis ​​ou portáveis, como gtk, qt, sdl, etc. Você pode querer usar uma delas em vez da libX11 diretamente.

informação relacionada