gui_window_t *gui_create_window(const char *title,
uint32_t width,
uint32_t height,
uint32_t flags);
void gui_destroy_window(gui_window_t *window);
int gui_set_title(gui_window_t *window, const char *title);Les dimensions demandées concernent la zone cliente. Les flags disponibles sont :
GUI_WINDOW_RESIZABLEGUI_WINDOW_MINIMIZABLEGUI_WINDOW_MAXIMIZABLEGUI_WINDOW_DEFAULT
uint32_t *gui_window_pixels(gui_window_t *window);
uint32_t gui_window_width(const gui_window_t *window);
uint32_t gui_window_height(const gui_window_t *window);
uint32_t gui_window_stride(const gui_window_t *window);
int gui_present(gui_window_t *window, const gui_rect_t *damage);La surface est ARGB 32 bits. gui_present(window, NULL) publie toute la
surface. Un rectangle de dommage hors surface est rejeté par le desktop.
Lors d'un resize, libgui crée et attache une nouvelle surface avant de
livrer GUI_EVENT_RESIZE à l'application. Le pointeur retourné précédemment
ne doit plus être utilisé après cet événement.
int gui_poll_event(gui_window_t *window, gui_event_t *event);
int gui_wait_event(gui_window_t *window, gui_event_t *event,
uint32_t timeout_ms);Types :
GUI_EVENT_PAINTGUI_EVENT_RESIZEGUI_EVENT_FOCUSGUI_EVENT_MOUSE_MOVEGUI_EVENT_MOUSE_DOWNGUI_EVENT_MOUSE_UPGUI_EVENT_KEY_DOWNGUI_EVENT_KEY_UPGUI_EVENT_CLOSE
gui_connection_fd() retourne le descripteur IPC de la connexion au desktop
(-1 avant la première fenêtre). Il est pollable (poll/epoll,
POLLIN quand un message attend) et permet d'intégrer libgui dans une
boucle d'événements existante. libgui n'est pas thread-safe : tous les
appels gui_* doivent venir du même thread.
Les coordonnées souris sont relatives à la zone cliente. Les interactions avec les décorations ne sont pas envoyées à l'application.
void gui_clear(gui_window_t *window, uint32_t color);
void gui_draw_pixel(gui_window_t *window, int32_t x, int32_t y,
uint32_t color);
void gui_fill_rect(gui_window_t *window, gui_rect_t rect, uint32_t color);
void gui_draw_rect(gui_window_t *window, gui_rect_t rect, uint32_t color);Ces fonctions écrivent uniquement dans la surface du client. Elles n'effectuent pas de présentation implicite.
gui_protocol.h définit une ABI versionnée (GUI_PROTOCOL_VERSION) composée
uniquement d'entiers de taille fixe et de tableaux intégrés. Aucun pointeur
userland ne traverse l'IPC.
Messages client vers desktop :
GUI_MSG_HELLOGUI_MSG_CREATE_WINDOWGUI_MSG_ATTACH_SURFACEavec descripteur SHMGUI_MSG_PRESENTGUI_MSG_DESTROY_WINDOWGUI_MSG_SET_TITLE
Messages desktop vers client :
GUI_MSG_HELLO_ACKGUI_MSG_WINDOW_CREATEDGUI_MSG_EVENTGUI_MSG_ERROR
Le desktop valide la version, la taille exacte du message, le propriétaire de la fenêtre, les dimensions, le stride, la taille réelle de l'objet SHM et les rectangles de dommage.
Les headers libc sys/ipc.h, sys/shm.h et sys/display.h exposent les
primitives génériques utilisées par libgui. Les applications graphiques
ordinaires ne doivent pas acquérir l'affichage ni implémenter directement le
protocole : elles utilisent libgui.