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