@@ -8,7 +8,7 @@ GString *ChafaInfo::convert_image(uint8_t *texture_pixels,
88{
99
1010 chafa_canvas_draw_all_pixels (canvas,
11- pixel_mode == CHAFA_PIXEL_MODE_KITTY && !session_type_is_x11 ? CHAFA_PIXEL_RGBA8_UNASSOCIATED : CHAFA_PIXEL_BGRA8_UNASSOCIATED ,
11+ get_pixel_type () ,
1212 // CHAFA_PIXEL_BGRA8_UNASSOCIATED,
1313 // CHAFA_PIXEL_RGBA8_UNASSOCIATED,
1414 // CHAFA_PIXEL_ARGB8_UNASSOCIATED,
@@ -20,6 +20,106 @@ GString *ChafaInfo::convert_image(uint8_t *texture_pixels,
2020 return printable;
2121}
2222
23+ static ChafaPixelType get_chafa_pixel_type (gchar** envp) {
24+ auto pixel_type_override = g_getenv (" TERM_EVERYTHING_PIXEL_TYPE" );
25+ if (pixel_type_override == nullptr ) {
26+ return CHAFA_PIXEL_MAX; // No override
27+ }
28+ if (g_strcmp0 (pixel_type_override, " RGBA8" ) == 0 ) {
29+ return CHAFA_PIXEL_RGBA8_UNASSOCIATED;
30+ } else if (g_strcmp0 (pixel_type_override, " BGRA8" ) == 0 ) {
31+ return CHAFA_PIXEL_BGRA8_UNASSOCIATED;
32+ } else if (g_strcmp0 (pixel_type_override, " ARGB8" ) == 0 ) {
33+ return CHAFA_PIXEL_ARGB8_UNASSOCIATED;
34+ } else if (g_strcmp0 (pixel_type_override, " ABGR8" ) == 0 ) {
35+ return CHAFA_PIXEL_ABGR8_UNASSOCIATED;
36+ } else if (g_strcmp0 (pixel_type_override, " RGBA8_PREMULTIPLIED" ) == 0 ) {
37+ return CHAFA_PIXEL_RGBA8_PREMULTIPLIED;
38+ } else if (g_strcmp0 (pixel_type_override, " BGRA8_PREMULTIPLIED" ) == 0 ) {
39+ return CHAFA_PIXEL_BGRA8_PREMULTIPLIED;
40+ } else if (g_strcmp0 (pixel_type_override, " ARGB8_PREMULTIPLIED" ) == 0 ) {
41+ return CHAFA_PIXEL_ARGB8_PREMULTIPLIED;
42+ } else if (g_strcmp0 (pixel_type_override, " ABGR8_PREMULTIPLIED" ) == 0 ) {
43+ return CHAFA_PIXEL_ABGR8_PREMULTIPLIED;
44+ }
45+ return CHAFA_PIXEL_MAX; // No override
46+
47+ }
48+
49+ static const auto default_symbol_tags = CHAFA_SYMBOL_TAG_ALL;
50+
51+ static ChafaSymbolTags get_chafa_symbol_tags (gchar** envp) {
52+ auto symbol_tags_override = g_getenv (" TERM_EVERYTHING_SYMBOLS" );
53+ if (symbol_tags_override == nullptr ) {
54+ return default_symbol_tags; // No override
55+ }
56+
57+ if (g_strcmp0 (symbol_tags_override, " NONE" ) == 0 ) {
58+ return CHAFA_SYMBOL_TAG_NONE;
59+ } else if (g_strcmp0 (symbol_tags_override, " SPACE" ) == 0 ) {
60+ return CHAFA_SYMBOL_TAG_SPACE;
61+ } else if (g_strcmp0 (symbol_tags_override, " SOLID" ) == 0 ) {
62+ return CHAFA_SYMBOL_TAG_SOLID;
63+ } else if (g_strcmp0 (symbol_tags_override, " STIPPLE" ) == 0 ) {
64+ return CHAFA_SYMBOL_TAG_STIPPLE;
65+ } else if (g_strcmp0 (symbol_tags_override, " BLOCK" ) == 0 ) {
66+ return CHAFA_SYMBOL_TAG_BLOCK;
67+ } else if (g_strcmp0 (symbol_tags_override, " BORDER" ) == 0 ) {
68+ return CHAFA_SYMBOL_TAG_BORDER;
69+ } else if (g_strcmp0 (symbol_tags_override, " DIAGONAL" ) == 0 ) {
70+ return CHAFA_SYMBOL_TAG_DIAGONAL;
71+ } else if (g_strcmp0 (symbol_tags_override, " DOT" ) == 0 ) {
72+ return CHAFA_SYMBOL_TAG_DOT;
73+ } else if (g_strcmp0 (symbol_tags_override, " QUAD" ) == 0 ) {
74+ return CHAFA_SYMBOL_TAG_QUAD;
75+ } else if (g_strcmp0 (symbol_tags_override, " HHALF" ) == 0 ) {
76+ return CHAFA_SYMBOL_TAG_HHALF;
77+ } else if (g_strcmp0 (symbol_tags_override, " VHALF" ) == 0 ) {
78+ return CHAFA_SYMBOL_TAG_VHALF;
79+ } else if (g_strcmp0 (symbol_tags_override, " HALF" ) == 0 ) {
80+ return CHAFA_SYMBOL_TAG_HALF;
81+ } else if (g_strcmp0 (symbol_tags_override, " INVERTED" ) == 0 ) {
82+ return CHAFA_SYMBOL_TAG_INVERTED;
83+ } else if (g_strcmp0 (symbol_tags_override, " BRAILLE" ) == 0 ) {
84+ return CHAFA_SYMBOL_TAG_BRAILLE;
85+ } else if (g_strcmp0 (symbol_tags_override, " TECHNICAL" ) == 0 ) {
86+ return CHAFA_SYMBOL_TAG_TECHNICAL;
87+ } else if (g_strcmp0 (symbol_tags_override, " GEOMETRIC" ) == 0 ) {
88+ return CHAFA_SYMBOL_TAG_GEOMETRIC;
89+ } else if (g_strcmp0 (symbol_tags_override, " ASCII" ) == 0 ) {
90+ return CHAFA_SYMBOL_TAG_ASCII;
91+ } else if (g_strcmp0 (symbol_tags_override, " ALPHA" ) == 0 ) {
92+ return CHAFA_SYMBOL_TAG_ALPHA;
93+ } else if (g_strcmp0 (symbol_tags_override, " DIGIT" ) == 0 ) {
94+ return CHAFA_SYMBOL_TAG_DIGIT;
95+ } else if (g_strcmp0 (symbol_tags_override, " ALNUM" ) == 0 ) {
96+ return CHAFA_SYMBOL_TAG_ALNUM;
97+ } else if (g_strcmp0 (symbol_tags_override, " NARROW" ) == 0 ) {
98+ return CHAFA_SYMBOL_TAG_NARROW;
99+ } else if (g_strcmp0 (symbol_tags_override, " WIDE" ) == 0 ) {
100+ return CHAFA_SYMBOL_TAG_WIDE;
101+ } else if (g_strcmp0 (symbol_tags_override, " AMBIGUOUS" ) == 0 ) {
102+ return CHAFA_SYMBOL_TAG_AMBIGUOUS;
103+ } else if (g_strcmp0 (symbol_tags_override, " UGLY" ) == 0 ) {
104+ return CHAFA_SYMBOL_TAG_UGLY;
105+ } else if (g_strcmp0 (symbol_tags_override, " LEGACY" ) == 0 ) {
106+ return CHAFA_SYMBOL_TAG_LEGACY;
107+ } else if (g_strcmp0 (symbol_tags_override, " SEXTANT" ) == 0 ) {
108+ return CHAFA_SYMBOL_TAG_SEXTANT;
109+ } else if (g_strcmp0 (symbol_tags_override, " WEDGE" ) == 0 ) {
110+ return CHAFA_SYMBOL_TAG_WEDGE;
111+ } else if (g_strcmp0 (symbol_tags_override, " LATIN" ) == 0 ) {
112+ return CHAFA_SYMBOL_TAG_LATIN;
113+ } else if (g_strcmp0 (symbol_tags_override, " IMPORTED" ) == 0 ) {
114+ return CHAFA_SYMBOL_TAG_IMPORTED;
115+ } else if (g_strcmp0 (symbol_tags_override, " OCTANT" ) == 0 ) {
116+ return CHAFA_SYMBOL_TAG_OCTANT;
117+ } else if (g_strcmp0 (symbol_tags_override, " ALL" ) == 0 ) {
118+ return CHAFA_SYMBOL_TAG_ALL;
119+ }
120+ return default_symbol_tags; // No override
121+ }
122+
23123ChafaInfo::ChafaInfo (gint width_cells,
24124 gint height_cells,
25125 gint width_of_a_cell_in_pixels,
@@ -32,13 +132,14 @@ ChafaInfo::ChafaInfo(gint width_cells,
32132{
33133 {
34134 detect_terminal (&term_info, &mode, &pixel_mode);
135+ auto envp = g_get_environ ();
35136
36137 /* Specify the symbols we want */
37138
38139 symbol_map = chafa_symbol_map_new ();
39140 // chafa_symbol_map_add_by_tags(symbol_map, CHAFA_SYMBOL_TAG_BLOCK);
40141 // chafa_symbol_map_add_by_tags(symbol_map, CHAFA_SYMBOL_TAG_ASCII);
41- chafa_symbol_map_add_by_tags (symbol_map, CHAFA_SYMBOL_TAG_ALL );
142+ chafa_symbol_map_add_by_tags (symbol_map, get_chafa_symbol_tags (envp) );
42143
43144 /* Set up a configuration with the symbols and the canvas size in characters */
44145
@@ -60,7 +161,25 @@ ChafaInfo::ChafaInfo(gint width_cells,
60161 }
61162
62163 canvas = chafa_canvas_new (config);
164+
165+ this ->pixel_type_override = get_chafa_pixel_type (envp);
166+
167+ g_strfreev (envp);
168+ }
169+ }
170+
171+ ChafaPixelType ChafaInfo::get_pixel_type ()
172+ {
173+ if (pixel_type_override != CHAFA_PIXEL_MAX)
174+ {
175+ return pixel_type_override;
176+ }
177+
178+ if (pixel_mode == CHAFA_PIXEL_MODE_KITTY && !session_type_is_x11)
179+ {
180+ return CHAFA_PIXEL_RGBA8_UNASSOCIATED;
63181 }
182+ return CHAFA_PIXEL_BGRA8_UNASSOCIATED;
64183}
65184
66185ChafaInfo::~ChafaInfo ()
0 commit comments