| 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 |