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