Photon 1.0.0
Loading...
Searching...
No Matches
flex_item.h
Go to the documentation of this file.
1#ifndef LITEHTML_FLEX_ITEM_H
2#define LITEHTML_FLEX_ITEM_H
3
4#include <functional>
6
7namespace litehtml
8{
9 class flex_line;
10
15 {
16 public:
17 std::shared_ptr<render_item> el;
22 int grow;
23 int shrink;
25 bool frozen;
26 int order;
33
34 explicit flex_item(std::shared_ptr<render_item> &_el) :
35 el(_el),
36 base_size(0),
37 min_size(0),
38 max_size(0),
39 main_size(0),
40 grow(0),
41 shrink(0),
43 frozen(false),
44 order(0),
45 src_order(0),
51 {}
52
53 virtual ~flex_item() = default;
54
55 bool operator<(const flex_item& b) const
56 {
57 if(order < b.order) return true;
58 if(order == b.order) return src_order < b.src_order;
59 return false;
60 }
61 void init(const litehtml::containing_block_context &self_size,
63 virtual void apply_main_auto_margins() = 0;
64 virtual bool apply_cross_auto_margins(int cross_size) = 0;
65 virtual void set_main_position(int pos) = 0;
66 virtual void set_cross_position(int pos) = 0;
67 virtual int get_el_main_size() = 0;
68 virtual int get_el_cross_size() = 0;
69
70 void place(flex_line &ln, int main_pos,
71 const containing_block_context &self_size,
72 formatting_context *fmt_ctx);
75
76 protected:
78 litehtml::formatting_context *fmt_ctx) = 0;
79 virtual void align_stretch(flex_line &ln, const containing_block_context &self_size,
80 formatting_context *fmt_ctx) = 0;
81 virtual void align_baseline(flex_line &ln,
82 const containing_block_context &self_size,
83 formatting_context *fmt_ctx) = 0;
84 };
85
90 {
91 public:
92 explicit flex_item_row_direction(std::shared_ptr<render_item> &_el) : flex_item(_el) {}
93
94 void apply_main_auto_margins() override;
95 bool apply_cross_auto_margins(int cross_size) override;
96 void set_main_position(int pos) override;
97 void set_cross_position(int pos) override;
98 int get_el_main_size() override;
99 int get_el_cross_size() override;
100
101 protected:
103 litehtml::formatting_context *fmt_ctx) override;
104 void align_stretch(flex_line &ln, const containing_block_context &self_size,
105 formatting_context *fmt_ctx) override;
106 void align_baseline(flex_line &ln,
107 const containing_block_context &self_size,
108 formatting_context *fmt_ctx) override;
109 };
110
115 {
116 public:
117 explicit flex_item_column_direction(std::shared_ptr<render_item> &_el) : flex_item(_el) {}
118
119 void apply_main_auto_margins() override;
120 bool apply_cross_auto_margins(int cross_size) override;
121 void set_main_position(int pos) override;
122 void set_cross_position(int pos) override;
123 int get_el_main_size() override;
124 int get_el_cross_size() override;
125
126 protected:
128 litehtml::formatting_context *fmt_ctx) override;
129 void align_stretch(flex_line &ln, const containing_block_context &self_size,
130 formatting_context *fmt_ctx) override;
131 void align_baseline(flex_line &ln,
132 const containing_block_context &self_size,
133 formatting_context *fmt_ctx) override;
134 };
135}
136
137#endif //LITEHTML_FLEX_ITEM_H
_baseline_type
Definition types.h:777
Definition types.h:732
Definition flex_item.h:115
void set_main_position(int pos) override
Definition flex_item.cpp:426
void align_baseline(flex_line &ln, const containing_block_context &self_size, formatting_context *fmt_ctx) override
Definition flex_item.cpp:464
void align_stretch(flex_line &ln, const containing_block_context &self_size, formatting_context *fmt_ctx) override
Definition flex_item.cpp:436
flex_item_column_direction(std::shared_ptr< render_item > &_el)
Definition flex_item.h:117
void set_cross_position(int pos) override
Definition flex_item.cpp:431
void direction_specific_init(const litehtml::containing_block_context &self_size, litehtml::formatting_context *fmt_ctx) override
Definition flex_item.cpp:298
int get_el_cross_size() override
Definition flex_item.cpp:495
bool apply_cross_auto_margins(int cross_size) override
Definition flex_item.cpp:399
int get_el_main_size() override
Definition flex_item.cpp:490
void apply_main_auto_margins() override
Definition flex_item.cpp:388
Definition flex_item.h:90
void set_cross_position(int pos) override
Definition flex_item.cpp:252
void apply_main_auto_margins() override
Definition flex_item.cpp:208
int get_el_main_size() override
Definition flex_item.cpp:286
void align_baseline(flex_line &ln, const containing_block_context &self_size, formatting_context *fmt_ctx) override
Definition flex_item.cpp:273
flex_item_row_direction(std::shared_ptr< render_item > &_el)
Definition flex_item.h:92
void direction_specific_init(const litehtml::containing_block_context &self_size, litehtml::formatting_context *fmt_ctx) override
Definition flex_item.cpp:112
bool apply_cross_auto_margins(int cross_size) override
Definition flex_item.cpp:219
int get_el_cross_size() override
Definition flex_item.cpp:291
void set_main_position(int pos) override
Definition flex_item.cpp:247
void align_stretch(flex_line &ln, const containing_block_context &self_size, formatting_context *fmt_ctx) override
Definition flex_item.cpp:257
Definition flex_item.h:15
flex_item(std::shared_ptr< render_item > &_el)
Definition flex_item.h:34
virtual int get_el_main_size()=0
bool auto_margin_cross_end
Definition flex_item.h:31
def_value< int > auto_margin_main_end
Definition flex_item.h:29
int min_size
Definition flex_item.h:19
virtual ~flex_item()=default
int shrink
Definition flex_item.h:23
flex_align_items align
Definition flex_item.h:32
virtual int get_el_cross_size()=0
int grow
Definition flex_item.h:22
virtual bool apply_cross_auto_margins(int cross_size)=0
std::shared_ptr< render_item > el
Definition flex_item.h:17
def_value< int > auto_margin_main_start
Definition flex_item.h:28
def_value< int > max_size
Definition flex_item.h:20
int get_last_baseline(baseline::_baseline_type type) const
Definition flex_item.cpp:85
bool auto_margin_cross_start
Definition flex_item.h:30
int scaled_flex_shrink_factor
Definition flex_item.h:24
int base_size
Definition flex_item.h:18
virtual void align_baseline(flex_line &ln, const containing_block_context &self_size, formatting_context *fmt_ctx)=0
int order
Definition flex_item.h:26
virtual void set_main_position(int pos)=0
bool operator<(const flex_item &b) const
Definition flex_item.h:55
virtual void align_stretch(flex_line &ln, const containing_block_context &self_size, formatting_context *fmt_ctx)=0
bool frozen
Definition flex_item.h:25
virtual void apply_main_auto_margins()=0
virtual void set_cross_position(int pos)=0
void place(flex_line &ln, int main_pos, const containing_block_context &self_size, formatting_context *fmt_ctx)
Definition flex_item.cpp:37
int main_size
Definition flex_item.h:21
int get_first_baseline(baseline::_baseline_type type) const
Definition flex_item.cpp:97
virtual void direction_specific_init(const litehtml::containing_block_context &self_size, litehtml::formatting_context *fmt_ctx)=0
int src_order
Definition flex_item.h:27
Definition flex_line.h:11
Definition formatting_context.h:10
type
Definition core.h:681
Definition core.h:2677
Definition background.h:12
flex_align_items
Definition types.h:956
@ flex_align_items_auto
Definition types.h:957
b
Definition tag_strings.h:61