Photon 1.0.0
Loading...
Searching...
No Matches
line_box.h
Go to the documentation of this file.
1#ifndef LH_LINE_BOX_H
2#define LH_LINE_BOX_H
3
4#include <vector>
5#include <memory>
6#include "os_types.h"
7#include "types.h"
8
9namespace litehtml
10{
11 class render_item;
12
14 {
16 int top;
17 int left;
18 int right;
19
20 int width() const
21 {
22 return right - left;
23 }
24 void fix_top()
25 {
27 }
28 line_context() : calculatedTop(0), top(0), left(0), right(0) {}
29 };
30
32 {
33 public:
41 protected:
42 std::shared_ptr<render_item> m_element;
44 public:
45 explicit line_box_item(const std::shared_ptr<render_item>& element) : m_element(element), m_rendered_min_width(0) {}
47 line_box_item(const line_box_item& el) = default;
49 virtual ~line_box_item();
50
51 int height() const { return right() - left(); }
52 const std::shared_ptr<render_item>& get_el() const { return m_element; }
53 virtual position& pos();
54 virtual void place_to(int x, int y);
55 virtual int width() const;
56 virtual int top() const;
57 virtual int bottom() const;
58 virtual int right() const;
59 virtual int left() const;
60 virtual element_type get_type() const { return type_text_part; }
61 virtual int get_rendered_min_width() const { return m_rendered_min_width; }
62 virtual void set_rendered_min_width(int min_width) { m_rendered_min_width = min_width; }
63 };
64
65 class lbi_start : public line_box_item
66 {
67 protected:
69 public:
70 explicit lbi_start(const std::shared_ptr<render_item>& element);
71 virtual ~lbi_start() override;
72
73 void place_to(int x, int y) override;
74 int width() const override;
75 position& pos() override { return m_pos; }
76 int top() const override;
77 int bottom() const override;
78 int right() const override;
79 int left() const override;
80 element_type get_type() const override { return type_inline_start; }
81 int get_rendered_min_width() const override { return width(); }
82 };
83
84 class lbi_end : public lbi_start
85 {
86 public:
87 explicit lbi_end(const std::shared_ptr<render_item>& element);
88 virtual ~lbi_end() override;
89
90 void place_to(int x, int y) override;
91 int right() const override;
92 int left() const override;
93 element_type get_type() const override { return type_inline_end; }
94 };
95
96 class lbi_continue : public lbi_start
97 {
98 public:
99 explicit lbi_continue(const std::shared_ptr<render_item>& element);
100 virtual ~lbi_continue() override;
101
102 void place_to(int x, int y) override;
103 int right() const override;
104 int left() const override;
105 int width() const override;
106 element_type get_type() const override { return type_inline_continue; }
107 };
108
110 {
112 {
115
117 };
118
119 int m_top;
130 std::list< std::unique_ptr<line_box_item> > m_items;
131 public:
132 line_box(int top, int left, int right, int line_height, const font_metrics& fm, text_align align) :
133 m_top(top),
134 m_left(left),
135 m_right(right),
136 m_height(0),
137 m_width(0),
138 m_line_height(0),
140 m_font_metrics(fm),
141 m_baseline(0),
143 m_min_width(0)
144 {
145 }
146
147 int bottom() const { return m_top + height(); }
148 int top() const { return m_top; }
149 int right() const { return m_left + width(); }
150 int left() const { return m_left; }
151 int height() const { return m_height; }
152 int width() const { return m_width; }
153 int line_right() const { return m_right; }
154 int min_width() const { return m_min_width; }
155
156 void add_item(std::unique_ptr<line_box_item> item);
157 bool can_hold(const std::unique_ptr<line_box_item>& item, white_space ws) const;
158 bool is_empty() const;
159 int baseline() const;
160 int top_margin() const;
161 int bottom_margin() const;
162 void y_shift(int shift);
163 std::list< std::unique_ptr<line_box_item> > finish(bool last_box, const containing_block_context &containing_block_size);
164 std::list< std::unique_ptr<line_box_item> > new_width(int left, int right);
165 std::shared_ptr<render_item> get_last_text_part() const;
166 std::shared_ptr<render_item> get_first_text_part() const;
167 std::list< std::unique_ptr<line_box_item> >& items() { return m_items; }
168 private:
169 bool have_last_space() const;
170 bool is_break_only() const;
171 static int calc_va_baseline(const va_context& current, vertical_align va, const font_metrics& new_font, int top, int bottom);
172 };
173}
174
175#endif //LH_LINE_BOX_H
Definition types.h:774
Definition element.h:19
Definition line_box.h:97
int width() const override
Definition line_box.cpp:141
int left() const override
Definition line_box.cpp:136
void place_to(int x, int y) override
Definition line_box.cpp:125
virtual ~lbi_continue() override
element_type get_type() const override
Definition line_box.h:106
int right() const override
Definition line_box.cpp:131
Definition line_box.h:85
virtual ~lbi_end() override
int right() const override
Definition line_box.cpp:105
element_type get_type() const override
Definition line_box.h:93
int left() const override
Definition line_box.cpp:110
void place_to(int x, int y) override
Definition line_box.cpp:99
Definition line_box.h:66
void place_to(int x, int y) override
Definition line_box.cpp:58
position m_pos
Definition line_box.h:68
int bottom() const override
Definition line_box.cpp:74
position & pos() override
Definition line_box.h:75
int width() const override
Definition line_box.cpp:64
int right() const override
Definition line_box.cpp:79
int top() const override
Definition line_box.cpp:69
element_type get_type() const override
Definition line_box.h:80
int get_rendered_min_width() const override
Definition line_box.h:81
virtual ~lbi_start() override
int left() const override
Definition line_box.cpp:84
Definition line_box.h:32
const std::shared_ptr< render_item > & get_el() const
Definition line_box.h:52
int height() const
Definition line_box.h:51
line_box_item(const std::shared_ptr< render_item > &element)
Definition line_box.h:45
element_type
Definition line_box.h:35
@ type_text_part
Definition line_box.h:36
@ type_inline_start
Definition line_box.h:37
@ type_inline_continue
Definition line_box.h:38
@ type_inline_end
Definition line_box.h:39
virtual void set_rendered_min_width(int min_width)
Definition line_box.h:62
virtual int right() const
Definition line_box.cpp:38
int m_rendered_min_width
Definition line_box.h:43
virtual element_type get_type() const
Definition line_box.h:60
virtual position & pos()
Definition line_box.cpp:17
line_box_item(const line_box_item &el)=default
virtual void place_to(int x, int y)
Definition line_box.cpp:11
virtual int top() const
Definition line_box.cpp:28
std::shared_ptr< render_item > m_element
Definition line_box.h:42
line_box_item(line_box_item &&)=default
virtual int left() const
Definition line_box.cpp:43
virtual int width() const
Definition line_box.cpp:23
line_box_item()
Definition line_box.h:46
virtual int bottom() const
Definition line_box.cpp:33
virtual int get_rendered_min_width() const
Definition line_box.h:61
Definition line_box.h:110
int left() const
Definition line_box.h:150
std::list< std::unique_ptr< line_box_item > > new_width(int left, int right)
Definition line_box.cpp:686
int m_width
Definition line_box.h:123
int bottom() const
Definition line_box.h:147
int bottom_margin() const
Definition line_box.cpp:650
std::list< std::unique_ptr< line_box_item > > & items()
Definition line_box.h:167
std::shared_ptr< render_item > get_first_text_part() const
Definition line_box.cpp:534
void add_item(std::unique_ptr< line_box_item > item)
Definition line_box.cpp:148
int m_line_height
Definition line_box.h:124
int m_baseline
Definition line_box.h:127
int top() const
Definition line_box.h:148
int width() const
Definition line_box.h:152
bool is_break_only() const
Definition line_box.cpp:664
int min_width() const
Definition line_box.h:154
int baseline() const
Definition line_box.cpp:640
static int calc_va_baseline(const va_context &current, vertical_align va, const font_metrics &new_font, int top, int bottom)
Definition line_box.cpp:178
bool can_hold(const std::unique_ptr< line_box_item > &item, white_space ws) const
Definition line_box.cpp:560
int m_height
Definition line_box.h:122
int m_left
Definition line_box.h:120
std::list< std::unique_ptr< line_box_item > > m_items
Definition line_box.h:130
int m_default_line_height
Definition line_box.h:125
int m_min_width
Definition line_box.h:129
int top_margin() const
Definition line_box.cpp:645
std::list< std::unique_ptr< line_box_item > > finish(bool last_box, const containing_block_context &containing_block_size)
Definition line_box.cpp:202
int right() const
Definition line_box.h:149
int m_right
Definition line_box.h:121
int height() const
Definition line_box.h:151
bool have_last_space() const
Definition line_box.cpp:608
bool is_empty() const
Definition line_box.cpp:618
font_metrics m_font_metrics
Definition line_box.h:126
int line_right() const
Definition line_box.h:153
text_align m_text_align
Definition line_box.h:128
void y_shift(int shift)
Definition line_box.cpp:655
line_box(int top, int left, int right, int line_height, const font_metrics &fm, text_align align)
Definition line_box.h:132
std::shared_ptr< render_item > get_last_text_part() const
Definition line_box.cpp:547
int m_top
Definition line_box.h:119
Definition core.h:2677
Definition background.h:12
line_height
Definition types.h:367
white_space
Definition types.h:592
vertical_align
Definition types.h:437
text_align
Definition types.h:572
Definition types.h:197
Definition line_box.h:112
font_metrics fm
Definition line_box.h:114
va_context()
Definition line_box.h:116
int baseline
Definition line_box.h:113
Definition line_box.h:14
int right
Definition line_box.h:18
void fix_top()
Definition line_box.h:24
int calculatedTop
Definition line_box.h:15
line_context()
Definition line_box.h:28
int width() const
Definition line_box.h:20
int top
Definition line_box.h:16
int left
Definition line_box.h:17
Definition types.h:103