1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
/* Canvas for random-access procedural text art.
Copyright (C) 2023-2025 Free Software Foundation, Inc.
Contributed by David Malcolm <dmalcolm@redhat.com>.
This file is part of GCC.
GCC is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3, or (at your option)
any later version.
GCC is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING3. If not see
<http://www.gnu.org/licenses/>. */
#ifndef GCC_TEXT_ART_CANVAS_H
#define GCC_TEXT_ART_CANVAS_H
#include "text-art/types.h"
namespace text_art {
class canvas;
/* A 2 dimensional grid of text cells (a "canvas"), which
can be written to ("painted") via random access, and then
written out to a pretty_printer once the picture is complete.
Each text cell can be styled independently (colorization,
URLs, etc). */
class canvas
{
public:
typedef styled_unichar cell_t;
typedef size<class canvas> size_t;
typedef coord<class canvas> coord_t;
typedef range<class canvas> range_t;
typedef rect<class canvas> rect_t;
canvas (size_t size, const style_manager &style_mgr);
size_t get_size () const { return m_cells.get_size (); }
void paint (coord_t coord, cell_t c);
void paint_text (coord_t coord, const styled_string &text);
void fill (rect_t rect, cell_t c);
void debug_fill ();
void print_to_pp (pretty_printer *pp,
const char *per_line_prefix = NULL) const;
void debug (bool styled) const;
const cell_t &get (coord_t coord) const
{
return m_cells.get (coord);
}
private:
int get_final_x_in_row (int y) const;
array2<cell_t, size_t, coord_t> m_cells;
const style_manager &m_style_mgr;
};
} // namespace text_art
#endif /* GCC_TEXT_ART_CANVAS_H */
|