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