mirror of
https://github.com/rkd77/elinks.git
synced 2024-10-04 04:14:18 -04:00
60544f748e
instead of macros. Still problems with transparency in true color mode.
70 lines
2.1 KiB
C
70 lines
2.1 KiB
C
#ifndef EL__TERMINAL_COLOR_H
|
|
#define EL__TERMINAL_COLOR_H
|
|
|
|
struct color_pair;
|
|
struct screen_char;
|
|
|
|
/* Terminal color encoding: */
|
|
/* Below color pairs are encoded to terminal colors. Both the terminal fore-
|
|
* and background color are a number between 0 and 7. They are stored in an
|
|
* unsigned char as specified in the following bit sequence:
|
|
*
|
|
* 0bbb0fff (f = foreground, b = background)
|
|
*/
|
|
|
|
#define TERM_COLOR_MASK 0x07
|
|
|
|
#if defined(CONFIG_88_COLORS) || defined(CONFIG_256_COLORS)
|
|
#define TERM_COLOR_FOREGROUND(color) ((color)[0])
|
|
#define TERM_COLOR_BACKGROUND(color) ((color)[1])
|
|
#endif
|
|
#define TERM_COLOR_FOREGROUND_16(color) ((color)[0] & TERM_COLOR_MASK)
|
|
#define TERM_COLOR_BACKGROUND_16(color) (((color)[0] >> 4) & TERM_COLOR_MASK)
|
|
|
|
/* Bit flags to control how the colors are handled. */
|
|
enum color_flags {
|
|
/* Use a decreased color range. */
|
|
COLOR_DECREASE_LIGHTNESS = 1,
|
|
|
|
/* Mangle the color to stand out if attributes like underline are set.
|
|
* Useful for terminals that doesn't support these attributes. */
|
|
COLOR_ENHANCE_UNDERLINE = 2,
|
|
|
|
/* Adjust the forground color to be more readable by increasing the
|
|
* contrast. */
|
|
COLOR_INCREASE_CONTRAST = 4,
|
|
|
|
/* Adjust the contrast if the back- and foregroundcolor is equal.
|
|
* If inverting should be done also pass the latter flag. */
|
|
COLOR_ENSURE_CONTRAST = 8,
|
|
COLOR_ENSURE_INVERTED_CONTRAST = 16,
|
|
};
|
|
|
|
enum color_mode {
|
|
COLOR_MODE_DUMP = -1,
|
|
COLOR_MODE_MONO,
|
|
COLOR_MODE_16,
|
|
#ifdef CONFIG_88_COLORS
|
|
COLOR_MODE_88,
|
|
#endif
|
|
#ifdef CONFIG_256_COLORS
|
|
COLOR_MODE_256,
|
|
#endif
|
|
#ifdef CONFIG_TRUE_COLOR
|
|
COLOR_MODE_TRUE_COLOR,
|
|
#endif
|
|
COLOR_MODES, /* XXX: Keep last */
|
|
};
|
|
|
|
inline void set_term_color16(struct screen_char *schar, enum color_flags flags,
|
|
unsigned char fg, unsigned char bg);
|
|
|
|
/* Mixes the color pair and attributes to a terminal text color. */
|
|
/* If @flags has masked in the COLOR_INCREASE_CONTRAST the foreground color will
|
|
* be adjusted. */
|
|
/* XXX: @schar may not be NULL and is modified adding stuff like boldness. */
|
|
void set_term_color(struct screen_char *schar, struct color_pair *pair,
|
|
enum color_flags flags, enum color_mode mode);
|
|
|
|
#endif
|