6 #include "background.h"
7 #include "css_margins.h"
9 #include "css_selector.h"
10 #include "stylesheet.h"
33 class html_tag : public element
35 friend class elements_iterator;
36 friend class el_table;
37 friend class table_grid;
38 friend class block_box;
39 friend class line_box;
41 typedef std::shared_ptr<litehtml::html_tag> ptr;
44 string_vector m_class_values;
46 litehtml::style m_style;
48 vertical_align m_vertical_align;
49 text_align m_text_align;
50 style_display m_display;
51 list_style_type m_list_style_type;
52 list_style_position m_list_style_position;
53 white_space m_white_space;
54 element_float m_float;
55 element_clear m_clear;
56 floated_box::vector m_floats_left;
57 floated_box::vector m_floats_right;
58 elements_vector m_positioned;
60 element_position m_el_position;
63 string_vector m_pseudo_classes;
64 used_selector::vector m_used_styles;
68 font_metrics m_font_metrics;
70 css_margins m_css_margins;
71 css_margins m_css_padding;
72 css_borders m_css_borders;
73 css_length m_css_width;
74 css_length m_css_height;
75 css_length m_css_min_width;
76 css_length m_css_min_height;
77 css_length m_css_max_width;
78 css_length m_css_max_height;
79 css_offsets m_css_offsets;
80 css_length m_css_text_indent;
83 visibility m_visibility;
85 box_sizing m_box_sizing;
87 int_int_cache m_cahe_line_left;
88 int_int_cache m_cahe_line_right;
90 // data for table rendering
91 std::unique_ptr<table_grid> m_grid;
92 css_length m_css_border_spacing_x;
93 css_length m_css_border_spacing_y;
94 int m_border_spacing_x;
95 int m_border_spacing_y;
96 border_collapse m_border_collapse;
98 virtual void select_all(const css_selector& selector, elements_vector& res) override;
101 html_tag(const std::shared_ptr<litehtml::document>& doc);
104 /* render functions */
106 virtual int render(int x, int y, int max_width, bool second_pass = false) override;
108 virtual int render_inline(const element::ptr &container, int max_width) override;
109 virtual int place_element(const element::ptr &el, int max_width) override;
110 virtual bool fetch_positioned() override;
111 virtual void render_positioned(render_type rt = render_all) override;
113 int new_box(const element::ptr &el, int max_width, line_context& line_ctx);
115 int get_cleared_top(const element::ptr &el, int line_top) const;
116 int finish_last_box(bool end_of_render = false);
118 virtual bool appendChild(const element::ptr &el) override;
119 virtual bool removeChild(const element::ptr &el) override;
120 virtual void clearRecursive() override;
121 virtual const tchar_t* get_tagName() const override;
122 virtual void set_tagName(const tchar_t* tag) override;
123 virtual void set_data(const tchar_t* data) override;
124 virtual element_float get_float() const override;
125 virtual vertical_align get_vertical_align() const override;
126 virtual css_length get_css_left() const override;
127 virtual css_length get_css_right() const override;
128 virtual css_length get_css_top() const override;
129 virtual css_length get_css_bottom() const override;
130 virtual css_length get_css_width() const override;
131 virtual css_offsets get_css_offsets() const override;
132 virtual void set_css_width(css_length& w) override;
133 virtual css_length get_css_height() const override;
134 virtual element_clear get_clear() const override;
135 virtual size_t get_children_count() const override;
136 virtual element::ptr get_child(int idx) const override;
137 virtual element_position get_element_position(css_offsets* offsets = 0) const override;
138 virtual overflow get_overflow() const override;
140 virtual void set_attr(const tchar_t* name, const tchar_t* val) override;
141 virtual const tchar_t* get_attr(const tchar_t* name, const tchar_t* def = 0) override;
142 virtual void apply_stylesheet(const litehtml::css& stylesheet) override;
143 virtual void refresh_styles() override;
145 virtual bool is_white_space() const override;
146 virtual bool is_body() const override;
147 virtual bool is_break() const override;
148 virtual int get_base_line() override;
149 virtual bool on_mouse_over() override;
150 virtual bool on_mouse_leave() override;
151 virtual bool on_lbutton_down() override;
152 virtual bool on_lbutton_up() override;
153 virtual void on_click() override;
154 virtual bool find_styles_changes(position::vector& redraw_boxes, int x, int y) override;
155 virtual const tchar_t* get_cursor() override;
156 virtual void init_font() override;
157 virtual bool set_pseudo_class(const tchar_t* pclass, bool add) override;
158 virtual bool set_class(const tchar_t* pclass, bool add) override;
159 virtual bool is_replaced() const override;
160 virtual int line_height() const override;
161 virtual white_space get_white_space() const override;
162 virtual style_display get_display() const override;
163 virtual visibility get_visibility() const override;
164 virtual void parse_styles(bool is_reparse = false) override;
165 virtual void draw(uint_ptr hdc, int x, int y, const position* clip) override;
166 virtual void draw_background(uint_ptr hdc, int x, int y, const position* clip) override;
168 virtual const tchar_t* get_style_property(const tchar_t* name, bool inherited, const tchar_t* def = 0) override;
169 virtual uint_ptr get_font(font_metrics* fm = 0) override;
170 virtual int get_font_size() const override;
172 elements_vector& children();
173 virtual void calc_outlines(int parent_width) override;
174 virtual void calc_auto_margins(int parent_width) override;
176 virtual int select(const css_selector& selector, bool apply_pseudo = true) override;
177 virtual int select(const css_element_selector& selector, bool apply_pseudo = true) override;
179 virtual elements_vector select_all(const tstring& selector) override;
180 virtual elements_vector select_all(const css_selector& selector) override;
182 virtual element::ptr select_one(const tstring& selector) override;
183 virtual element::ptr select_one(const css_selector& selector) override;
185 virtual element::ptr find_ancestor(const css_selector& selector, bool apply_pseudo = true, bool* is_pseudo = 0) override;
186 virtual element::ptr find_adjacent_sibling(const element::ptr& el, const css_selector& selector, bool apply_pseudo = true, bool* is_pseudo = 0) override;
187 virtual element::ptr find_sibling(const element::ptr& el, const css_selector& selector, bool apply_pseudo = true, bool* is_pseudo = 0) override;
188 virtual void get_text(tstring& text) override;
189 virtual void parse_attributes() override;
191 virtual bool is_first_child_inline(const element::ptr& el) const override;
192 virtual bool is_last_child_inline(const element::ptr& el) override;
193 virtual bool have_inline_child() const override;
194 virtual void get_content_size(size& sz, int max_width) override;
195 virtual void init() override;
196 virtual void get_inline_boxes(position::vector& boxes) override;
197 virtual bool is_floats_holder() const override;
198 virtual int get_floats_height(element_float el_float = float_none) const override;
199 virtual int get_left_floats_height() const override;
200 virtual int get_right_floats_height() const override;
201 virtual int get_line_left(int y) override;
202 virtual int get_line_right(int y, int def_right) override;
203 virtual void get_line_left_right(int y, int def_right, int& ln_left, int& ln_right) override;
204 virtual void add_float(const element::ptr &el, int x, int y) override;
205 virtual void update_floats(int dy, const element::ptr &parent) override;
206 virtual void add_positioned(const element::ptr &el) override;
207 virtual int find_next_line_top(int top, int width, int def_right) override;
208 virtual void apply_vertical_align() override;
209 virtual void draw_children(uint_ptr hdc, int x, int y, const position* clip, draw_flag flag, int zindex) override;
210 virtual int get_zindex() const override;
211 virtual void draw_stacking_context(uint_ptr hdc, int x, int y, const position* clip, bool with_positioned) override;
212 virtual void calc_document_size(litehtml::size& sz, int x = 0, int y = 0) override;
213 virtual void get_redraw_box(litehtml::position& pos, int x = 0, int y = 0) override;
214 virtual void add_style(const litehtml::style& st) override;
215 virtual element::ptr get_element_by_point(int x, int y, int client_x, int client_y) override;
216 virtual element::ptr get_child_by_point(int x, int y, int client_x, int client_y, draw_flag flag, int zindex) override;
218 virtual bool is_nth_child(const element::ptr& el, int num, int off, bool of_type) const override;
219 virtual bool is_nth_last_child(const element::ptr& el, int num, int off, bool of_type) const override;
220 virtual bool is_only_child(const element::ptr& el, bool of_type) const override;
221 virtual const background* get_background(bool own_only = false) override;
224 void draw_children_box(uint_ptr hdc, int x, int y, const position* clip, draw_flag flag, int zindex);
225 void draw_children_table(uint_ptr hdc, int x, int y, const position* clip, draw_flag flag, int zindex);
226 int render_box(int x, int y, int max_width, bool second_pass = false);
227 int render_table(int x, int y, int max_width, bool second_pass = false);
228 int fix_line_width(int max_width, element_float flt);
229 void parse_background();
230 void init_background_paint( position pos, background_paint &bg_paint, const background* bg );
231 void draw_list_marker( uint_ptr hdc, const position &pos );
232 void parse_nth_child_params( tstring param, int &num, int &off );
233 void remove_before_after();
234 litehtml::element::ptr get_element_before();
235 litehtml::element::ptr get_element_after();
238 /************************************************************************/
239 /* Inline Functions */
240 /************************************************************************/
242 inline elements_vector& litehtml::html_tag::children()
248 #endif // LH_HTML_TAG_H