From c1d2388c76e856906460b57119b408ca8617f1e0 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Fri, 8 Jun 2018 16:52:46 +0200 Subject: [PATCH] terminal: make background color configurable --- repos/gems/src/server/terminal/color_palette.h | 9 +++++++++ repos/gems/src/server/terminal/main.cc | 2 ++ repos/gems/src/server/terminal/text_screen_surface.h | 6 +++++- 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/repos/gems/src/server/terminal/color_palette.h b/repos/gems/src/server/terminal/color_palette.h index aa2e266720..f8bad17c3d 100644 --- a/repos/gems/src/server/terminal/color_palette.h +++ b/repos/gems/src/server/terminal/color_palette.h @@ -61,6 +61,15 @@ class Terminal::Color_palette } } + void apply_config(Xml_node config) + { + config.for_each_sub_node("color", [&] (Xml_node color) { + unsigned const index = min(color.attribute_value("index", 0U), 15U); + Color const bg = color.attribute_value("bg", Color()); + _colors[index] = bg; + }); + } + Color foreground(Index index, Highlighted highlighted, Inverse inverse) const { if (index.value >= NUM_COLORS/2) diff --git a/repos/gems/src/server/terminal/main.cc b/repos/gems/src/server/terminal/main.cc index 75349af1ae..9193fd6018 100644 --- a/repos/gems/src/server/terminal/main.cc +++ b/repos/gems/src/server/terminal/main.cc @@ -159,6 +159,8 @@ void Terminal::Main::_handle_config() Xml_node const config = _config.xml(); + _color_palette.apply_config(config); + _font.destruct(); _root_dir.apply_config(config.sub_node("vfs")); diff --git a/repos/gems/src/server/terminal/text_screen_surface.h b/repos/gems/src/server/terminal/text_screen_surface.h index c1205c1983..1eb98cf1f7 100644 --- a/repos/gems/src/server/terminal/text_screen_surface.h +++ b/repos/gems/src/server/terminal/text_screen_surface.h @@ -175,11 +175,15 @@ class Terminal::Text_screen_surface /* clear border */ { + Color const bg_color = + _palette.background(Color_palette::Index{0}, + Color_palette::Highlighted{false}, + Color_palette::Inverse{false}); Rect r[4] { }; Rect const all(Point(0, 0), _geometry.fb_size); _geometry.fb_rect().cut(_geometry.used_rect(), &r[0], &r[1], &r[2], &r[3]); for (unsigned i = 0; i < 4; i++) - Box_painter::paint(surface, r[i], Color(0, 0, 0)); + Box_painter::paint(surface, r[i], bg_color); } int const clip_top = 0, clip_bottom = _geometry.fb_size.h(),