| 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 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 224 || style->hasTransformRelatedProperty() | 224 || style->hasTransformRelatedProperty() |
| 225 || style->hasMask() | 225 || style->hasMask() |
| 226 || style->clipPath() | 226 || style->clipPath() |
| 227 || style->boxReflect() | 227 || style->boxReflect() |
| 228 || style->hasFilter() | 228 || style->hasFilter() |
| 229 || style->hasBlendMode() | 229 || style->hasBlendMode() |
| 230 || style->hasIsolation() | 230 || style->hasIsolation() |
| 231 || style->position() == StickyPosition | 231 || style->position() == StickyPosition |
| 232 || style->position() == FixedPosition | 232 || style->position() == FixedPosition |
| 233 || isInTopLayer(e, style) | 233 || isInTopLayer(e, style) |
| 234 || hasWillChangeThatCreatesStackingContext(style, e) | 234 || hasWillChangeThatCreatesStackingContext(style, e))) |
| 235 )) | |
| 236 style->setZIndex(0); | 235 style->setZIndex(0); |
| 237 | 236 |
| 238 // will-change:transform should result in the same rendering behavior as hav
ing a transform, | 237 // will-change:transform should result in the same rendering behavior as hav
ing a transform, |
| 239 // including the creation of a containing block for fixed position descendan
ts. | 238 // including the creation of a containing block for fixed position descendan
ts. |
| 240 if (!style->hasTransform() && style->willChangeProperties().contains(CSSProp
ertyWebkitTransform)) { | 239 if (!style->hasTransform() && style->willChangeProperties().contains(CSSProp
ertyWebkitTransform)) { |
| 241 bool makeIdentity = true; | 240 bool makeIdentity = true; |
| 242 style->setTransform(TransformOperations(makeIdentity)); | 241 style->setTransform(TransformOperations(makeIdentity)); |
| 243 } | 242 } |
| 244 | 243 |
| 245 if (doesNotInheritTextDecoration(style, e)) | 244 if (doesNotInheritTextDecoration(style, e)) |
| 246 style->setTextDecorationsInEffect(style->textDecoration()); | 245 style->setTextDecorationsInEffect(style->textDecoration()); |
| 247 else | 246 else |
| 248 style->addToTextDecorationsInEffect(style->textDecoration()); | 247 style->addToTextDecorationsInEffect(style->textDecoration()); |
| 249 | 248 |
| 250 // If either overflow value is not visible, change to auto. | 249 if (style->overflowX() != OVISIBLE || style->overflowY() != OVISIBLE) |
| 251 if (style->overflowX() == OVISIBLE && style->overflowY() != OVISIBLE) { | 250 adjustOverflow(style, e); |
| 252 // FIXME: Once we implement pagination controls, overflow-x should defau
lt to hidden | |
| 253 // if overflow-y is set to -webkit-paged-x or -webkit-page-y. For now, w
e'll let it | |
| 254 // default to auto so we can at least scroll through the pages. | |
| 255 style->setOverflowX(OAUTO); | |
| 256 } else if (style->overflowY() == OVISIBLE && style->overflowX() != OVISIBLE)
{ | |
| 257 style->setOverflowY(OAUTO); | |
| 258 } | |
| 259 | |
| 260 // Table rows, sections and the table itself will support overflow:hidden an
d will ignore scroll/auto. | |
| 261 // FIXME: Eventually table sections will support auto and scroll. | |
| 262 if (style->display() == TABLE || style->display() == INLINE_TABLE | |
| 263 || style->display() == TABLE_ROW_GROUP || style->display() == TABLE_ROW)
{ | |
| 264 if (style->overflowX() != OVISIBLE && style->overflowX() != OHIDDEN) | |
| 265 style->setOverflowX(OVISIBLE); | |
| 266 if (style->overflowY() != OVISIBLE && style->overflowY() != OHIDDEN) | |
| 267 style->setOverflowY(OVISIBLE); | |
| 268 } | |
| 269 | |
| 270 // Menulists should have visible overflow | |
| 271 if (style->appearance() == MenulistPart) { | |
| 272 style->setOverflowX(OVISIBLE); | |
| 273 style->setOverflowY(OVISIBLE); | |
| 274 } | |
| 275 | 251 |
| 276 // Cull out any useless layers and also repeat patterns into additional laye
rs. | 252 // Cull out any useless layers and also repeat patterns into additional laye
rs. |
| 277 style->adjustBackgroundLayers(); | 253 style->adjustBackgroundLayers(); |
| 278 style->adjustMaskLayers(); | 254 style->adjustMaskLayers(); |
| 279 | 255 |
| 280 // Let the theme also have a crack at adjusting the style. | 256 // Let the theme also have a crack at adjusting the style. |
| 281 if (style->hasAppearance()) | 257 if (style->hasAppearance()) |
| 282 RenderTheme::theme().adjustStyle(style, e, m_cachedUAStyle); | 258 RenderTheme::theme().adjustStyle(style, e, m_cachedUAStyle); |
| 283 | 259 |
| 284 // If we have first-letter pseudo style, transitions, or animations, do not
share this style. | 260 // If we have first-letter pseudo style, transitions, or animations, do not
share this style. |
| 285 if (style->hasPseudoStyle(FIRST_LETTER) || style->transitions() || style->an
imations()) | 261 if (style->hasPseudoStyle(FIRST_LETTER) || style->transitions() || style->an
imations()) |
| 286 style->setUnique(); | 262 style->setUnique(); |
| 287 | 263 |
| 288 // FIXME: when dropping the -webkit prefix on transform-style, we should als
o have opacity < 1 cause flattening. | 264 // FIXME: when dropping the -webkit prefix on transform-style, we should als
o have opacity < 1 cause flattening. |
| 289 if (style->preserves3D() && (style->overflowX() != OVISIBLE | 265 if (style->preserves3D() && (style->overflowX() != OVISIBLE |
| 290 || style->overflowY() != OVISIBLE | 266 || style->overflowY() != OVISIBLE |
| 291 || style->hasFilter())) | 267 || style->hasFilter())) |
| 292 style->setTransformStyle3D(TransformStyle3DFlat); | 268 style->setTransformStyle3D(TransformStyle3DFlat); |
| 293 | 269 |
| 294 if (e && e->isSVGElement()) { | 270 if (e && e->isSVGElement()) { |
| 295 // Spec: http://www.w3.org/TR/SVG/masking.html#OverflowProperty | |
| 296 if (style->overflowY() == OSCROLL) | |
| 297 style->setOverflowY(OHIDDEN); | |
| 298 else if (style->overflowY() == OAUTO) | |
| 299 style->setOverflowY(OVISIBLE); | |
| 300 | |
| 301 if (style->overflowX() == OSCROLL) | |
| 302 style->setOverflowX(OHIDDEN); | |
| 303 else if (style->overflowX() == OAUTO) | |
| 304 style->setOverflowX(OVISIBLE); | |
| 305 | |
| 306 // Only the root <svg> element in an SVG document fragment tree honors c
ss position | 271 // Only the root <svg> element in an SVG document fragment tree honors c
ss position |
| 307 if (!(isSVGSVGElement(*e) && e->parentNode() && !e->parentNode()->isSVGE
lement())) | 272 if (!(isSVGSVGElement(*e) && e->parentNode() && !e->parentNode()->isSVGE
lement())) |
| 308 style->setPosition(RenderStyle::initialPosition()); | 273 style->setPosition(RenderStyle::initialPosition()); |
| 309 | 274 |
| 310 // RenderSVGRoot handles zooming for the whole SVG subtree, so foreignOb
ject content should | 275 // RenderSVGRoot handles zooming for the whole SVG subtree, so foreignOb
ject content should |
| 311 // not be scaled again. | 276 // not be scaled again. |
| 312 if (isSVGForeignObjectElement(*e)) | 277 if (isSVGForeignObjectElement(*e)) |
| 313 style->setEffectiveZoom(RenderStyle::initialZoom()); | 278 style->setEffectiveZoom(RenderStyle::initialZoom()); |
| 314 | 279 |
| 315 // SVG text layout code expects us to be a block-level style element. | 280 // SVG text layout code expects us to be a block-level style element. |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 396 // since the theme will alter fonts and heights/widths. | 361 // since the theme will alter fonts and heights/widths. |
| 397 // | 362 // |
| 398 // Don't apply intrinsic margins to image buttons. The designer knows ho
w big the images are, | 363 // Don't apply intrinsic margins to image buttons. The designer knows ho
w big the images are, |
| 399 // so we have to treat all image buttons as though they were explicitly
sized. | 364 // so we have to treat all image buttons as though they were explicitly
sized. |
| 400 if (style->fontSize() >= 11 && (!isHTMLInputElement(element) || !toHTMLI
nputElement(element).isImageButton())) | 365 if (style->fontSize() >= 11 && (!isHTMLInputElement(element) || !toHTMLI
nputElement(element).isImageButton())) |
| 401 addIntrinsicMargins(style); | 366 addIntrinsicMargins(style); |
| 402 return; | 367 return; |
| 403 } | 368 } |
| 404 } | 369 } |
| 405 | 370 |
| 371 void StyleAdjuster::adjustOverflow(RenderStyle* style, Element* element) |
| 372 { |
| 373 ASSERT(style->overflowX() != OVISIBLE || style->overflowY() != OVISIBLE); |
| 374 |
| 375 // If either overflow value is not visible, change to auto. |
| 376 if (style->overflowX() == OVISIBLE && style->overflowY() != OVISIBLE) { |
| 377 // FIXME: Once we implement pagination controls, overflow-x should defau
lt to hidden |
| 378 // if overflow-y is set to -webkit-paged-x or -webkit-page-y. For now, w
e'll let it |
| 379 // default to auto so we can at least scroll through the pages. |
| 380 style->setOverflowX(OAUTO); |
| 381 } else if (style->overflowY() == OVISIBLE && style->overflowX() != OVISIBLE)
{ |
| 382 style->setOverflowY(OAUTO); |
| 383 } |
| 384 |
| 385 // Table rows, sections and the table itself will support overflow:hidden an
d will ignore scroll/auto. |
| 386 // FIXME: Eventually table sections will support auto and scroll. |
| 387 if (style->display() == TABLE || style->display() == INLINE_TABLE |
| 388 || style->display() == TABLE_ROW_GROUP || style->display() == TABLE_ROW)
{ |
| 389 if (style->overflowX() != OVISIBLE && style->overflowX() != OHIDDEN) |
| 390 style->setOverflowX(OVISIBLE); |
| 391 if (style->overflowY() != OVISIBLE && style->overflowY() != OHIDDEN) |
| 392 style->setOverflowY(OVISIBLE); |
| 393 } |
| 394 |
| 395 // Menulists should have visible overflow |
| 396 if (style->appearance() == MenulistPart) { |
| 397 style->setOverflowX(OVISIBLE); |
| 398 style->setOverflowY(OVISIBLE); |
| 399 } |
| 400 |
| 401 // Spec: http://www.w3.org/TR/SVG/masking.html#OverflowProperty |
| 402 if (element && element->isSVGElement()) { |
| 403 if (style->overflowY() == OSCROLL) |
| 404 style->setOverflowY(OHIDDEN); |
| 405 else if (style->overflowY() == OAUTO) |
| 406 style->setOverflowY(OVISIBLE); |
| 407 |
| 408 if (style->overflowX() == OSCROLL) |
| 409 style->setOverflowX(OHIDDEN); |
| 410 else if (style->overflowX() == OAUTO) |
| 411 style->setOverflowX(OVISIBLE); |
| 412 } |
| 413 } |
| 414 |
| 406 void StyleAdjuster::adjustStyleForDisplay(RenderStyle* style, RenderStyle* paren
tStyle) | 415 void StyleAdjuster::adjustStyleForDisplay(RenderStyle* style, RenderStyle* paren
tStyle) |
| 407 { | 416 { |
| 408 if (style->display() == BLOCK && !style->isFloating()) | 417 if (style->display() == BLOCK && !style->isFloating()) |
| 409 return; | 418 return; |
| 410 | 419 |
| 411 // FIXME: Don't support this mutation for pseudo styles like first-letter or
first-line, since it's not completely | 420 // FIXME: Don't support this mutation for pseudo styles like first-letter or
first-line, since it's not completely |
| 412 // clear how that should work. | 421 // clear how that should work. |
| 413 if (style->display() == INLINE && style->styleType() == NOPSEUDO && style->w
ritingMode() != parentStyle->writingMode()) | 422 if (style->display() == INLINE && style->styleType() == NOPSEUDO && style->w
ritingMode() != parentStyle->writingMode()) |
| 414 style->setDisplay(INLINE_BLOCK); | 423 style->setDisplay(INLINE_BLOCK); |
| 415 | 424 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 440 if (style->writingMode() != TopToBottomWritingMode && (style->display() == B
OX || style->display() == INLINE_BOX)) | 449 if (style->writingMode() != TopToBottomWritingMode && (style->display() == B
OX || style->display() == INLINE_BOX)) |
| 441 style->setWritingMode(TopToBottomWritingMode); | 450 style->setWritingMode(TopToBottomWritingMode); |
| 442 | 451 |
| 443 if (isDisplayFlexibleBox(parentStyle->display()) || isDisplayGridBox(parentS
tyle->display())) { | 452 if (isDisplayFlexibleBox(parentStyle->display()) || isDisplayGridBox(parentS
tyle->display())) { |
| 444 style->setFloating(NoFloat); | 453 style->setFloating(NoFloat); |
| 445 style->setDisplay(equivalentBlockDisplay(style->display(), style->isFloa
ting(), !m_useQuirksModeStyles)); | 454 style->setDisplay(equivalentBlockDisplay(style->display(), style->isFloa
ting(), !m_useQuirksModeStyles)); |
| 446 } | 455 } |
| 447 } | 456 } |
| 448 | 457 |
| 449 } | 458 } |
| OLD | NEW |