do not edit — generated by btf.
git.druid.rocksindexmilitantprogrammerastral_canvassrc/platform/platform.c

src/platform/platform.c


#include "platform.h"
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
 
 
Print / log the four env vars
(XDG_SESSION_TYPE, WAYLAND_DISPLAY, DISPLAY, XDG_RUNTIME_DIR)
so you can see what the process inherited.
*/
const char *convertBackendToString(Backend backend)
{
    switch (backend) {
    case BACKEND_X11:
        return "x11";
    case BACKEND_WAYLAND:
        return "wayland";
    case BACKEND_AUTO:
        return "auto";
    default:
        return "invalid";
    }
}
 
DisplayKind GetDisplay(void)
{
    const char *wayland = getenv("WAYLAND_DISPLAY");
    const char *x11 = getenv("DISPLAY");
 
    if (wayland && wayland[0])
        return DISPLAY_WAYLAND;
    if (x11 && x11[0])
        return DISPLAY_X11;
    return DISPLAY_NULL;
}
 
int platformOpen(Platform *platform, const char *title, int width, int height)
{
    int rc = -1;
    DisplayKind kind;
 
    if (platform->backend == BACKEND_X11)
        kind = DISPLAY_X11;
    else if (platform->backend == BACKEND_WAYLAND)
        kind = DISPLAY_WAYLAND;
    else
        kind = GetDisplay();
 
    if (kind == DISPLAY_WAYLAND) {
        rc = platformWaylandOpen(platform, title, width, height);
        if (rc != 0) {
            fprintf(stderr, "failed setting up Wayland, trying X11\n");
            rc = platformX11Open(platform, title, width, height);
        }
    } else if (kind == DISPLAY_X11) {
        rc = platformX11Open(platform, title, width, height);
        if (rc != 0) {
            fprintf(stderr, "failed setting up X11, trying Wayland\n");
            rc = platformWaylandOpen(platform, title, width, height);
        }
    } else {
        rc = platformWaylandOpen(platform, title, width, height);
        if (rc != 0)
            rc = platformX11Open(platform, title, width, height);
    }
 
    if (rc != 0)
        return -1;
 
    eventQueueInit(&platform->events);
    platform->running = true;
    if (platform->scale <= 0)
        platform->scale = 1;
    return 0;
}
 
void platformClose(Platform *platform)
{
    if (!platform)
        return;
    if (platform->destroy)
        platform->destroy(platform);
    memset(platform, 0, sizeof(*platform));
}
 
bool platformPop(Platform *platform, Event *out)
{
    return eventQueuePop(&platform->events, out);
}
powered by btf.