ttx 0.1.0
Loading...
Searching...
No Matches
renderer.h
Go to the documentation of this file.
1#pragma once
2
3#include "di/container/string/string_view.h"
4#include "di/util/scope_exit.h"
5#include "dius/sync_file.h"
6#include "ttx/cursor_style.h"
7#include "ttx/features.h"
8#include "ttx/size.h"
14#include "ttx/terminal/screen.h"
15
16namespace ttx {
18 u32 cursor_row { 0 };
19 u32 cursor_col { 0 };
23 bool hidden { false };
24
25 auto operator==(RenderedCursor const&) const -> bool = default;
26};
27
28class Renderer {
29public:
31 : m_current_screen({ 24, 80 }, terminal::Screen::ScrollBackEnabled::No)
32 , m_desired_screen({ 24, 80 }, terminal::Screen::ScrollBackEnabled::No) {}
33
34 auto setup(dius::SyncFile& output, Feature features) -> di::Result<>;
35 auto cleanup(dius::SyncFile& output) -> di::Result<>;
36
37 void start(Size const& size, terminal::Palette const& outer_terminal_palette);
38 auto finish(dius::SyncFile& output, RenderedCursor const& cursor_in, di::Optional<di::String> window_title,
39 di::Optional<terminal::Color> bg_color) -> di::Result<>;
40
42
43 void put_text(di::StringView text, u32 row, u32 col, terminal::GraphicsRendition const& rendition = {},
44 di::Optional<terminal::Hyperlink const&> hyperlink = {});
45 void put_text(c32 text, u32 row, u32 col, terminal::GraphicsRendition const& rendition = {},
46 di::Optional<terminal::Hyperlink const&> hyperlink = {});
47
48 void put_cell(di::StringView text, u32 row, u32 col, terminal::GraphicsRendition const& rendition,
49 di::Optional<terminal::Hyperlink const&> hyperlink, terminal::MultiCellInfo const& multi_cell_info,
50 bool explicitly_sized, bool complex_grapheme_cluster);
51
52 void clear_row(u32 row, terminal::GraphicsRendition const& graphics_rendition = {},
53 di::Optional<terminal::Hyperlink const&> hyperlink = {});
54
55 void set_bound(u32 row, u32 col, u32 width, u32 height);
56
57 [[nodiscard]] auto set_local_palette(terminal::Palette const& palette) -> di::ScopeExit<di::Function<void()>> {
58 m_local_palette = palette;
59 return di::ScopeExit(di::make_function<void()>([this] {
61 }));
62 }
63 void reset_local_palette() { m_local_palette = {}; }
64
65 [[nodiscard]] auto set_global_palette(terminal::Palette const& palette) -> di::ScopeExit<di::Function<void()>> {
66 m_global_palette = palette;
67 return di::ScopeExit(di::make_function<void()>([this] {
69 }));
70 }
71 void reset_global_palette() { m_global_palette = {}; }
72
73 [[nodiscard]] auto set_dim_factor(u32 dim_factor) -> di::ScopeExit<di::Function<void()>> {
74 auto original_dim_factor = m_dim_factor;
75 m_dim_factor = dim_factor;
76 return di::ScopeExit(di::make_function<void()>([this, original_dim_factor] {
77 m_dim_factor = original_dim_factor;
78 }));
79 }
80 void reset_dim_factor() { m_dim_factor = 0; }
81
86 auto resolve_cursor_color() const -> terminal::Color;
88 auto dimmed(terminal::Color color) const -> terminal::Color;
89
90private:
91 auto size() const -> Size { return m_current_screen.size(); }
92
93 auto resolve_rendition(terminal::GraphicsRendition const& rendition) const -> terminal::GraphicsRendition;
94
95 terminal::Screen m_current_screen;
96 terminal::Screen m_desired_screen;
97 di::Optional<RenderedCursor> m_current_cursor;
98 di::Optional<terminal::Color> m_bg_color;
99 di::Optional<di::String> m_window_title;
100 di::Vector<di::String> m_cleanup;
101 Feature m_features { Feature::None };
102 di::Optional<terminal::Palette const&> m_global_palette;
103 di::Optional<terminal::Palette const&> m_local_palette;
104 di::Optional<terminal::Palette const&> m_outer_terminal_palette;
105
106 u32 m_row_offset { 0 };
107 u32 m_col_offset { 0 };
108 u32 m_bound_width { 0 };
109 u32 m_bound_height { 0 };
110 u32 m_dim_factor { 0 };
111 bool m_size_changed { true };
112};
113}
void flush_palette_color_state()
Definition renderer.cpp:136
void put_text(di::StringView text, u32 row, u32 col, terminal::GraphicsRendition const &rendition={}, di::Optional< terminal::Hyperlink const & > hyperlink={})
Definition renderer.cpp:646
Renderer()
Definition renderer.h:30
void reset_global_palette()
Definition renderer.h:71
auto set_global_palette(terminal::Palette const &palette) -> di::ScopeExit< di::Function< void()> >
Definition renderer.h:65
void put_cell(di::StringView text, u32 row, u32 col, terminal::GraphicsRendition const &rendition, di::Optional< terminal::Hyperlink const & > hyperlink, terminal::MultiCellInfo const &multi_cell_info, bool explicitly_sized, bool complex_grapheme_cluster)
Definition renderer.cpp:675
auto resolve_background(terminal::Color color) const -> terminal::Color
Definition renderer.cpp:762
void start(Size const &size, terminal::Palette const &outer_terminal_palette)
Definition renderer.cpp:144
void reset_dim_factor()
Definition renderer.h:80
auto cleanup(dius::SyncFile &output) -> di::Result<>
Definition renderer.cpp:125
void set_bound(u32 row, u32 col, u32 width, u32 height)
Definition renderer.cpp:714
auto dimmed(terminal::Color color) const -> terminal::Color
Definition renderer.cpp:793
auto resolve_color(terminal::PaletteIndex index) const -> terminal::Color
Definition renderer.cpp:731
void reset_local_palette()
Definition renderer.h:63
auto set_local_palette(terminal::Palette const &palette) -> di::ScopeExit< di::Function< void()> >
Definition renderer.h:57
auto finish(dius::SyncFile &output, RenderedCursor const &cursor_in, di::Optional< di::String > window_title, di::Optional< terminal::Color > bg_color) -> di::Result<>
Definition renderer.cpp:385
auto resolve_cursor_text_color() const -> terminal::Color
Definition renderer.cpp:785
auto set_dim_factor(u32 dim_factor) -> di::ScopeExit< di::Function< void()> >
Definition renderer.h:73
auto setup(dius::SyncFile &output, Feature features) -> di::Result<>
Definition renderer.cpp:31
auto resolve_cursor_color() const -> terminal::Color
Definition renderer.cpp:777
void clear_row(u32 row, terminal::GraphicsRendition const &graphics_rendition={}, di::Optional< terminal::Hyperlink const & > hyperlink={})
Definition renderer.cpp:702
auto resolve_foreground(terminal::Color color) const -> terminal::Color
Definition renderer.cpp:752
Definition palette.h:69
auto size() const -> Size const &
Definition screen.h:80
Definition absolute_position.h:6
PaletteIndex
Extended palette index which includes dynamic colors.
Definition palette.h:27
Definition clipboard.h:10
CursorStyle
Definition cursor_style.h:6
@ SteadyBlock
Definition cursor_style.h:8
Feature
Definition features.h:9
@ None
Definition features.h:10
Definition renderer.h:17
CursorStyle style
Definition renderer.h:20
bool hidden
Definition renderer.h:23
terminal::Color text_color
Definition renderer.h:22
u32 cursor_row
Definition renderer.h:18
auto operator==(RenderedCursor const &) const -> bool=default
terminal::Color color
Definition renderer.h:21
u32 cursor_col
Definition renderer.h:19
Definition size.h:7
Definition color.h:10