Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(393)

Unified Diff: Source/core/css/resolver/StyleAdjuster.cpp

Issue 214413011: Skip overflow adjustment checks when possible in StyleAdjuster (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/css/resolver/StyleAdjuster.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/css/resolver/StyleAdjuster.cpp
diff --git a/Source/core/css/resolver/StyleAdjuster.cpp b/Source/core/css/resolver/StyleAdjuster.cpp
index e2fbbfed61c9f13abe6d71f11ee37a96bef3063f..624d735a327c199e7d7222c5b86249324fd82225 100644
--- a/Source/core/css/resolver/StyleAdjuster.cpp
+++ b/Source/core/css/resolver/StyleAdjuster.cpp
@@ -231,8 +231,7 @@ void StyleAdjuster::adjustRenderStyle(RenderStyle* style, RenderStyle* parentSty
|| style->position() == StickyPosition
|| style->position() == FixedPosition
|| isInTopLayer(e, style)
- || hasWillChangeThatCreatesStackingContext(style, e)
- ))
+ || hasWillChangeThatCreatesStackingContext(style, e)))
style->setZIndex(0);
// will-change:transform should result in the same rendering behavior as having a transform,
@@ -247,31 +246,8 @@ void StyleAdjuster::adjustRenderStyle(RenderStyle* style, RenderStyle* parentSty
else
style->addToTextDecorationsInEffect(style->textDecoration());
- // If either overflow value is not visible, change to auto.
- if (style->overflowX() == OVISIBLE && style->overflowY() != OVISIBLE) {
- // FIXME: Once we implement pagination controls, overflow-x should default to hidden
- // if overflow-y is set to -webkit-paged-x or -webkit-page-y. For now, we'll let it
- // default to auto so we can at least scroll through the pages.
- style->setOverflowX(OAUTO);
- } else if (style->overflowY() == OVISIBLE && style->overflowX() != OVISIBLE) {
- style->setOverflowY(OAUTO);
- }
-
- // Table rows, sections and the table itself will support overflow:hidden and will ignore scroll/auto.
- // FIXME: Eventually table sections will support auto and scroll.
- if (style->display() == TABLE || style->display() == INLINE_TABLE
- || style->display() == TABLE_ROW_GROUP || style->display() == TABLE_ROW) {
- if (style->overflowX() != OVISIBLE && style->overflowX() != OHIDDEN)
- style->setOverflowX(OVISIBLE);
- if (style->overflowY() != OVISIBLE && style->overflowY() != OHIDDEN)
- style->setOverflowY(OVISIBLE);
- }
-
- // Menulists should have visible overflow
- if (style->appearance() == MenulistPart) {
- style->setOverflowX(OVISIBLE);
- style->setOverflowY(OVISIBLE);
- }
+ if (style->overflowX() != OVISIBLE || style->overflowY() != OVISIBLE)
+ adjustOverflow(style, e);
// Cull out any useless layers and also repeat patterns into additional layers.
style->adjustBackgroundLayers();
@@ -292,17 +268,6 @@ void StyleAdjuster::adjustRenderStyle(RenderStyle* style, RenderStyle* parentSty
style->setTransformStyle3D(TransformStyle3DFlat);
if (e && e->isSVGElement()) {
- // Spec: http://www.w3.org/TR/SVG/masking.html#OverflowProperty
- if (style->overflowY() == OSCROLL)
- style->setOverflowY(OHIDDEN);
- else if (style->overflowY() == OAUTO)
- style->setOverflowY(OVISIBLE);
-
- if (style->overflowX() == OSCROLL)
- style->setOverflowX(OHIDDEN);
- else if (style->overflowX() == OAUTO)
- style->setOverflowX(OVISIBLE);
-
// Only the root <svg> element in an SVG document fragment tree honors css position
if (!(isSVGSVGElement(*e) && e->parentNode() && !e->parentNode()->isSVGElement()))
style->setPosition(RenderStyle::initialPosition());
@@ -403,6 +368,50 @@ void StyleAdjuster::adjustStyleForTagName(RenderStyle* style, RenderStyle* paren
}
}
+void StyleAdjuster::adjustOverflow(RenderStyle* style, Element* element)
+{
+ ASSERT(style->overflowX() != OVISIBLE || style->overflowY() != OVISIBLE);
+
+ // If either overflow value is not visible, change to auto.
+ if (style->overflowX() == OVISIBLE && style->overflowY() != OVISIBLE) {
+ // FIXME: Once we implement pagination controls, overflow-x should default to hidden
+ // if overflow-y is set to -webkit-paged-x or -webkit-page-y. For now, we'll let it
+ // default to auto so we can at least scroll through the pages.
+ style->setOverflowX(OAUTO);
+ } else if (style->overflowY() == OVISIBLE && style->overflowX() != OVISIBLE) {
+ style->setOverflowY(OAUTO);
+ }
+
+ // Table rows, sections and the table itself will support overflow:hidden and will ignore scroll/auto.
+ // FIXME: Eventually table sections will support auto and scroll.
+ if (style->display() == TABLE || style->display() == INLINE_TABLE
+ || style->display() == TABLE_ROW_GROUP || style->display() == TABLE_ROW) {
+ if (style->overflowX() != OVISIBLE && style->overflowX() != OHIDDEN)
+ style->setOverflowX(OVISIBLE);
+ if (style->overflowY() != OVISIBLE && style->overflowY() != OHIDDEN)
+ style->setOverflowY(OVISIBLE);
+ }
+
+ // Menulists should have visible overflow
+ if (style->appearance() == MenulistPart) {
+ style->setOverflowX(OVISIBLE);
+ style->setOverflowY(OVISIBLE);
+ }
+
+ // Spec: http://www.w3.org/TR/SVG/masking.html#OverflowProperty
+ if (element && element->isSVGElement()) {
+ if (style->overflowY() == OSCROLL)
+ style->setOverflowY(OHIDDEN);
+ else if (style->overflowY() == OAUTO)
+ style->setOverflowY(OVISIBLE);
+
+ if (style->overflowX() == OSCROLL)
+ style->setOverflowX(OHIDDEN);
+ else if (style->overflowX() == OAUTO)
+ style->setOverflowX(OVISIBLE);
+ }
+}
+
void StyleAdjuster::adjustStyleForDisplay(RenderStyle* style, RenderStyle* parentStyle)
{
if (style->display() == BLOCK && !style->isFloating())
« no previous file with comments | « Source/core/css/resolver/StyleAdjuster.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698