1 /*-
2  * SPDX-License-Identifier: BSD-2-Clause
3  *
4  * Copyright (c) 2021-2023 Alfonso Sabato Siciliano
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25  * SUCH DAMAGE.
26  */
27 
28 #ifndef _LIBBSDDIALOG_THEME_H_
29 #define _LIBBSDDIALOG_THEME_H_
30 
31 /* color flags */
32 #define BSDDIALOG_BLINK       1U
33 #define BSDDIALOG_BOLD        2U
34 #define BSDDIALOG_HALFBRIGHT  4U
35 #define BSDDIALOG_HIGHLIGHT   8U
36 #define BSDDIALOG_REVERSE    16U
37 #define BSDDIALOG_UNDERLINE  32U
38 
39 struct bsddialog_theme {
40 	struct {
41 		int color;
42 	} screen;
43 	struct {
44 		int color;
45 		unsigned int y;
46 		unsigned int x;
47 	} shadow;
48 	struct {
49 		int  color;
50 		bool delimtitle;
51 		int  titlecolor;
52 		int  lineraisecolor;
53 		int  linelowercolor;
54 		int  bottomtitlecolor;
55 		int  arrowcolor;
56 	} dialog;
57 	struct {
58 		int f_prefixcolor;
59 		int prefixcolor;
60 		int f_selectorcolor;
61 		int selectorcolor;
62 		int f_namecolor;
63 		int namecolor;
64 		int f_desccolor;
65 		int desccolor;
66 		int f_shortcutcolor;
67 		int shortcutcolor;
68 		int bottomdesccolor;
69 		int sepnamecolor;
70 		int sepdesccolor;
71 	} menu;
72 	struct {
73 		int f_fieldcolor;
74 		int fieldcolor;
75 		int readonlycolor;
76 		int bottomdesccolor;
77 	} form;
78 	struct {
79 		int f_color;
80 		int color;
81 	} bar;
82 	struct {
83 		unsigned int minmargin;
84 		unsigned int maxmargin;
85 		char leftdelim;
86 		char rightdelim;
87 		int f_delimcolor;
88 		int delimcolor;
89 		int f_color;
90 		int color;
91 		int f_shortcutcolor;
92 		int shortcutcolor;
93 	} button;
94 };
95 
96 enum bsddialog_default_theme {
97 	BSDDIALOG_THEME_3D,
98 	BSDDIALOG_THEME_BLACKWHITE,
99 	BSDDIALOG_THEME_FLAT
100 };
101 
102 enum bsddialog_color {
103 	BSDDIALOG_BLACK = 0,
104 	BSDDIALOG_RED,
105 	BSDDIALOG_GREEN,
106 	BSDDIALOG_YELLOW,
107 	BSDDIALOG_BLUE,
108 	BSDDIALOG_MAGENTA,
109 	BSDDIALOG_CYAN,
110 	BSDDIALOG_WHITE
111 };
112 
113 int
114 bsddialog_color(enum bsddialog_color foreground,
115     enum bsddialog_color background, unsigned int flags);
116 int
117 bsddialog_color_attrs(int color, enum bsddialog_color *foreground,
118     enum bsddialog_color *background, unsigned int *flags);
119 int bsddialog_get_theme(struct bsddialog_theme *theme);
120 bool bsddialog_hascolors(void);
121 int bsddialog_set_default_theme(enum bsddialog_default_theme theme);
122 int bsddialog_set_theme(struct bsddialog_theme *theme);
123 
124 #endif