aboutsummaryrefslogtreecommitdiff
path: root/src/engine/graphics
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine/graphics')
-rw-r--r--src/engine/graphics/component_renderer.cpp50
-rw-r--r--src/engine/graphics/component_renderer.hpp5
2 files changed, 45 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));
+}
diff --git a/src/engine/graphics/component_renderer.hpp b/src/engine/graphics/component_renderer.hpp
index 4f53e07..ff1bc47 100644
--- a/src/engine/graphics/component_renderer.hpp
+++ b/src/engine/graphics/component_renderer.hpp
@@ -8,6 +8,8 @@
#include <memory>
+constexpr auto SET_BOLD_MODE = "{esc}[1m";
+
class ComponentRenderer : public IComponentRenderer
{
public:
@@ -20,4 +22,7 @@ public:
private:
std::shared_ptr<ICursorController> _cursor_controller;
+
+ static void
+ _use_component_colors(const std::shared_ptr<IComponent> &component) noexcept;
};