theme.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
---
theme.h (2400B)
---
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_THEME_H
18 #define LTK_THEME_H
19
20 #include <stddef.h>
21 #include "color.h"
22 #include "graphics.h"
23
24 typedef enum {
25 THEME_STRING,
26 THEME_COLOR,
27 THEME_INT,
28 THEME_BOOL,
29 THEME_BORDERSIDES,
30 THEME_SIZE,
31 } ltk_theme_datatype;
32
33 typedef struct {
34 char *key;
35 ltk_theme_datatype type;
36 /* Note: Bool and int are both integers, but they are
37 separate just to make it a bit clearer */
38 union {
39 char **str;
40 ltk_color **color;
41 int *i;
42 int *b;
43 ltk_border_sides *border;
44 ltk_size *size;
45 } ptr;
46 /* Note: The default color is also given as a string
47 because it has to be allocated first (it is only a
48 different entry in the union in order to make it
49 a bit clearer) */
50 union {
51 char *str;
52 char *color;
53 int i;
54 int b;
55 ltk_border_sides border;
56 ltk_size size;
57 } defaultval;
58 /* FIXME: min/max doesn't make too much sense for sizes since they
59 can use different units, but that shouldn't matter for now because
60 min/max is only used as a sanity check to avoid extreme sizes or
61 negative sizes where that isn't allowed */
62 int min, max; /* only for integers or sizes */
63 int initialized;
64 } ltk_theme_parseinfo;
65
66 /* Both return 1 on error, 0 on success */
67 int ltk_theme_handle_value(ltk_renderdata *renderdata, char *debug_name, const char *prop, const char *value, ltk_theme_parseinfo *parseinfo, size_t len, int *sorted);
68 int ltk_theme_fill_defaults(ltk_renderdata *renderdata, char *debug_name, ltk_theme_parseinfo *parseinfo, size_t len);
69 void ltk_theme_uninitialize(ltk_renderdata *renderdata, ltk_theme_parseinfo *parseinfo, size_t len);
70
71 #endif /* LTK_THEME_H */