/* * config.h - configuration: defaults, file parsing, and CLI overrides all flow * through config_set(), so the file and the command line share one vocabulary. * * Colours are stored 0xAARRGGBB and written in the config as #RRGGBB or * #RRGGBBAA. Key bindings are single ASCII characters; cancel (Esc) and undo * (Backspace) are fixed. */ #ifndef MOUSEBOARD_CONFIG_H #define MOUSEBOARD_CONFIG_H #include #define MB_MAX_GRID_DIM 200 #define MB_MAX_FONT_SCALE 64 struct config { char alphabet[64]; /* label characters, most-preferred first */ int cell_size; /* target coarse-cell size in px (if cols/rows 0) */ int cols, rows; /* explicit grid; 0 means derive from cell_size */ int font_scale; /* label scale; 0 means auto-fit per cell */ int opacity_bg; /* backdrop opacity 0..100 (100 = solid) */ int opacity_fg; /* labels/grid/crosshair opacity 0..100 */ uint32_t color_bg; /* full-screen backdrop */ uint32_t color_grid; /* grid lines */ uint32_t color_label; /* label glyphs */ uint32_t color_typed; /* already-typed portion of a label */ uint32_t color_active; /* refine box and crosshair */ char k_tl, k_tr, k_bl, k_br; /* refine: keep TL/TR/BL/BR quadrant */ char k_left, k_middle, k_right; /* click buttons */ char k_double, k_drag; /* double-click; start/finish drag */ }; void config_defaults(struct config *c); /* Apply one "key value" pair. Returns 0 on success, -1 unknown key, * -2 bad value. */ int config_set(struct config *c, const char *key, const char *val); /* Return NULL if the complete configuration is usable, otherwise a short * diagnostic. Call after file and command-line overrides have been applied. */ const char *config_validate(const struct config *c); /* Scale color_bg's alpha by opacity_bg/100 and the other colours' by * opacity_fg/100. Call exactly once, after all file and command-line * overrides. The default colours carry full alpha, so 100 means solid. */ void config_apply_opacity(struct config *c); /* Parse a config file. Returns 0 on success, -1 if it does not exist (not an * error), -2 on a parse error (message printed to stderr). */ int config_load_file(struct config *c, const char *path); /* Default config path: $XDG_CONFIG_HOME/mouseboard/config, falling back to * %APPDATA%/mouseboard/config (Windows), then ~/.config/mouseboard/config. * Static buffer. */ const char *config_default_path(void); #endif /* MOUSEBOARD_CONFIG_H */