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 "dius/sync_file.h"
5#include "ttx/clipboard.h"
6#include "ttx/cursor_style.h"
7#include "ttx/features.h"
9#include "ttx/size.h"
12#include "ttx/terminal/screen.h"
13
14namespace ttx {
16 u32 cursor_row { 0 };
17 u32 cursor_col { 0 };
19 bool hidden { false };
20
21 auto operator==(RenderedCursor const&) const -> bool = default;
22};
23
24class Renderer {
25public:
27 : m_current_screen({ 24, 80 }, terminal::Screen::ScrollBackEnabled::No)
28 , m_desired_screen({ 24, 80 }, terminal::Screen::ScrollBackEnabled::No) {}
29
30 auto setup(dius::SyncFile& output, Feature features, ClipboardMode clipboard_mode) -> di::Result<>;
31 auto cleanup(dius::SyncFile& output) -> di::Result<>;
32
33 void start(Size const& size);
34 auto finish(dius::SyncFile& output, RenderedCursor const& cursor_in) -> di::Result<>;
35
36 void put_text(di::StringView text, u32 row, u32 col, GraphicsRendition const& rendition = {},
37 di::Optional<terminal::Hyperlink const&> hyperlink = {});
38 void put_text(c32 text, u32 row, u32 col, GraphicsRendition const& rendition = {},
39 di::Optional<terminal::Hyperlink const&> hyperlink = {});
40
41 void put_cell(di::StringView text, u32 row, u32 col, GraphicsRendition const& rendition,
42 di::Optional<terminal::Hyperlink const&> hyperlink, terminal::MultiCellInfo const& multi_cell_info,
43 bool explicitly_sized, bool complex_grapheme_cluster);
44
45 void clear_row(u32 row, GraphicsRendition const& graphics_rendition = {},
46 di::Optional<terminal::Hyperlink const&> hyperlink = {});
47
48 void set_bound(u32 row, u32 col, u32 width, u32 height);
49
50private:
51 auto size() const -> Size { return m_current_screen.size(); }
52
53 terminal::Screen m_current_screen;
54 terminal::Screen m_desired_screen;
55 di::Optional<RenderedCursor> m_current_cursor;
56 di::Vector<di::String> m_cleanup;
57 Feature m_features { Feature::None };
58
59 u32 m_row_offset { 0 };
60 u32 m_col_offset { 0 };
61 u32 m_bound_width { 0 };
62 u32 m_bound_height { 0 };
63 bool m_size_changed { true };
64};
65}
Renderer()
Definition renderer.h:26
auto setup(dius::SyncFile &output, Feature features, ClipboardMode clipboard_mode) -> di::Result<>
Definition renderer.cpp:26
void put_cell(di::StringView text, u32 row, u32 col, 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:582
auto cleanup(dius::SyncFile &output) -> di::Result<>
Definition renderer.cpp:93
void set_bound(u32 row, u32 col, u32 width, u32 height)
Definition renderer.cpp:618
auto finish(dius::SyncFile &output, RenderedCursor const &cursor_in) -> di::Result<>
Definition renderer.cpp:341
void put_text(di::StringView text, u32 row, u32 col, GraphicsRendition const &rendition={}, di::Optional< terminal::Hyperlink const & > hyperlink={})
Definition renderer.cpp:554
void start(Size const &size)
Definition renderer.cpp:104
void clear_row(u32 row, GraphicsRendition const &graphics_rendition={}, di::Optional< terminal::Hyperlink const & > hyperlink={})
Definition renderer.cpp:607
Definition clipboard.h:10
CursorStyle
Definition cursor_style.h:6
@ SteadyBlock
Definition cursor_style.h:8
Feature
Definition features.h:8
@ None
Definition features.h:9
ClipboardMode
Clipboard modes.
Definition clipboard.h:12
Definition renderer.h:15
CursorStyle style
Definition renderer.h:18
bool hidden
Definition renderer.h:19
u32 cursor_row
Definition renderer.h:16
auto operator==(RenderedCursor const &) const -> bool=default
u32 cursor_col
Definition renderer.h:17