| git.druid.rocks | index | militantprogrammer | astral_canvas | src/ | 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;
}