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 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
49 #include "platform/transforms/TransformOperations.h" | 49 #include "platform/transforms/TransformOperations.h" |
50 #include "wtf/Assertions.h" | 50 #include "wtf/Assertions.h" |
51 | 51 |
52 namespace blink { | 52 namespace blink { |
53 | 53 |
54 using namespace HTMLNames; | 54 using namespace HTMLNames; |
55 | 55 |
56 static EDisplay equivalentBlockDisplay(EDisplay display) | 56 static EDisplay equivalentBlockDisplay(EDisplay display) |
57 { | 57 { |
58 switch (display) { | 58 switch (display) { |
59 case BLOCK: | 59 case EDisplay::Block: |
60 case TABLE: | 60 case EDisplay::Table: |
61 case BOX: | 61 case EDisplay::Box: |
62 case FLEX: | 62 case EDisplay::Flex: |
63 case GRID: | 63 case EDisplay::Grid: |
64 case LIST_ITEM: | 64 case EDisplay::ListItem: |
65 return display; | 65 return display; |
66 case INLINE_TABLE: | 66 case EDisplay::InlineTable: |
67 return TABLE; | 67 return EDisplay::Table; |
68 case INLINE_BOX: | 68 case EDisplay::InlineBox: |
69 return BOX; | 69 return EDisplay::Box; |
70 case INLINE_FLEX: | 70 case EDisplay::InlineFlex: |
71 return FLEX; | 71 return EDisplay::Flex; |
72 case INLINE_GRID: | 72 case EDisplay::InlineGrid: |
73 return GRID; | 73 return EDisplay::Grid; |
74 | 74 |
75 case INLINE: | 75 case EDisplay::Inline: |
76 case INLINE_BLOCK: | 76 case EDisplay::InlineBlock: |
77 case TABLE_ROW_GROUP: | 77 case EDisplay::TableRowGroup: |
78 case TABLE_HEADER_GROUP: | 78 case EDisplay::TableHeaderGroup: |
79 case TABLE_FOOTER_GROUP: | 79 case EDisplay::TableFooterGroup: |
80 case TABLE_ROW: | 80 case EDisplay::TableRow: |
81 case TABLE_COLUMN_GROUP: | 81 case EDisplay::TableColumnGroup: |
82 case TABLE_COLUMN: | 82 case EDisplay::TableColumn: |
83 case TABLE_CELL: | 83 case EDisplay::TableCell: |
84 case TABLE_CAPTION: | 84 case EDisplay::TableCaption: |
85 return BLOCK; | 85 return EDisplay::Block; |
86 case NONE: | 86 case EDisplay::None: |
87 ASSERT_NOT_REACHED(); | 87 ASSERT_NOT_REACHED(); |
88 return NONE; | 88 return EDisplay::None; |
89 } | 89 } |
90 ASSERT_NOT_REACHED(); | 90 ASSERT_NOT_REACHED(); |
91 return BLOCK; | 91 return EDisplay::Block; |
92 } | 92 } |
93 | 93 |
94 static bool isOutermostSVGElement(const Element* element) | 94 static bool isOutermostSVGElement(const Element* element) |
95 { | 95 { |
96 return element && element->isSVGElement() && toSVGElement(*element).isOuterm
ostSVGSVGElement(); | 96 return element && element->isSVGElement() && toSVGElement(*element).isOuterm
ostSVGSVGElement(); |
97 } | 97 } |
98 | 98 |
99 // CSS requires text-decoration to be reset at each DOM element for | 99 // CSS requires text-decoration to be reset at each DOM element for |
100 // inline blocks, inline tables, shadow DOM crossings, floating elements, | 100 // inline blocks, inline tables, shadow DOM crossings, floating elements, |
101 // and absolute or relatively positioned elements. Outermost <svg> roots are | 101 // and absolute or relatively positioned elements. Outermost <svg> roots are |
102 // considered to be atomic inline-level. | 102 // considered to be atomic inline-level. |
103 static bool doesNotInheritTextDecoration(const ComputedStyle& style, const Eleme
nt* element) | 103 static bool doesNotInheritTextDecoration(const ComputedStyle& style, const Eleme
nt* element) |
104 { | 104 { |
105 return style.display() == INLINE_TABLE | 105 return style.display() == EDisplay::InlineTable |
106 || style.display() == INLINE_BLOCK || style.display() == INLINE_BOX || i
sAtShadowBoundary(element) | 106 || style.display() == EDisplay::InlineBlock || style.display() == EDispl
ay::InlineBox || isAtShadowBoundary(element) |
107 || style.isFloating() || style.hasOutOfFlowPosition() || isOutermostSVGE
lement(element); | 107 || style.isFloating() || style.hasOutOfFlowPosition() || isOutermostSVGE
lement(element); |
108 } | 108 } |
109 | 109 |
110 // FIXME: This helper is only needed because pseudoStyleForElement passes a null | 110 // FIXME: This helper is only needed because pseudoStyleForElement passes a null |
111 // element to adjustComputedStyle, so we can't just use element->isInTopLayer(). | 111 // element to adjustComputedStyle, so we can't just use element->isInTopLayer(). |
112 static bool isInTopLayer(const Element* element, const ComputedStyle& style) | 112 static bool isInTopLayer(const Element* element, const ComputedStyle& style) |
113 { | 113 { |
114 return (element && element->isInTopLayer()) || style.styleType() == PseudoId
Backdrop; | 114 return (element && element->isInTopLayer()) || style.styleType() == PseudoId
Backdrop; |
115 } | 115 } |
116 | 116 |
(...skipping 14 matching lines...) Expand all Loading... |
131 else if (style.whiteSpace() == PRE_LINE) | 131 else if (style.whiteSpace() == PRE_LINE) |
132 style.setWhiteSpace(PRE_WRAP); | 132 style.setWhiteSpace(PRE_WRAP); |
133 } | 133 } |
134 | 134 |
135 static void adjustStyleForFirstLetter(ComputedStyle& style) | 135 static void adjustStyleForFirstLetter(ComputedStyle& style) |
136 { | 136 { |
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() ? EDisplay::Block : EDisplay::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 void StyleAdjuster::adjustStyleForAlignment(ComputedStyle& style, const Computed
Style& parentStyle) | 147 void StyleAdjuster::adjustStyleForAlignment(ComputedStyle& style, const Computed
Style& parentStyle) |
148 { | 148 { |
149 // To avoid needing to copy the RareNonInheritedData, we repurpose the 'auto
' flag | 149 // To avoid needing to copy the RareNonInheritedData, we repurpose the 'auto
' flag |
150 // to not just mean 'auto' prior to running the StyleAdjuster but also mean
'normal' | 150 // to not just mean 'auto' prior to running the StyleAdjuster but also mean
'normal' |
151 // after running it. | 151 // after running it. |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
196 // Tables never support the -webkit-* values for text-align and will res
et back to the default. | 196 // Tables never support the -webkit-* values for text-align and will res
et back to the default. |
197 if (style.textAlign() == WEBKIT_LEFT || style.textAlign() == WEBKIT_CENT
ER || style.textAlign() == WEBKIT_RIGHT) | 197 if (style.textAlign() == WEBKIT_LEFT || style.textAlign() == WEBKIT_CENT
ER || style.textAlign() == WEBKIT_RIGHT) |
198 style.setTextAlign(TASTART); | 198 style.setTextAlign(TASTART); |
199 return; | 199 return; |
200 } | 200 } |
201 | 201 |
202 if (isHTMLFrameElement(element) || isHTMLFrameSetElement(element)) { | 202 if (isHTMLFrameElement(element) || isHTMLFrameSetElement(element)) { |
203 // Frames and framesets never honor position:relative or position:absolu
te. This is necessary to | 203 // Frames and framesets never honor position:relative or position:absolu
te. This is necessary to |
204 // fix a crash where a site tries to position these objects. They also n
ever honor display. | 204 // fix a crash where a site tries to position these objects. They also n
ever honor display. |
205 style.setPosition(StaticPosition); | 205 style.setPosition(StaticPosition); |
206 style.setDisplay(BLOCK); | 206 style.setDisplay(EDisplay::Block); |
207 return; | 207 return; |
208 } | 208 } |
209 | 209 |
210 if (isHTMLFrameElementBase(element)) { | 210 if (isHTMLFrameElementBase(element)) { |
211 // Frames cannot overflow (they are always the size we ask them to be). | 211 // Frames cannot overflow (they are always the size we ask them to be). |
212 // Some compositing code paths may try to draw scrollbars anyhow. | 212 // Some compositing code paths may try to draw scrollbars anyhow. |
213 style.setOverflowX(OverflowVisible); | 213 style.setOverflowX(OverflowVisible); |
214 style.setOverflowY(OverflowVisible); | 214 style.setOverflowY(OverflowVisible); |
215 return; | 215 return; |
216 } | 216 } |
(...skipping 22 matching lines...) Expand all Loading... |
239 if (isHTMLPlugInElement(element)) { | 239 if (isHTMLPlugInElement(element)) { |
240 style.setRequiresAcceleratedCompositingForExternalReasons(toHTMLPlugInEl
ement(element).shouldAccelerate()); | 240 style.setRequiresAcceleratedCompositingForExternalReasons(toHTMLPlugInEl
ement(element).shouldAccelerate()); |
241 return; | 241 return; |
242 } | 242 } |
243 } | 243 } |
244 | 244 |
245 static void adjustOverflow(ComputedStyle& style) | 245 static void adjustOverflow(ComputedStyle& style) |
246 { | 246 { |
247 ASSERT(style.overflowX() != OverflowVisible || style.overflowY() != Overflow
Visible); | 247 ASSERT(style.overflowX() != OverflowVisible || style.overflowY() != Overflow
Visible); |
248 | 248 |
249 if (style.display() == TABLE || style.display() == INLINE_TABLE) { | 249 if (style.display() == EDisplay::Table || style.display() == EDisplay::Inlin
eTable) { |
250 // Tables only support overflow:hidden and overflow:visible and ignore a
nything else, | 250 // Tables only support overflow:hidden and overflow:visible and ignore a
nything else, |
251 // see http://dev.w3.org/csswg/css2/visufx.html#overflow. As a table is
not a block | 251 // see http://dev.w3.org/csswg/css2/visufx.html#overflow. As a table is
not a block |
252 // container box the rules for resolving conflicting x and y values in C
SS Overflow Module | 252 // container box the rules for resolving conflicting x and y values in C
SS Overflow Module |
253 // Level 3 do not apply. Arguably overflow-x and overflow-y aren't allow
ed on tables but | 253 // Level 3 do not apply. Arguably overflow-x and overflow-y aren't allow
ed on tables but |
254 // all UAs allow it. | 254 // all UAs allow it. |
255 if (style.overflowX() != OverflowHidden) | 255 if (style.overflowX() != OverflowHidden) |
256 style.setOverflowX(OverflowVisible); | 256 style.setOverflowX(OverflowVisible); |
257 if (style.overflowY() != OverflowHidden) | 257 if (style.overflowY() != OverflowHidden) |
258 style.setOverflowY(OverflowVisible); | 258 style.setOverflowY(OverflowVisible); |
259 // If we are left with conflicting overflow values for the x and y axes
on a table then resolve | 259 // If we are left with conflicting overflow values for the x and y axes
on a table then resolve |
(...skipping 14 matching lines...) Expand all Loading... |
274 | 274 |
275 // Menulists should have visible overflow | 275 // Menulists should have visible overflow |
276 if (style.appearance() == MenulistPart) { | 276 if (style.appearance() == MenulistPart) { |
277 style.setOverflowX(OverflowVisible); | 277 style.setOverflowX(OverflowVisible); |
278 style.setOverflowY(OverflowVisible); | 278 style.setOverflowY(OverflowVisible); |
279 } | 279 } |
280 } | 280 } |
281 | 281 |
282 static void adjustStyleForDisplay(ComputedStyle& style, const ComputedStyle& par
entStyle, Document* document) | 282 static void adjustStyleForDisplay(ComputedStyle& style, const ComputedStyle& par
entStyle, Document* document) |
283 { | 283 { |
284 if (style.display() == BLOCK && !style.isFloating()) | 284 if (style.display() == EDisplay::Block && !style.isFloating()) |
285 return; | 285 return; |
286 | 286 |
287 // FIXME: Don't support this mutation for pseudo styles like first-letter or
first-line, since it's not completely | 287 // FIXME: Don't support this mutation for pseudo styles like first-letter or
first-line, since it's not completely |
288 // clear how that should work. | 288 // clear how that should work. |
289 if (style.display() == INLINE && style.styleType() == PseudoIdNone && style.
getWritingMode() != parentStyle.getWritingMode()) | 289 if (style.display() == EDisplay::Inline && style.styleType() == PseudoIdNone
&& style.getWritingMode() != parentStyle.getWritingMode()) |
290 style.setDisplay(INLINE_BLOCK); | 290 style.setDisplay(EDisplay::InlineBlock); |
291 | 291 |
292 // After performing the display mutation, check table rows. We do not honor
position: relative table rows or cells. | 292 // After performing the display mutation, check table rows. We do not honor
position: relative table rows or cells. |
293 // This has been established for position: relative in CSS2.1 (and caused a
crash in containingBlock() | 293 // This has been established for position: relative in CSS2.1 (and caused a
crash in containingBlock() |
294 // on some sites). | 294 // on some sites). |
295 if ((style.display() == TABLE_HEADER_GROUP || style.display() == TABLE_ROW_G
ROUP | 295 if ((style.display() == EDisplay::TableHeaderGroup || style.display() == EDi
splay::TableRowGroup |
296 || style.display() == TABLE_FOOTER_GROUP || style.display() == TABLE_ROW
) | 296 || style.display() == EDisplay::TableFooterGroup || style.display() == E
Display::TableRow) |
297 && style.position() == RelativePosition) | 297 && style.position() == RelativePosition) |
298 style.setPosition(StaticPosition); | 298 style.setPosition(StaticPosition); |
299 | 299 |
300 // Cannot support position: sticky for table columns and column groups becau
se current code is only doing | 300 // Cannot support position: sticky for table columns and column groups becau
se current code is only doing |
301 // background painting through columns / column groups | 301 // background painting through columns / column groups |
302 if ((style.display() == TABLE_COLUMN_GROUP || style.display() == TABLE_COLUM
N) | 302 if ((style.display() == EDisplay::TableColumnGroup || style.display() == EDi
splay::TableColumn) |
303 && style.position() == StickyPosition) | 303 && style.position() == StickyPosition) |
304 style.setPosition(StaticPosition); | 304 style.setPosition(StaticPosition); |
305 | 305 |
306 // writing-mode does not apply to table row groups, table column groups, tab
le rows, and table columns. | 306 // writing-mode does not apply to table row groups, table column groups, tab
le rows, and table columns. |
307 // FIXME: Table cells should be allowed to be perpendicular or flipped with
respect to the table, though. | 307 // FIXME: Table cells should be allowed to be perpendicular or flipped with
respect to the table, though. |
308 if (style.display() == TABLE_COLUMN || style.display() == TABLE_COLUMN_GROUP
|| style.display() == TABLE_FOOTER_GROUP | 308 if (style.display() == EDisplay::TableColumn || style.display() == EDisplay:
:TableColumnGroup || style.display() == EDisplay::TableFooterGroup |
309 || style.display() == TABLE_HEADER_GROUP || style.display() == TABLE_ROW
|| style.display() == TABLE_ROW_GROUP | 309 || style.display() == EDisplay::TableHeaderGroup || style.display() == E
Display::TableRow || style.display() == EDisplay::TableRowGroup |
310 || style.display() == TABLE_CELL) | 310 || style.display() == EDisplay::TableCell) |
311 style.setWritingMode(parentStyle.getWritingMode()); | 311 style.setWritingMode(parentStyle.getWritingMode()); |
312 | 312 |
313 // FIXME: Since we don't support block-flow on flexible boxes yet, disallow
setting | 313 // FIXME: Since we don't support block-flow on flexible boxes yet, disallow
setting |
314 // of block-flow to anything other than TopToBottomWritingMode. | 314 // of block-flow to anything other than TopToBottomWritingMode. |
315 // https://bugs.webkit.org/show_bug.cgi?id=46418 - Flexible box support. | 315 // https://bugs.webkit.org/show_bug.cgi?id=46418 - Flexible box support. |
316 if (style.getWritingMode() != TopToBottomWritingMode && (style.display() ==
BOX || style.display() == INLINE_BOX)) | 316 if (style.getWritingMode() != TopToBottomWritingMode && (style.display() ==
EDisplay::Box || style.display() == EDisplay::InlineBox)) |
317 style.setWritingMode(TopToBottomWritingMode); | 317 style.setWritingMode(TopToBottomWritingMode); |
318 | 318 |
319 if (parentStyle.isDisplayFlexibleOrGridBox()) { | 319 if (parentStyle.isDisplayFlexibleOrGridBox()) { |
320 style.setFloating(EFloat::None); | 320 style.setFloating(EFloat::None); |
321 style.setDisplay(equivalentBlockDisplay(style.display())); | 321 style.setDisplay(equivalentBlockDisplay(style.display())); |
322 | 322 |
323 // We want to count vertical percentage paddings/margins on flex items b
ecause our current | 323 // We want to count vertical percentage paddings/margins on flex items b
ecause our current |
324 // behavior is different from the spec and we want to gather compatibili
ty data. | 324 // behavior is different from the spec and we want to gather compatibili
ty data. |
325 if (style.paddingBefore().isPercentOrCalc() || style.paddingAfter().isPe
rcentOrCalc()) | 325 if (style.paddingBefore().isPercentOrCalc() || style.paddingAfter().isPe
rcentOrCalc()) |
326 UseCounter::count(document, UseCounter::FlexboxPercentagePaddingVert
ical); | 326 UseCounter::count(document, UseCounter::FlexboxPercentagePaddingVert
ical); |
327 if (style.marginBefore().isPercentOrCalc() || style.marginAfter().isPerc
entOrCalc()) | 327 if (style.marginBefore().isPercentOrCalc() || style.marginAfter().isPerc
entOrCalc()) |
328 UseCounter::count(document, UseCounter::FlexboxPercentageMarginVerti
cal); | 328 UseCounter::count(document, UseCounter::FlexboxPercentageMarginVerti
cal); |
329 } | 329 } |
330 } | 330 } |
331 | 331 |
332 void StyleAdjuster::adjustComputedStyle(ComputedStyle& style, const ComputedStyl
e& parentStyle, Element* element) | 332 void StyleAdjuster::adjustComputedStyle(ComputedStyle& style, const ComputedStyl
e& parentStyle, Element* element) |
333 { | 333 { |
334 if (style.display() != NONE) { | 334 if (style.display() != EDisplay::None) { |
335 if (element && element->isHTMLElement()) | 335 if (element && element->isHTMLElement()) |
336 adjustStyleForHTMLElement(style, toHTMLElement(*element)); | 336 adjustStyleForHTMLElement(style, toHTMLElement(*element)); |
337 | 337 |
338 // Per the spec, position 'static' and 'relative' in the top layer compu
te to 'absolute'. | 338 // Per the spec, position 'static' and 'relative' in the top layer compu
te to 'absolute'. |
339 if (isInTopLayer(element, style) && (style.position() == StaticPosition
|| style.position() == RelativePosition)) | 339 if (isInTopLayer(element, style) && (style.position() == StaticPosition
|| style.position() == RelativePosition)) |
340 style.setPosition(AbsolutePosition); | 340 style.setPosition(AbsolutePosition); |
341 | 341 |
342 // Absolute/fixed positioned elements, floating elements and the documen
t element need block-like outside display. | 342 // Absolute/fixed positioned elements, floating elements and the documen
t element need block-like outside display. |
343 if (style.hasOutOfFlowPosition() || style.isFloating() || (element && el
ement->document().documentElement() == element)) | 343 if (style.hasOutOfFlowPosition() || style.isFloating() || (element && el
ement->document().documentElement() == element)) |
344 style.setDisplay(equivalentBlockDisplay(style.display())); | 344 style.setDisplay(equivalentBlockDisplay(style.display())); |
345 | 345 |
346 // We don't adjust the first letter style earlier because we may change
the display setting in | 346 // We don't adjust the first letter style earlier because we may change
the display setting in |
347 // adjustStyeForTagName() above. | 347 // adjustStyeForTagName() above. |
348 adjustStyleForFirstLetter(style); | 348 adjustStyleForFirstLetter(style); |
349 | 349 |
350 adjustStyleForDisplay(style, parentStyle, element ? &element->document()
: 0); | 350 adjustStyleForDisplay(style, parentStyle, element ? &element->document()
: 0); |
351 | 351 |
352 // Paint containment forces a block formatting context, so we must coerc
e from inline. | 352 // Paint containment forces a block formatting context, so we must coerc
e from inline. |
353 // https://drafts.csswg.org/css-containment/#containment-paint | 353 // https://drafts.csswg.org/css-containment/#containment-paint |
354 if (style.containsPaint() && style.display() == INLINE) | 354 if (style.containsPaint() && style.display() == EDisplay::Inline) |
355 style.setDisplay(BLOCK); | 355 style.setDisplay(EDisplay::Block); |
356 } else { | 356 } else { |
357 adjustStyleForFirstLetter(style); | 357 adjustStyleForFirstLetter(style); |
358 } | 358 } |
359 | 359 |
360 if (element && element->hasCompositorProxy()) | 360 if (element && element->hasCompositorProxy()) |
361 style.setHasCompositorProxy(true); | 361 style.setHasCompositorProxy(true); |
362 | 362 |
363 // Make sure our z-index value is only applied if the object is positioned. | 363 // Make sure our z-index value is only applied if the object is positioned. |
364 if (style.position() == StaticPosition && !parentStyleForcesZIndexToCreateSt
ackingContext(parentStyle)) { | 364 if (style.position() == StaticPosition && !parentStyleForcesZIndexToCreateSt
ackingContext(parentStyle)) { |
365 style.setIsStackingContext(false); | 365 style.setIsStackingContext(false); |
(...skipping 28 matching lines...) Expand all Loading... |
394 adjustStyleForEditing(style); | 394 adjustStyleForEditing(style); |
395 | 395 |
396 bool isSVGElement = element && element->isSVGElement(); | 396 bool isSVGElement = element && element->isSVGElement(); |
397 if (isSVGElement) { | 397 if (isSVGElement) { |
398 // Only the root <svg> element in an SVG document fragment tree honors c
ss position | 398 // Only the root <svg> element in an SVG document fragment tree honors c
ss position |
399 if (!(isSVGSVGElement(*element) && element->parentNode() && !element->pa
rentNode()->isSVGElement())) | 399 if (!(isSVGSVGElement(*element) && element->parentNode() && !element->pa
rentNode()->isSVGElement())) |
400 style.setPosition(ComputedStyle::initialPosition()); | 400 style.setPosition(ComputedStyle::initialPosition()); |
401 | 401 |
402 // SVG text layout code expects us to be a block-level style element. | 402 // SVG text layout code expects us to be a block-level style element. |
403 if ((isSVGForeignObjectElement(*element) || isSVGTextElement(*element))
&& style.isDisplayInlineType()) | 403 if ((isSVGForeignObjectElement(*element) || isSVGTextElement(*element))
&& style.isDisplayInlineType()) |
404 style.setDisplay(BLOCK); | 404 style.setDisplay(EDisplay::Block); |
405 | 405 |
406 // Columns don't apply to svg text elements. | 406 // Columns don't apply to svg text elements. |
407 if (isSVGTextElement(*element)) | 407 if (isSVGTextElement(*element)) |
408 style.clearMultiCol(); | 408 style.clearMultiCol(); |
409 } | 409 } |
410 adjustStyleForAlignment(style, parentStyle); | 410 adjustStyleForAlignment(style, parentStyle); |
411 } | 411 } |
412 | 412 |
413 } // namespace blink | 413 } // namespace blink |
OLD | NEW |