86 lines
1.7 KiB
C
86 lines
1.7 KiB
C
![]() |
#ifndef __LAYOUT_H
|
||
|
#define __LAYOUT_H
|
||
|
|
||
|
|
||
|
typedef enum {
|
||
|
CSS_FLEX_DIRECTION_COLUMN = 0,
|
||
|
CSS_FLEX_DIRECTION_ROW
|
||
|
} css_flex_direction_t;
|
||
|
|
||
|
typedef enum {
|
||
|
CSS_JUSTIFY_FLEX_START = 0,
|
||
|
CSS_JUSTIFY_CENTER,
|
||
|
CSS_JUSTIFY_FLEX_END,
|
||
|
CSS_JUSTIFY_SPACE_BETWEEN,
|
||
|
CSS_JUSTIFY_SPACE_AROUND
|
||
|
} css_justify_t;
|
||
|
|
||
|
// Note: auto is only a valid value for alignSelf. It is NOT a valid value for
|
||
|
// alignItems.
|
||
|
typedef enum {
|
||
|
CSS_ALIGN_AUTO = 0,
|
||
|
CSS_ALIGN_FLEX_START,
|
||
|
CSS_ALIGN_CENTER,
|
||
|
CSS_ALIGN_FLEX_END,
|
||
|
CSS_ALIGN_STRETCH
|
||
|
} css_align_t;
|
||
|
|
||
|
typedef enum {
|
||
|
CSS_FLEX_NONE = 0,
|
||
|
CSS_FLEX_ONE
|
||
|
} css_flex_t;
|
||
|
|
||
|
// Note: left and top are shared between position[2] and position[4], so
|
||
|
// they have to be before right and bottom.
|
||
|
typedef enum {
|
||
|
CSS_LEFT = 0,
|
||
|
CSS_TOP,
|
||
|
CSS_RIGHT,
|
||
|
CSS_BOTTOM
|
||
|
} css_position_t;
|
||
|
|
||
|
typedef enum {
|
||
|
CSS_WIDTH = 0,
|
||
|
CSS_HEIGHT
|
||
|
} css_dimension_t;
|
||
|
|
||
|
|
||
|
typedef struct {
|
||
|
float position[2];
|
||
|
float dimensions[2];
|
||
|
} css_layout_t;
|
||
|
|
||
|
typedef struct {
|
||
|
css_flex_direction_t flex_direction;
|
||
|
css_justify_t justify_content;
|
||
|
css_align_t align_items;
|
||
|
css_align_t align_self;
|
||
|
css_flex_t flex;
|
||
|
float margin[4];
|
||
|
float padding[4];
|
||
|
float position[4];
|
||
|
float dimensions[2];
|
||
|
} css_style_t;
|
||
|
|
||
|
typedef struct css_node {
|
||
|
css_style_t style;
|
||
|
css_layout_t layout;
|
||
|
struct css_node *children;
|
||
|
int children_count;
|
||
|
} css_node_t;
|
||
|
|
||
|
|
||
|
// Lifecycle of nodes and children
|
||
|
css_node_t *new_css_node();
|
||
|
void init_css_node_children(css_node_t *node, int children_count);
|
||
|
void free_css_node(css_node_t *node);
|
||
|
|
||
|
// Print utilities
|
||
|
void print_style(css_node_t *node, int level);
|
||
|
void print_layout(css_node_t *node, int level);
|
||
|
|
||
|
// Function that computes the layout!
|
||
|
void layoutNode(css_node_t *node);
|
||
|
|
||
|
#endif
|