OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
3 * (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com) | 3 * (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com) |
4 * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com) | 4 * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com) |
5 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc.
All rights reserved. | 5 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc.
All rights reserved. |
6 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> | 6 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> |
7 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org> | 7 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org> |
8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t
orchmobile.com/) | 8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t
orchmobile.com/) |
9 * Copyright (c) 2011, Code Aurora Forum. All rights reserved. | 9 * Copyright (c) 2011, Code Aurora Forum. All rights reserved. |
10 * Copyright (C) Research In Motion Limited 2011. All rights reserved. | 10 * Copyright (C) Research In Motion Limited 2011. All rights reserved. |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
137 if (style.styleType() != PseudoIdFirstLetter) | 137 if (style.styleType() != PseudoIdFirstLetter) |
138 return; | 138 return; |
139 | 139 |
140 // Force inline display (except for floating first-letters). | 140 // Force inline display (except for floating first-letters). |
141 style.setDisplay(style.isFloating() ? BLOCK : INLINE); | 141 style.setDisplay(style.isFloating() ? BLOCK : INLINE); |
142 | 142 |
143 // CSS2 says first-letter can't be positioned. | 143 // CSS2 says first-letter can't be positioned. |
144 style.setPosition(StaticPosition); | 144 style.setPosition(StaticPosition); |
145 } | 145 } |
146 | 146 |
147 static void adjustStyleForAlignment(ComputedStyle& style, const ComputedStyle& p
arentStyle) | 147 void StyleAdjuster::adjustStyleForAlignment(ComputedStyle& style, const Computed
Style& parentStyle) |
148 { | 148 { |
149 bool isFlexOrGrid = style.isDisplayFlexibleOrGridBox(); | 149 // To avoid needing to copy the RareNonInheritedData, we repurpose the 'auto
' flag |
150 bool absolutePositioned = style.position() == AbsolutePosition; | 150 // to not just mean 'auto' prior to running the StyleAdjuster but also mean
'normal' |
| 151 // after running it. |
151 | 152 |
152 // If the inherited value of justify-items includes the legacy keyword, 'aut
o' | 153 // If the inherited value of justify-items includes the 'legacy' keyword, 'a
uto' |
153 // computes to the the inherited value. | 154 // computes to the the inherited value. |
154 // Otherwise, auto computes to: | 155 // Otherwise, 'auto' computes to 'normal'. |
155 // - 'stretch' for flex containers and grid containers. | |
156 // - 'start' for everything else. | |
157 if (style.justifyItemsPosition() == ItemPositionAuto) { | 156 if (style.justifyItemsPosition() == ItemPositionAuto) { |
158 if (parentStyle.justifyItemsPositionType() == LegacyPosition) | 157 if (parentStyle.justifyItemsPositionType() == LegacyPosition) |
159 style.setJustifyItems(parentStyle.justifyItems()); | 158 style.setJustifyItems(parentStyle.justifyItems()); |
160 else if (isFlexOrGrid) | |
161 style.setJustifyItemsPosition(ItemPositionStretch); | |
162 } | 159 } |
163 | 160 |
164 // The 'auto' keyword computes to 'stretch' on absolutely-positioned element
s, | 161 // The 'auto' keyword computes the computed value of justify-items on the pa
rent (minus |
165 // and to the computed value of justify-items on the parent (minus | 162 // any legacy keywords), or 'normal' if the box has no parent. |
166 // any legacy keywords) on all other boxes. | |
167 if (style.justifySelfPosition() == ItemPositionAuto) { | 163 if (style.justifySelfPosition() == ItemPositionAuto) { |
168 if (absolutePositioned) | 164 if (parentStyle.justifyItemsPositionType() == LegacyPosition) |
169 style.setJustifySelfPosition(ItemPositionStretch); | 165 style.setJustifySelfPosition(parentStyle.justifyItemsPosition()); |
170 else | 166 else if (parentStyle.justifyItemsPosition() != ItemPositionAuto) |
171 style.setJustifySelf(parentStyle.justifyItems()); | 167 style.setJustifySelf(parentStyle.justifyItems()); |
172 } | 168 } |
173 | 169 |
174 // The 'auto' keyword computes to: | 170 // The 'auto' keyword computes the computed value of align-items on the pare
nt |
175 // - 'stretch' for flex containers and grid containers, | 171 // or 'normal' if the box has no parent. |
176 // - 'start' for everything else. | 172 if (style.alignSelfPosition() == ItemPositionAuto && parentStyle.alignItemsP
osition() != ItemPositionNormal) |
177 if (style.alignItemsPosition() == ItemPositionAuto) { | 173 style.setAlignSelf(parentStyle.alignItems()); |
178 if (isFlexOrGrid) | |
179 style.setAlignItemsPosition(ItemPositionStretch); | |
180 } | |
181 } | 174 } |
182 | 175 |
183 static void adjustStyleForHTMLElement(ComputedStyle& style, const ComputedStyle&
parentStyle, HTMLElement& element) | 176 static void adjustStyleForHTMLElement(ComputedStyle& style, const ComputedStyle&
parentStyle, HTMLElement& element) |
184 { | 177 { |
185 // <div> and <span> are the most common elements on the web, we skip all the
work for them. | 178 // <div> and <span> are the most common elements on the web, we skip all the
work for them. |
186 if (isHTMLDivElement(element) || isHTMLSpanElement(element)) | 179 if (isHTMLDivElement(element) || isHTMLSpanElement(element)) |
187 return; | 180 return; |
188 | 181 |
189 if (isHTMLTableCellElement(element)) { | 182 if (isHTMLTableCellElement(element)) { |
190 if (style.whiteSpace() == KHTML_NOWRAP) { | 183 if (style.whiteSpace() == KHTML_NOWRAP) { |
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
411 style.setDisplay(BLOCK); | 404 style.setDisplay(BLOCK); |
412 | 405 |
413 // Columns don't apply to svg text elements. | 406 // Columns don't apply to svg text elements. |
414 if (isSVGTextElement(*element)) | 407 if (isSVGTextElement(*element)) |
415 style.clearMultiCol(); | 408 style.clearMultiCol(); |
416 } | 409 } |
417 adjustStyleForAlignment(style, parentStyle); | 410 adjustStyleForAlignment(style, parentStyle); |
418 } | 411 } |
419 | 412 |
420 } // namespace blink | 413 } // namespace blink |
OLD | NEW |