16 typedef std::unique_ptr<litehtml::box> ptr;
\r
17 typedef std::vector< box::ptr > vector;
\r
23 box(int top, int left, int right)
\r
27 m_box_right = right;
\r
31 int bottom() { return m_box_top + height(); }
\r
32 int top() { return m_box_top; }
\r
33 int right() { return m_box_left + width(); }
\r
34 int left() { return m_box_left; }
\r
36 virtual litehtml::box_type get_type() = 0;
\r
37 virtual int height() = 0;
\r
38 virtual int width() = 0;
\r
39 virtual void add_element(const element::ptr &el) = 0;
\r
40 virtual bool can_hold(const element::ptr &el, white_space ws) = 0;
\r
41 virtual void finish(bool last_box = false) = 0;
\r
42 virtual bool is_empty() = 0;
\r
43 virtual int baseline() = 0;
\r
44 virtual void get_elements(elements_vector& els) = 0;
\r
45 virtual int top_margin() = 0;
\r
46 virtual int bottom_margin() = 0;
\r
47 virtual void y_shift(int shift) = 0;
\r
48 virtual void new_width(int left, int right, elements_vector& els) = 0;
\r
51 //////////////////////////////////////////////////////////////////////////
\r
53 class block_box : public box
\r
55 element::ptr m_element;
\r
57 block_box(int top, int left, int right) : box(top, left, right)
\r
62 virtual litehtml::box_type get_type();
\r
63 virtual int height();
\r
64 virtual int width();
\r
65 virtual void add_element(const element::ptr &el);
\r
66 virtual bool can_hold(const element::ptr &el, white_space ws);
\r
67 virtual void finish(bool last_box = false);
\r
68 virtual bool is_empty();
\r
69 virtual int baseline();
\r
70 virtual void get_elements(elements_vector& els);
\r
71 virtual int top_margin();
\r
72 virtual int bottom_margin();
\r
73 virtual void y_shift(int shift);
\r
74 virtual void new_width(int left, int right, elements_vector& els);
\r
77 //////////////////////////////////////////////////////////////////////////
\r
79 class line_box : public box
\r
81 elements_vector m_items;
\r
85 font_metrics m_font_metrics;
\r
87 text_align m_text_align;
\r
89 line_box(int top, int left, int right, int line_height, font_metrics& fm, text_align align) : box(top, left, right)
\r
93 m_font_metrics = fm;
\r
94 m_line_height = line_height;
\r
96 m_text_align = align;
\r
99 virtual litehtml::box_type get_type();
\r
100 virtual int height();
\r
101 virtual int width();
\r
102 virtual void add_element(const element::ptr &el);
\r
103 virtual bool can_hold(const element::ptr &el, white_space ws);
\r
104 virtual void finish(bool last_box = false);
\r
105 virtual bool is_empty();
\r
106 virtual int baseline();
\r
107 virtual void get_elements(elements_vector& els);
\r
108 virtual int top_margin();
\r
109 virtual int bottom_margin();
\r
110 virtual void y_shift(int shift);
\r
111 virtual void new_width(int left, int right, elements_vector& els);
\r
114 bool have_last_space();
\r
115 bool is_break_only();
\r