summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRay Strode <rstrode@redhat.com>2008-06-25 17:47:59 -0400
committerRay Strode <rstrode@redhat.com>2008-06-25 17:47:59 -0400
commit19c8002f9c2f256033b00b094f3ae1ec1deb526d (patch)
tree32afb47a35f66546a708584f0d0f8c5ca458f242
parenta33a76fc145c35e2407a90ab7f4efbf5f99ddd01 (diff)
downloadplymouth-19c8002f9c2f256033b00b094f3ae1ec1deb526d.tar.gz
plymouth-19c8002f9c2f256033b00b094f3ae1ec1deb526d.tar.xz
plymouth-19c8002f9c2f256033b00b094f3ae1ec1deb526d.zip
add new apis to set foreground and background colors in text mode
-rw-r--r--src/libplybootsplash/ply-window.c56
-rw-r--r--src/libplybootsplash/ply-window.h20
2 files changed, 76 insertions, 0 deletions
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;
@@ -485,6 +499,48 @@ ply_window_clear_screen (ply_window_t *window)
}
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)
{
write (window->tty_fd, HIDE_CURSOR_SEQUENCE, strlen (HIDE_CURSOR_SEQUENCE));
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);