1 /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 
3 /* Copyright (C) 2018-2021 Hans Petter Jansson
4  *
5  * This file is part of Chafa, a program that turns images into character art.
6  *
7  * Chafa is free software: you can redistribute it and/or modify
8  * it under the terms of the GNU Lesser General Public License as published
9  * by the Free Software Foundation, either version 3 of the License, or
10  * (at your option) any later version.
11  *
12  * Chafa is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public License
18  * along with Chafa.  If not, see <http://www.gnu.org/licenses/>. */
19 
20 #ifndef __CHAFA_CANVAS_CONFIG_H__
21 #define __CHAFA_CANVAS_CONFIG_H__
22 
23 #if !defined (__CHAFA_H_INSIDE__) && !defined (CHAFA_COMPILATION)
24 # error "Only <chafa.h> can be included directly."
25 #endif
26 
27 #include <chafa-symbol-map.h>
28 
29 G_BEGIN_DECLS
30 
31 /* Color extractor */
32 
33 typedef enum
34 {
35     CHAFA_COLOR_EXTRACTOR_AVERAGE,
36     CHAFA_COLOR_EXTRACTOR_MEDIAN,
37 
38     CHAFA_COLOR_EXTRACTOR_MAX
39 }
40 ChafaColorExtractor;
41 
42 /* Color spaces */
43 
44 typedef enum
45 {
46     CHAFA_COLOR_SPACE_RGB,
47     CHAFA_COLOR_SPACE_DIN99D,
48 
49     CHAFA_COLOR_SPACE_MAX
50 }
51 ChafaColorSpace;
52 
53 /* Canvas modes */
54 
55 typedef enum
56 {
57     CHAFA_CANVAS_MODE_TRUECOLOR,
58     CHAFA_CANVAS_MODE_INDEXED_256,
59     CHAFA_CANVAS_MODE_INDEXED_240,
60     CHAFA_CANVAS_MODE_INDEXED_16,
61     CHAFA_CANVAS_MODE_FGBG_BGFG,
62     CHAFA_CANVAS_MODE_FGBG,
63     CHAFA_CANVAS_MODE_INDEXED_8,
64 
65     CHAFA_CANVAS_MODE_MAX
66 }
67 ChafaCanvasMode;
68 
69 /* Dither modes */
70 
71 typedef enum
72 {
73     CHAFA_DITHER_MODE_NONE,
74     CHAFA_DITHER_MODE_ORDERED,
75     CHAFA_DITHER_MODE_DIFFUSION,
76 
77     CHAFA_DITHER_MODE_MAX
78 }
79 ChafaDitherMode;
80 
81 /* Pixel modes */
82 
83 typedef enum
84 {
85     CHAFA_PIXEL_MODE_SYMBOLS,
86     CHAFA_PIXEL_MODE_SIXELS,
87     CHAFA_PIXEL_MODE_KITTY,
88     CHAFA_PIXEL_MODE_ITERM2,
89 
90     CHAFA_PIXEL_MODE_MAX
91 }
92 ChafaPixelMode;
93 
94 /* Sequence optimization flags. When enabled, these may produce more compact
95  * output at the cost of reduced compatibility and increased CPU use. Output
96  * quality is unaffected. */
97 
98 typedef enum
99 {
100     CHAFA_OPTIMIZATION_REUSE_ATTRIBUTES = (1 << 0),
101     CHAFA_OPTIMIZATION_SKIP_CELLS = (1 << 1),
102     CHAFA_OPTIMIZATION_REPEAT_CELLS = (1 << 2),
103 
104     CHAFA_OPTIMIZATION_NONE = 0,
105     CHAFA_OPTIMIZATION_ALL = 0x7fffffff
106 }
107 ChafaOptimizations;
108 
109 /* Canvas config */
110 
111 typedef struct ChafaCanvasConfig ChafaCanvasConfig;
112 
113 CHAFA_AVAILABLE_IN_ALL
114 ChafaCanvasConfig *chafa_canvas_config_new (void);
115 CHAFA_AVAILABLE_IN_ALL
116 ChafaCanvasConfig *chafa_canvas_config_copy (const ChafaCanvasConfig *config);
117 CHAFA_AVAILABLE_IN_ALL
118 void chafa_canvas_config_ref (ChafaCanvasConfig *config);
119 CHAFA_AVAILABLE_IN_ALL
120 void chafa_canvas_config_unref (ChafaCanvasConfig *config);
121 
122 CHAFA_AVAILABLE_IN_ALL
123 void chafa_canvas_config_get_geometry (const ChafaCanvasConfig *config, gint *width_out, gint *height_out);
124 CHAFA_AVAILABLE_IN_ALL
125 void chafa_canvas_config_set_geometry (ChafaCanvasConfig *config, gint width, gint height);
126 
127 CHAFA_AVAILABLE_IN_1_4
128 void chafa_canvas_config_get_cell_geometry (const ChafaCanvasConfig *config, gint *cell_width_out, gint *cell_height_out);
129 CHAFA_AVAILABLE_IN_1_4
130 void chafa_canvas_config_set_cell_geometry (ChafaCanvasConfig *config, gint cell_width, gint cell_height);
131 
132 CHAFA_AVAILABLE_IN_ALL
133 ChafaCanvasMode chafa_canvas_config_get_canvas_mode (const ChafaCanvasConfig *config);
134 CHAFA_AVAILABLE_IN_ALL
135 void chafa_canvas_config_set_canvas_mode (ChafaCanvasConfig *config, ChafaCanvasMode mode);
136 
137 CHAFA_AVAILABLE_IN_1_4
138 ChafaColorExtractor chafa_canvas_config_get_color_extractor (const ChafaCanvasConfig *config);
139 CHAFA_AVAILABLE_IN_1_4
140 void chafa_canvas_config_set_color_extractor (ChafaCanvasConfig *config, ChafaColorExtractor color_extractor);
141 
142 CHAFA_AVAILABLE_IN_ALL
143 ChafaColorSpace chafa_canvas_config_get_color_space (const ChafaCanvasConfig *config);
144 CHAFA_AVAILABLE_IN_ALL
145 void chafa_canvas_config_set_color_space (ChafaCanvasConfig *config, ChafaColorSpace color_space);
146 
147 CHAFA_AVAILABLE_IN_ALL
148 const ChafaSymbolMap *chafa_canvas_config_peek_symbol_map (const ChafaCanvasConfig *config);
149 CHAFA_AVAILABLE_IN_ALL
150 void chafa_canvas_config_set_symbol_map (ChafaCanvasConfig *config, const ChafaSymbolMap *symbol_map);
151 
152 CHAFA_AVAILABLE_IN_ALL
153 const ChafaSymbolMap *chafa_canvas_config_peek_fill_symbol_map (const ChafaCanvasConfig *config);
154 CHAFA_AVAILABLE_IN_ALL
155 void chafa_canvas_config_set_fill_symbol_map (ChafaCanvasConfig *config, const ChafaSymbolMap *fill_symbol_map);
156 
157 CHAFA_AVAILABLE_IN_ALL
158 gfloat chafa_canvas_config_get_transparency_threshold (const ChafaCanvasConfig *config);
159 CHAFA_AVAILABLE_IN_ALL
160 void chafa_canvas_config_set_transparency_threshold (ChafaCanvasConfig *config, gfloat alpha_threshold);
161 
162 CHAFA_AVAILABLE_IN_ALL
163 guint32 chafa_canvas_config_get_fg_color (const ChafaCanvasConfig *config);
164 CHAFA_AVAILABLE_IN_ALL
165 void chafa_canvas_config_set_fg_color (ChafaCanvasConfig *config, guint32 fg_color_packed_rgb);
166 
167 CHAFA_AVAILABLE_IN_ALL
168 guint32 chafa_canvas_config_get_bg_color (const ChafaCanvasConfig *config);
169 CHAFA_AVAILABLE_IN_ALL
170 void chafa_canvas_config_set_bg_color (ChafaCanvasConfig *config, guint32 bg_color_packed_rgb);
171 
172 CHAFA_AVAILABLE_IN_ALL
173 gfloat chafa_canvas_config_get_work_factor (const ChafaCanvasConfig *config);
174 CHAFA_AVAILABLE_IN_ALL
175 void chafa_canvas_config_set_work_factor (ChafaCanvasConfig *config, gfloat work_factor);
176 
177 CHAFA_AVAILABLE_IN_ALL
178 gboolean chafa_canvas_config_get_preprocessing_enabled (const ChafaCanvasConfig *config);
179 CHAFA_AVAILABLE_IN_ALL
180 void chafa_canvas_config_set_preprocessing_enabled (ChafaCanvasConfig *config, gboolean preprocessing_enabled);
181 
182 CHAFA_AVAILABLE_IN_1_2
183 ChafaDitherMode chafa_canvas_config_get_dither_mode (const ChafaCanvasConfig *config);
184 CHAFA_AVAILABLE_IN_1_2
185 void chafa_canvas_config_set_dither_mode (ChafaCanvasConfig *config, ChafaDitherMode dither_mode);
186 
187 CHAFA_AVAILABLE_IN_1_2
188 void chafa_canvas_config_get_dither_grain_size (const ChafaCanvasConfig *config, gint *width_out, gint *height_out);
189 CHAFA_AVAILABLE_IN_1_2
190 void chafa_canvas_config_set_dither_grain_size (ChafaCanvasConfig *config, gint width, gint height);
191 
192 CHAFA_AVAILABLE_IN_1_2
193 gfloat chafa_canvas_config_get_dither_intensity (const ChafaCanvasConfig *config);
194 CHAFA_AVAILABLE_IN_1_2
195 void chafa_canvas_config_set_dither_intensity (ChafaCanvasConfig *config, gfloat intensity);
196 
197 CHAFA_AVAILABLE_IN_1_4
198 ChafaPixelMode chafa_canvas_config_get_pixel_mode (const ChafaCanvasConfig *config);
199 CHAFA_AVAILABLE_IN_1_4
200 void chafa_canvas_config_set_pixel_mode (ChafaCanvasConfig *config, ChafaPixelMode pixel_mode);
201 
202 CHAFA_AVAILABLE_IN_1_6
203 ChafaOptimizations chafa_canvas_config_get_optimizations (const ChafaCanvasConfig *config);
204 CHAFA_AVAILABLE_IN_1_6
205 void chafa_canvas_config_set_optimizations (ChafaCanvasConfig *config, ChafaOptimizations optimizations);
206 
207 CHAFA_AVAILABLE_IN_1_8
208 gboolean chafa_canvas_config_get_fg_only_enabled (const ChafaCanvasConfig *config);
209 CHAFA_AVAILABLE_IN_1_8
210 void chafa_canvas_config_set_fg_only_enabled (ChafaCanvasConfig *config, gboolean fg_only_enabled);
211 
212 G_END_DECLS
213 
214 #endif /* __CHAFA_CANVAS_CONFIG_H__ */
215