1 /*
2  * This file is part of LibCSS
3  * Licensed under the MIT License,
4  *		  http://www.opensource.org/licenses/mit-license.php
5  * Copyright 2009 John-Mark Bell <jmb@netsurf-browser.org>
6  */
7 
8 #include "bytecode/bytecode.h"
9 #include "bytecode/opcodes.h"
10 #include "select/propset.h"
11 #include "select/propget.h"
12 #include "utils/utils.h"
13 
14 #include "select/properties/properties.h"
15 #include "select/properties/helpers.h"
16 
css__cascade_display(uint32_t opv,css_style * style,css_select_state * state)17 css_error css__cascade_display(uint32_t opv, css_style *style,
18 		css_select_state *state)
19 {
20 	uint16_t value = CSS_DISPLAY_INHERIT;
21 
22 	UNUSED(style);
23 
24 	if (isInherit(opv) == false) {
25 		switch (getValue(opv)) {
26 		case DISPLAY_INLINE:
27 			value = CSS_DISPLAY_INLINE;
28 			break;
29 		case DISPLAY_BLOCK:
30 			value = CSS_DISPLAY_BLOCK;
31 			break;
32 		case DISPLAY_LIST_ITEM:
33 			value = CSS_DISPLAY_LIST_ITEM;
34 			break;
35 		case DISPLAY_RUN_IN:
36 			value = CSS_DISPLAY_RUN_IN;
37 			break;
38 		case DISPLAY_INLINE_BLOCK:
39 			value = CSS_DISPLAY_INLINE_BLOCK;
40 			break;
41 		case DISPLAY_TABLE:
42 			value = CSS_DISPLAY_TABLE;
43 			break;
44 		case DISPLAY_INLINE_TABLE:
45 			value = CSS_DISPLAY_INLINE_TABLE;
46 			break;
47 		case DISPLAY_TABLE_ROW_GROUP:
48 			value = CSS_DISPLAY_TABLE_ROW_GROUP;
49 			break;
50 		case DISPLAY_TABLE_HEADER_GROUP:
51 			value = CSS_DISPLAY_TABLE_HEADER_GROUP;
52 			break;
53 		case DISPLAY_TABLE_FOOTER_GROUP:
54 			value = CSS_DISPLAY_TABLE_FOOTER_GROUP;
55 			break;
56 		case DISPLAY_TABLE_ROW:
57 			value = CSS_DISPLAY_TABLE_ROW;
58 			break;
59 		case DISPLAY_TABLE_COLUMN_GROUP:
60 			value = CSS_DISPLAY_TABLE_COLUMN_GROUP;
61 			break;
62 		case DISPLAY_TABLE_COLUMN:
63 			value = CSS_DISPLAY_TABLE_COLUMN;
64 			break;
65 		case DISPLAY_TABLE_CELL:
66 			value = CSS_DISPLAY_TABLE_CELL;
67 			break;
68 		case DISPLAY_TABLE_CAPTION:
69 			value = CSS_DISPLAY_TABLE_CAPTION;
70 			break;
71 		case DISPLAY_NONE:
72 			value = CSS_DISPLAY_NONE;
73 			break;
74 		case DISPLAY_FLEX:
75 			value = CSS_DISPLAY_FLEX;
76 			break;
77 		case DISPLAY_INLINE_FLEX:
78 			value = CSS_DISPLAY_INLINE_FLEX;
79 			break;
80 		}
81 	}
82 
83 	if (css__outranks_existing(getOpcode(opv), isImportant(opv), state,
84 			isInherit(opv))) {
85 		return set_display(state->computed, value);
86 	}
87 
88 	return CSS_OK;
89 }
90 
css__set_display_from_hint(const css_hint * hint,css_computed_style * style)91 css_error css__set_display_from_hint(const css_hint *hint,
92 		css_computed_style *style)
93 {
94 	return set_display(style, hint->status);
95 }
96 
css__initial_display(css_select_state * state)97 css_error css__initial_display(css_select_state *state)
98 {
99 	return set_display(state->computed, CSS_DISPLAY_INLINE);
100 }
101 
css__compose_display(const css_computed_style * parent,const css_computed_style * child,css_computed_style * result)102 css_error css__compose_display(const css_computed_style *parent,
103 		const css_computed_style *child,
104 		css_computed_style *result)
105 {
106 	uint8_t type = get_display(child);
107 
108 	if (type == CSS_DISPLAY_INHERIT) {
109 		type = get_display(parent);
110 	}
111 
112 	return set_display(result, type);
113 }
114 
115