3#include "di/container/string/string_view.h"
4#include "di/util/scope_exit.h"
5#include "dius/sync_file.h"
34 auto setup(dius::SyncFile& output,
Feature features) -> di::Result<>;
35 auto cleanup(dius::SyncFile& output) -> di::Result<>;
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<>;
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 = {});
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);
52 void clear_row(u32 row, terminal::GraphicsRendition
const& graphics_rendition = {},
53 di::Optional<terminal::Hyperlink const&> hyperlink = {});
55 void set_bound(u32 row, u32 col, u32 width, u32 height);
58 m_local_palette = palette;
59 return di::ScopeExit(di::make_function<
void()>([
this] {
66 m_global_palette = palette;
67 return di::ScopeExit(di::make_function<
void()>([
this] {
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;
91 auto size() const ->
Size {
return m_current_screen.
size(); }
93 auto resolve_rendition(terminal::GraphicsRendition
const& rendition)
const -> terminal::GraphicsRendition;
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;
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;
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 };
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
auto size() const -> Size const &
Definition screen.h:80
@ No
Definition screen.h:71
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
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