From 19c8002f9c2f256033b00b094f3ae1ec1deb526d Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Wed, 25 Jun 2008 17:47:59 -0400 Subject: add new apis to set foreground and background colors in text mode --- src/libplybootsplash/ply-window.c | 56 +++++++++++++++++++++++++++++++++++++++ src/libplybootsplash/ply-window.h | 20 ++++++++++++++ 2 files changed, 76 insertions(+) diff --git a/src/libplybootsplash/ply-window.c b/src/libplybootsplash/ply-window.c index adb57d1..1e1f8c0 100644 --- a/src/libplybootsplash/ply-window.c +++ b/src/libplybootsplash/ply-window.c @@ -69,6 +69,18 @@ #define SHOW_CURSOR_SEQUENCE "\033[?25h" #endif +#ifndef COLOR_SEQUENCE_FORMAT +#define COLOR_SEQUENCE_FORMAT "\033[%dm" +#endif + +#ifndef FOREGROUND_COLOR_BASE +#define FOREGROUND_COLOR_BASE 30 +#endif + +#ifndef BACKGROUND_COLOR_BASE +#define BACKGROUND_COLOR_BASE 40 +#endif + struct _ply_window { ply_event_loop_t *loop; @@ -85,6 +97,8 @@ struct _ply_window ply_fd_watch_t *tty_fd_watch; ply_window_mode_t mode; + ply_window_color_t foreground_color; + ply_window_color_t background_color; int number_of_text_rows; int number_of_text_columns; @@ -484,6 +498,48 @@ ply_window_clear_screen (ply_window_t *window) ply_frame_buffer_fill_with_color (window->frame_buffer, NULL, 0.0, 0.0, 0.0, 1.0); } +void +ply_window_set_background_color (ply_window_t *window, + ply_window_color_t color) +{ + char *sequence; + + sequence = NULL; + asprintf (&sequence, COLOR_SEQUENCE_FORMAT, + BACKGROUND_COLOR_BASE + color); + write (window->tty_fd, sequence, strlen (sequence)); + free (sequence); + + window->background_color = color; +} + +void +ply_window_set_foreground_color (ply_window_t *window, + ply_window_color_t color) +{ + char *sequence; + + sequence = NULL; + asprintf (&sequence, COLOR_SEQUENCE_FORMAT, + FOREGROUND_COLOR_BASE + color); + write (window->tty_fd, sequence, strlen (sequence)); + free (sequence); + + window->foreground_color = color; +} + +ply_window_color_t +ply_window_get_background_color (ply_window_t *window) +{ + return window->background_color; +} + +ply_window_color_t +ply_window_get_foreground_color (ply_window_t *window) +{ + return window->foreground_color; +} + void ply_window_hide_text_cursor (ply_window_t *window) { diff --git a/src/libplybootsplash/ply-window.h b/src/libplybootsplash/ply-window.h index 65bd7ba..3d2c51f 100644 --- a/src/libplybootsplash/ply-window.h +++ b/src/libplybootsplash/ply-window.h @@ -48,6 +48,19 @@ typedef enum PLY_WINDOW_MODE_GRAPHICS } ply_window_mode_t; +typedef enum +{ + PLY_WINDOW_COLOR_BLACK = 0, + PLY_WINDOW_COLOR_RED, + PLY_WINDOW_COLOR_GREEN, + PLY_WINDOW_COLOR_BROWN, + PLY_WINDOW_COLOR_BLUE, + PLY_WINDOW_COLOR_MAGENTA, + PLY_WINDOW_COLOR_CYAN, + PLY_WINDOW_COLOR_WHITE, + PLY_WINDOW_COLOR_DEFAULT = PLY_WINDOW_COLOR_WHITE + 2 +} ply_window_color_t; + #ifndef PLY_HIDE_FUNCTION_DECLARATIONS ply_window_t *ply_window_new (int vt_number); void ply_window_free (ply_window_t *window); @@ -80,6 +93,13 @@ void ply_window_set_text_cursor_position (ply_window_t *window, void ply_window_hide_text_cursor (ply_window_t *window); void ply_window_show_text_cursor (ply_window_t *window); void ply_window_clear_screen (ply_window_t *window); +void ply_window_set_background_color (ply_window_t *window, + ply_window_color_t color); +void ply_window_set_foreground_color (ply_window_t *window, + ply_window_color_t color); + +ply_window_color_t ply_window_get_background_color (ply_window_t *window); +ply_window_color_t ply_window_get_foreground_color (ply_window_t *window); void ply_window_attach_to_event_loop (ply_window_t *window, ply_event_loop_t *loop); -- cgit