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 */