URI: 
       config.h - ltk - GUI toolkit for X11 (WIP)
  HTML git clone git://lumidify.org/ltk.git (fast, but not encrypted)
  HTML git clone https://lumidify.org/ltk.git (encrypted, but very slow)
  HTML git clone git://4kcetb7mo7hj6grozzybxtotsub5bempzo4lirzc3437amof2c2impyd.onion/ltk.git (over tor)
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       config.h (4370B)
       ---
            1 /*
            2  * Copyright (c) 2022-2024 lumidify <nobody@lumidify.org>
            3  *
            4  * Permission to use, copy, modify, and/or distribute this software for any
            5  * purpose with or without fee is hereby granted, provided that the above
            6  * copyright notice and this permission notice appear in all copies.
            7  *
            8  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
            9  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
           10  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
           11  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
           12  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
           13  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
           14  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
           15  */
           16 
           17 #ifndef LTK_CONFIG_H
           18 #define LTK_CONFIG_H
           19 
           20 #include <stddef.h>
           21 
           22 #include "array.h"
           23 #include "color.h"
           24 #include "widget.h"
           25 #include "graphics.h"
           26 #include "eventdefs.h"
           27 
           28 typedef enum{
           29         LTK_KEY_BINDING_NOFLAGS = 0,
           30         LTK_KEY_BINDING_RUN_ALWAYS = 1,
           31 } ltk_key_binding_flags;
           32 
           33 typedef struct {
           34         char *text;
           35         char *rawtext;
           36         ltk_keysym sym;
           37         ltk_mod_type mods;
           38         ltk_key_binding_flags flags;
           39 } ltk_keypress_binding;
           40 
           41 typedef struct {
           42         ltk_keysym sym;
           43         ltk_mod_type mods;
           44         ltk_key_binding_flags flags;
           45 } ltk_keyrelease_binding;
           46 
           47 typedef struct{
           48         char *from;
           49         char *to;
           50 } ltk_keytext_mapping;
           51 
           52 typedef struct {
           53         char *lang;
           54         ltk_keytext_mapping *mappings;
           55         size_t mappings_alloc, mappings_len;
           56 } ltk_language_mapping;
           57 
           58 struct ltk_cmd_piece {
           59         char *text;
           60         enum {
           61                 LTK_CMD_TEXT,
           62                 LTK_CMD_INPUT_FILE,
           63                 LTK_CMD_OUTPUT_FILE,
           64                 LTK_CMD_INOUT_FILE,
           65         } type;
           66 };
           67 
           68 LTK_ARRAY_INIT_STRUCT_DECL(cmdpiece, struct ltk_cmd_piece)
           69 LTK_ARRAY_INIT_STRUCT_DECL(cmd, ltk_array(cmdpiece) *)
           70 
           71 typedef struct {
           72         ltk_array(cmd) *line_editor;
           73         ltk_array(cmd) *option_chooser;
           74         double dpi_scale;
           75         double fixed_dpi;
           76         int mixed_dpi;
           77         int explicit_focus;
           78         int all_activatable;
           79 } ltk_general_config;
           80 
           81 typedef int (*ltk_keybinding_func)(ltk_widget *, ltk_key_event *);
           82 
           83 typedef struct {
           84         char *text;
           85         ltk_keybinding_func func;
           86 } ltk_keybinding_cb;
           87 
           88 typedef struct {
           89         ltk_keypress_binding b;
           90         ltk_keybinding_cb cb;
           91 } ltk_keypress_cfg;
           92 
           93 typedef struct {
           94         ltk_keyrelease_binding b;
           95         ltk_keybinding_cb cb;
           96 } ltk_keyrelease_cfg;
           97 
           98 typedef enum {
           99         THEME_STRING,
          100         THEME_COLOR,
          101         THEME_INT,
          102         THEME_UINT,
          103         THEME_BOOL,
          104         THEME_BORDERSIDES,
          105         THEME_SIZE,
          106         THEME_DOUBLE,
          107         THEME_CMD,
          108 } ltk_theme_datatype;
          109 
          110 typedef struct {
          111         char *key;
          112         ltk_theme_datatype type;
          113         /* Note: Bool and int are both integers, but they are
          114            separate just to make it a bit clearer */
          115         union {
          116                 char **str;
          117                 ltk_color **color;
          118                 int *i;
          119                 unsigned int *u;
          120                 int *b;
          121                 ltk_border_sides *border;
          122                 ltk_size *size;
          123                 double *d;
          124                 ltk_array(cmd) **cmd;
          125         } ptr;
          126         /* Note: The default color is also given as a string
          127            because it has to be allocated first (it is only a
          128            different entry in the union in order to make it
          129            a bit clearer) */
          130         union {
          131                 char *str;
          132                 char *color;
          133                 int i;
          134                 unsigned int u;
          135                 int b;
          136                 ltk_border_sides border;
          137                 ltk_size size;
          138                 double d;
          139                 char *cmd;
          140         } defaultval;
          141         /* FIXME: min/max doesn't make too much sense for sizes since they
          142            can use different units, but that shouldn't matter for now because
          143            min/max is only used as a sanity check to avoid extreme sizes or
          144            negative sizes where that isn't allowed */
          145         /* only for integers, doubles, or sizes */
          146         /* doubles are weird at the moment since only two decimal places are
          147            allowed. The min/max for doubles is the min/max given here, divided
          148            by 100, i.e. to allow the range 1.0-10.0, min must be 100 and max
          149            must be 1000. */
          150         long long min, max;
          151         int initialized;
          152 } ltk_theme_parseinfo;
          153 
          154 LTK_ARRAY_INIT_DECL(keypress, ltk_keypress_cfg)
          155 LTK_ARRAY_INIT_DECL(keyrelease, ltk_keyrelease_cfg)
          156 
          157 void ltk_config_cleanup(ltk_renderdata *renderdata);
          158 ltk_general_config *ltk_config_get_general(void);
          159 int ltk_config_get_language_index(char *lang, size_t *idx_ret);
          160 ltk_language_mapping *ltk_config_get_language_mapping(size_t idx);
          161 int ltk_config_parsefile(ltk_renderdata *renderdata, const char *filename, char **errstr);
          162 int ltk_config_load_default(ltk_renderdata *renderdata, char **errstr);
          163 
          164 void ltk_keypress_bindings_destroy(ltk_array(keypress) *arr);
          165 void ltk_keyrelease_bindings_destroy(ltk_array(keyrelease) *arr);
          166 
          167 #endif /* LTK_CONFIG_H */