mirror of
https://github.com/ipxe/ipxe
synced 2025-12-25 00:17:57 +03:00
[console] Add concept of a "magic" colour
The magic basic colour can be remapped at runtime from COLOR_NORMAL_BG (usually blue) to COLOR_DEFAULT (which will be transparent as a background colour on the framebuffer console). Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
@@ -86,9 +86,14 @@ FILE_LICENCE ( GPL2_OR_LATER );
|
||||
* @v basic Basic colour
|
||||
* @ret ansicol ANSI colour definition
|
||||
*
|
||||
* Colours default to being just a basic colour.
|
||||
* Colours default to being just a basic colour. If the colour
|
||||
* matches the normal UI text background colour, then its basic colour
|
||||
* value is set to @c ANSICOL_MAGIC.
|
||||
*/
|
||||
#define ANSICOL_DEFAULT( basic ) ANSICOL_DEFINE ( (basic), ANSICOL_NO_RGB )
|
||||
#define ANSICOL_DEFAULT( basic ) \
|
||||
ANSICOL_DEFINE ( ( ( (basic) == COLOR_NORMAL_BG ) ? \
|
||||
ANSICOL_MAGIC : (basic) ), \
|
||||
ANSICOL_NO_RGB )
|
||||
|
||||
/** ANSI colour definitions */
|
||||
static uint32_t ansicols[] = {
|
||||
@@ -102,6 +107,9 @@ static uint32_t ansicols[] = {
|
||||
[COLOR_WHITE] = ANSICOL_DEFAULT ( COLOR_WHITE ),
|
||||
};
|
||||
|
||||
/** Magic basic colour */
|
||||
static uint8_t ansicol_magic = COLOR_NORMAL_BG;
|
||||
|
||||
/**
|
||||
* Define ANSI colour
|
||||
*
|
||||
@@ -145,10 +153,10 @@ void ansicol_set ( unsigned int colour, unsigned int which ) {
|
||||
ansicol = ANSICOL_DEFINE ( COLOUR_DEFAULT, ANSICOL_NO_RGB );
|
||||
}
|
||||
|
||||
/* If basic colour is out of range, use the default colour */
|
||||
/* If basic colour is out of range, use the magic colour */
|
||||
basic = ANSICOL_BASIC ( ansicol );
|
||||
if ( basic >= 10 )
|
||||
basic = COLOR_DEFAULT;
|
||||
basic = ansicol_magic;
|
||||
|
||||
/* Set basic colour first */
|
||||
printf ( CSI "%c%dm", which, basic );
|
||||
@@ -159,3 +167,25 @@ void ansicol_set ( unsigned int colour, unsigned int which ) {
|
||||
ANSICOL_GREEN ( ansicol ), ANSICOL_BLUE ( ansicol ) );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Reset magic colour
|
||||
*
|
||||
*/
|
||||
void ansicol_reset_magic ( void ) {
|
||||
|
||||
/* Set to the compile-time default background colour */
|
||||
ansicol_magic = COLOR_NORMAL_BG;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set magic colour to transparent
|
||||
*
|
||||
*/
|
||||
void ansicol_set_magic_transparent ( void ) {
|
||||
|
||||
/* Set to the console default colour (which will give a
|
||||
* transparent background on the framebuffer console).
|
||||
*/
|
||||
ansicol_magic = COLOR_DEFAULT;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user