aboutsummaryrefslogtreecommitdiffstats
path: root/include/litehtml/flex_line.h
blob: c96df86bb596ef8387bbb0e8211cf428ec5d6a57 (plain)
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
#ifndef LITEHTML_FLEX_LINE_H
#define LITEHTML_FLEX_LINE_H

#include "formatting_context.h"

namespace litehtml
{
	class flex_item;

	class flex_line
	{
		public:
		std::list<std::shared_ptr<flex_item>> items;
		int cross_start;	// for row direction: top. for column direction: left
		int main_size;		// sum of all items main size
		int cross_size;		// sum of all items cross size
		int base_size;
		int total_grow;
		int total_shrink;
		int num_auto_margin_main_start;		// number of items with auto margin left/top
		int num_auto_margin_main_end;		// number of items with auto margin right/bottom
		baseline first_baseline;
		baseline last_baseline;
		bool reverse_main;
		bool reverse_cross;

		flex_line(bool _reverse_main, bool _reverse_cross) :
				cross_start(0),
				main_size(0),
				cross_size(0),
				base_size(0),
				total_grow(0),
				total_shrink(0),
				num_auto_margin_main_start(0),
				num_auto_margin_main_end(0),
				first_baseline(),
				last_baseline(),
				reverse_main(_reverse_main),
				reverse_cross(_reverse_cross)
		{}

		void init(int container_main_size, bool fit_container, bool is_row_direction,
				  const litehtml::containing_block_context &self_size,
				  litehtml::formatting_context *fmt_ctx);
		bool distribute_main_auto_margins(int free_main_size);
		int  calculate_items_position(int container_main_size,
									  flex_justify_content justify_content,
									  bool is_row_direction,
									  const containing_block_context &self_size,
									  formatting_context *fmt_ctx);
	protected:
		void distribute_free_space(int container_main_size);
	};
}

#endif //LITEHTML_FLEX_LINE_H