aboutsummaryrefslogtreecommitdiff
path: root/src/engine/graphics/component_renderer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine/graphics/component_renderer.cpp')
-rw-r--r--src/engine/graphics/component_renderer.cpp50
1 files changed, 40 insertions, 10 deletions
diff --git a/src/engine/graphics/component_renderer.cpp b/src/engine/graphics/component_renderer.cpp
index 1ab4c08..eb024bc 100644
--- a/src/engine/graphics/component_renderer.cpp
+++ b/src/engine/graphics/component_renderer.cpp
@@ -23,21 +23,39 @@ void ComponentRenderer::render(
_cursor_controller->hide();
_cursor_controller->move_to(position);
- const auto component_matrix = component->get();
-
- const auto foreground_color = component->get_foreground_color();
- const auto background_color = component->get_background_color();
+ _use_component_colors(component);
- fmt::print(
- "{}{}",
- get_background_esc_seq(background_color),
- get_foreground_esc_seq(foreground_color));
+ const auto component_matrix = component->get();
for (const auto &row : *component_matrix)
{
- for (const auto &col : row)
+ for (const auto &element : row)
{
- std::cout.put(col);
+ if (element.style.reset_before)
+ {
+ fmt::print(RESET_ALL_MODES, fmt::arg("esc", ESC));
+ _use_component_colors(component);
+ }
+
+ const auto opt_element_fg_color = element.style.fg_color;
+ const auto opt_element_bg_color = element.style.bg_color;
+
+ if (opt_element_fg_color.has_value())
+ {
+ fmt::print("{}", get_foreground_esc_seq(opt_element_fg_color.value()));
+ }
+
+ if (opt_element_bg_color.has_value())
+ {
+ fmt::print("{}", get_background_esc_seq(opt_element_bg_color.value()));
+ }
+
+ if (element.style.bold)
+ {
+ fmt::print(SET_BOLD_MODE, fmt::arg("esc", ESC));
+ }
+
+ std::cout.put(element.value);
}
const auto current_pos = _cursor_controller->where();
@@ -53,3 +71,15 @@ void ComponentRenderer::render(
_cursor_controller->move_to(previous_pos);
_cursor_controller->show();
}
+
+void ComponentRenderer::_use_component_colors(
+ const std::shared_ptr<IComponent> &component) noexcept
+{
+ const auto foreground_color = component->get_foreground_color();
+ const auto background_color = component->get_background_color();
+
+ fmt::print(
+ "{}{}",
+ get_background_esc_seq(background_color),
+ get_foreground_esc_seq(foreground_color));
+}