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

src/main.c


#include "api/canvas.h"
#include "platform/platform.h"
 
#include <argp.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define PROGRAM_NAME "canvas-demo"
 
static void usage(const char *argv0)
{
    fprintf(stderr, "usage: %s [--backend=x11|wayland|auto]\n", argv0);
}
 
typedef struct {
    A_Backend backend;
    A_Mode mode;
    float scale;
} userSettings;
 
static int parse_opt(int key, char *arg, struct argp_state *state)
{
    userSettings *chosenUserSettings = (userSettings *)state->input;
 
    switch (key) {
    case 'h':
        usage(PROGRAM_NAME);
        break;
    case 'b':
        if (strcasecmp(arg, "a") == 0 || strcasecmp(arg, "auto") == 0)
            chosenUserSettings->backend = A_BACKEND_AUTO;
        else if (strcasecmp(arg, "x") == 0 || strcasecmp(arg, "x11") == 0)
            chosenUserSettings->backend = A_BACKEND_X11;
        else if (strcasecmp(arg, "w") == 0 || strcasecmp(arg, "wayland") == 0)
            chosenUserSettings->backend = A_BACKEND_WAYLAND;
        break;
    case 'm':
        if (strcasecmp(arg, "c") == 0 || strcasecmp(arg, "complex") == 0)
            chosenUserSettings->mode = A_MODE_COMPLEX;
        else if (strcasecmp(arg, "s") == 0 || strcasecmp(arg, "simple") == 0)
            chosenUserSettings->mode = A_MODE_SIMPLE;
        else if (strcasecmp(arg, "t") == 0 || strcasecmp(arg, "text") == 0)
            chosenUserSettings->mode = A_MODE_TEXT;
        break;
    case 's': {
        chosenUserSettings->scale = (float)atof(arg);
        break;
    }
    }
    return 0;
}
 
int main(int argc, char **argv)
{
    struct argp_option options[] = {
        {"backend", 'b', "x11|wayland|auto", 0, "x11 or wayland", 0},
        {"mode", 'm', "c|s|t", 0, "complex, simple, or text", 0},
        {"scale", 's', "value", 0, "UI/buffer scale", 0},
        {0}
    };
    userSettings settings = {
        .backend = A_BACKEND_AUTO,
        .mode = A_MODE_COMPLEX,
        .scale = 0.0f,
    };
    struct argp argp = {
        .options = options,
        .parser = parse_opt,
        .args_doc = 0,
        .doc = 0,
    };
    CanvasOptions opt = {0};
    Widget root;
 
    if (argp_parse(&argp, argc, argv, 0, 0, &settings) == -1)
        return -1;
 
    opt.backend = settings.backend;
    opt.mode = settings.mode;
    opt.scale = settings.scale;
 
    root = A_Init(800, 480, "Astral Canvas", &opt);
    (void)root;
    if (!A_IsOpen()) {
        fprintf(stderr, "%s\n", A_LastError());
        return 1;
    }
 
    A_Wait();
    A_CloseWindow();
    return 0;
}
powered by btf.