ltk

GUI toolkit for X11 (WIP)
git clone git://lumidify.org/ltk.git (fast, but not encrypted)
git clone https://lumidify.org/ltk.git (encrypted, but very slow)
git clone git://4kcetb7mo7hj6grozzybxtotsub5bempzo4lirzc3437amof2c2impyd.onion/ltk.git (over tor)
Log | Files | Refs | README | 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 */