From e59072948b6b98844e1cb690b0605e142b0dd8bc Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Fri, 21 Jun 2019 18:00:13 +0200 Subject: dark mode --- connect.c | 2 +- domain.c | 5 +++-- vconsole.c | 21 +++++++++++++++++++++ vconsole.h | 1 + 4 files changed, 26 insertions(+), 3 deletions(-) diff --git a/connect.c b/connect.c index 5af71ed..d165535 100644 --- a/connect.c +++ b/connect.c @@ -156,7 +156,7 @@ struct vconsole_connect *connect_init(struct vconsole_window *win, NAME_COL, name, TYPE_COL, type, URI_COL, uri, - FOREGROUND_COL, "black", + FOREGROUND_COL, win->darkmode ? "white" : "black", WEIGHT_COL, PANGO_WEIGHT_NORMAL, -1); diff --git a/domain.c b/domain.c index c5ead3b..3a1faad 100644 --- a/domain.c +++ b/domain.c @@ -326,6 +326,7 @@ static int domain_update_info(struct vconsole_domain *dom, virDomainPtr d) static void domain_update_tree_store(struct vconsole_domain *dom, GtkTreeIter *guest) { + bool darkmode = dom->conn->win->darkmode; const char *foreground; char load[16], mem[16]; PangoWeight weight; @@ -333,11 +334,11 @@ static void domain_update_tree_store(struct vconsole_domain *dom, switch (dom->info.state) { case VIR_DOMAIN_RUNNING: - foreground = "darkgreen"; + foreground = darkmode ? "lightgreen" : "darkgreen"; weight = PANGO_WEIGHT_BOLD; break; default: - foreground = "black"; + foreground = darkmode ? "white" : "black"; weight = PANGO_WEIGHT_NORMAL; break; } diff --git a/vconsole.c b/vconsole.c index 28e187a..e8c0088 100644 --- a/vconsole.c +++ b/vconsole.c @@ -1080,6 +1080,26 @@ static gboolean vconsole_update(gpointer data) return TRUE; } +static void vconsole_check_darkmode(struct vconsole_window *win) +{ + GtkStyle *style; + gint fg, bg; + + style = gtk_widget_get_style(GTK_WIDGET(win->tree)); + fg = (style->text[GTK_STATE_NORMAL].red * 3 + + style->text[GTK_STATE_NORMAL].green * 6 + + style->text[GTK_STATE_NORMAL].blue); + bg = (style->bg[GTK_STATE_NORMAL].red * 3 + + style->bg[GTK_STATE_NORMAL].green * 6 + + style->bg[GTK_STATE_NORMAL].blue); + if (fg > bg) + win->darkmode = true; +#if 0 + fprintf(stderr, "%s: fg %d, bg %d, darkmode %s\n", + __func__, fg, bg, win->darkmode ? "yes" : "no"); +#endif +} + /* ------------------------------------------------------------------ */ static void usage(FILE *fp) @@ -1142,6 +1162,7 @@ main(int argc, char *argv[]) vconsole_tab_list_create(win); gtk_widget_show_all(win->toplevel); gtk_widget_grab_focus(win->notebook); + vconsole_check_darkmode(win); if (uri) connect_init(win, uri); diff --git a/vconsole.h b/vconsole.h index e01f372..17fabb2 100644 --- a/vconsole.h +++ b/vconsole.h @@ -70,6 +70,7 @@ struct vconsole_window { char *tty_fg; char *tty_bg; gboolean vm_logging; + gboolean darkmode; }; extern int debug; -- cgit