Photon 1.0.0
Loading...
Searching...
No Matches
table.h
Go to the documentation of this file.
1#ifndef LH_TABLE_H
2#define LH_TABLE_H
3
4#include <vector>
5#include <memory>
6#include "css_length.h"
7
8namespace litehtml
9{
10 class render_item;
11
12 struct table_row
13 {
14 using vector = std::vector<table_row>;
15
16 int height;
19 std::shared_ptr<render_item> el_row;
20 int top;
21 int bottom;
24
26 {
27 min_height = 0;
28 top = 0;
29 bottom = 0;
30 border_bottom = 0;
31 border_top = 0;
32 height = 0;
33 el_row = nullptr;
35 }
36
37 table_row(int h, const std::shared_ptr<render_item>& row);
38
39 table_row(const table_row& val)
40 {
42 top = val.top;
43 bottom = val.bottom;
46 height = val.height;
48 el_row = val.el_row;
49 }
50
51 table_row(table_row&& val) noexcept
52 {
53 min_height = val.min_height;
54 top = val.top;
55 bottom = val.bottom;
56 border_bottom = val.border_bottom;
57 border_top = val.border_top;
58 height = val.height;
59 css_height = val.css_height;
60 el_row = std::move(val.el_row);
61 }
62 };
63
65 {
66 using vector = std::vector<table_column>;
67
70 int width;
74 int left;
75 int right;
76
78 {
79 left = 0;
80 right = 0;
81 border_left = 0;
82 border_right = 0;
83 min_width = 0;
84 max_width = 0;
85 width = 0;
87 }
88
90 {
91 left = 0;
92 right = 0;
93 border_left = 0;
94 border_right = 0;
97 width = 0;
99 }
100
102 {
103 left = val.left;
104 right = val.right;
107 max_width = val.max_width;
108 min_width = val.min_width;
109 width = val.width;
110 css_width = val.css_width;
111 }
112 };
113
115 {
116 public:
117 virtual int& get(table_column& col) = 0;
118
119 protected:
121 };
122
124 {
125 public:
126 int& get(table_column& col) override;
127 };
128
130 {
131 public:
132 int& get(table_column& col) override;
133 };
134
136 {
137 public:
138 int& get(table_column& col) override;
139 };
140
142 {
143 std::shared_ptr<render_item> el;
150 int width;
153
155 {
156 min_width = 0;
157 min_height = 0;
158 max_width = 0;
159 max_height = 0;
160 width = 0;
161 height = 0;
162 colspan = 1;
163 rowspan = 1;
164 el = nullptr;
165 }
166
168 {
169 el = val.el;
170 colspan = val.colspan;
171 rowspan = val.rowspan;
172 width = val.width;
173 height = val.height;
174 min_width = val.min_width;
176 max_width = val.max_width;
178 borders = val.borders;
179 }
180
181 table_cell(table_cell&& val) noexcept
182 {
183 el = std::move(val.el);
184 colspan = val.colspan;
185 rowspan = val.rowspan;
186 width = val.width;
187 height = val.height;
188 min_width = val.min_width;
189 min_height = val.min_height;
190 max_width = val.max_width;
191 max_height = val.max_height;
192 borders = val.borders;
193 }
194 };
195
197 {
198 public:
199 using rows = std::vector<std::vector<table_cell>>;
200 private:
206 std::vector<std::shared_ptr<render_item>> m_captions;
209 public:
210
218
219 void clear();
220 void begin_row(const std::shared_ptr<render_item>& row);
221 void add_cell(const std::shared_ptr<render_item>& el);
222 bool is_rowspanned(int r, int c);
223 void finish();
224 table_cell* cell(int t_col, int t_row);
225 table_column& column(int c) { return m_columns[c]; }
226 table_row& row(int r) { return m_rows[r]; }
227 std::vector<std::shared_ptr<render_item>>& captions() { return m_captions; }
228
229 int rows_count() const { return m_rows_count; }
230 int cols_count() const { return m_cols_count; }
231
232 void top_captions_height(int height) { m_top_captions_height = height; }
236
237 void distribute_max_width(int width, int start, int end);
238 void distribute_min_width(int width, int start, int end);
239 void distribute_width(int width, int start, int end);
240 void distribute_width(int width, int start, int end, table_column_accessor* acc);
241 int calc_table_width(int block_width, bool is_auto, int& min_table_width, int& max_table_width);
242 void calc_horizontal_positions(const margins& table_borders, border_collapse bc, int bdr_space_x);
243 void calc_vertical_positions(const margins& table_borders, border_collapse bc, int bdr_space_y);
244 void calc_rows_height(int blockHeight, int borderSpacingY);
245 };
246}
247
248#endif // LH_TABLE_H
Definition css_length.h:22
void predef(int val)
Definition css_length.h:79
int & get(table_column &col) override
Definition table.cpp:581
int & get(table_column &col) override
Definition table.cpp:586
int & get(table_column &col) override
Definition table.cpp:591
Definition table.h:115
virtual int & get(table_column &col)=0
Definition table.h:197
void top_captions_height(int height)
Definition table.h:232
void begin_row(const std::shared_ptr< render_item > &row)
Definition table.cpp:28
int cols_count() const
Definition table.h:230
bool is_rowspanned(int r, int c)
Definition table.cpp:37
int rows_count() const
Definition table.h:229
rows m_cells
Definition table.h:203
int m_top_captions_height
Definition table.h:207
std::vector< std::shared_ptr< render_item > > m_captions
Definition table.h:206
table_row::vector m_rows
Definition table.h:205
int m_rows_count
Definition table.h:201
table_grid()
Definition table.h:211
void calc_horizontal_positions(const margins &table_borders, border_collapse bc, int bdr_space_x)
Definition table.cpp:419
table_row & row(int r)
Definition table.h:226
void calc_vertical_positions(const margins &table_borders, border_collapse bc, int bdr_space_y)
Definition table.cpp:451
int bottom_captions_height() const
Definition table.h:235
void distribute_max_width(int width, int start, int end)
Definition table.cpp:149
table_cell * cell(int t_col, int t_row)
Definition table.cpp:140
int calc_table_width(int block_width, bool is_auto, int &min_table_width, int &max_table_width)
Definition table.cpp:289
void add_cell(const std::shared_ptr< render_item > &el)
Definition table.cpp:6
void distribute_min_width(int width, int start, int end)
Definition table.cpp:155
table_column::vector m_columns
Definition table.h:204
void calc_rows_height(int blockHeight, int borderSpacingY)
Definition table.cpp:483
void finish()
Definition table.cpp:55
int m_cols_count
Definition table.h:202
table_column & column(int c)
Definition table.h:225
int top_captions_height() const
Definition table.h:233
std::vector< std::vector< table_cell > > rows
Definition table.h:199
std::vector< std::shared_ptr< render_item > > & captions()
Definition table.h:227
void distribute_width(int width, int start, int end)
Definition table.cpp:191
void bottom_captions_height(int height)
Definition table.h:234
int m_bottom_captions_height
Definition table.h:208
void clear()
Definition table.cpp:410
Definition background.h:12
border_collapse
Definition types.h:633
bool end(const css_token_vector &tokens, int index)
Definition gradient.cpp:78
Definition borders.h:250
Definition types.h:62
Definition table.h:142
int min_width
Definition table.h:146
int max_width
Definition table.h:148
table_cell(table_cell &&val) noexcept
Definition table.h:181
margins borders
Definition table.h:152
int rowspan
Definition table.h:145
int height
Definition table.h:151
int min_height
Definition table.h:147
int colspan
Definition table.h:144
int width
Definition table.h:150
std::shared_ptr< render_item > el
Definition table.h:143
table_cell()
Definition table.h:154
table_cell(const table_cell &val)
Definition table.h:167
int max_height
Definition table.h:149
Definition table.h:65
css_length css_width
Definition table.h:71
int border_right
Definition table.h:73
int border_left
Definition table.h:72
int max_width
Definition table.h:69
std::vector< table_column > vector
Definition table.h:66
table_column()
Definition table.h:77
table_column(int min_w, int max_w)
Definition table.h:89
int right
Definition table.h:75
int left
Definition table.h:74
int min_width
Definition table.h:68
table_column(const table_column &val)
Definition table.h:101
int width
Definition table.h:70
Definition table.h:13
table_row(const table_row &val)
Definition table.h:39
table_row(table_row &&val) noexcept
Definition table.h:51
int top
Definition table.h:20
std::vector< table_row > vector
Definition table.h:14
int border_top
Definition table.h:17
std::shared_ptr< render_item > el_row
Definition table.h:19
css_length css_height
Definition table.h:22
int border_bottom
Definition table.h:18
int height
Definition table.h:16
table_row()
Definition table.h:25
int bottom
Definition table.h:21
int min_height
Definition table.h:23
annotation col
Definition tag_strings.h:103