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

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

Issue 202343003: Early return when doing tagName based adjustments in StyleAdjuster (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Never skip applying intrinsic margins 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 dae46cd346e9452ecb4f4508bed58fdf0cfbef83..b3307a9f5925fa18f79d67cfc8cbe35cbf2d4f76 100644
--- a/Source/core/css/resolver/StyleAdjuster.cpp
+++ b/Source/core/css/resolver/StyleAdjuster.cpp
@@ -197,55 +197,8 @@ void StyleAdjuster::adjustRenderStyle(RenderStyle* style, RenderStyle* parentSty
style->setOriginalDisplay(style->display());
if (style->display() != NONE) {
- // If we have a <td> that specifies a float property, in quirks mode we just drop the float
- // property.
- // Sites also commonly use display:inline/block on <td>s and <table>s. In quirks mode we force
- // these tags to retain their display types.
- if (m_useQuirksModeStyles && e) {
- if (e->hasTagName(tdTag)) {
- style->setDisplay(TABLE_CELL);
- style->setFloating(NoFloat);
- } else if (isHTMLTableElement(*e)) {
- style->setDisplay(style->isDisplayInlineType() ? INLINE_TABLE : TABLE);
- }
- }
-
- if (e && isHTMLTableCellElement(*e)) {
- if (style->whiteSpace() == KHTML_NOWRAP) {
- // Figure out if we are really nowrapping or if we should just
- // use normal instead. If the width of the cell is fixed, then
- // we don't actually use NOWRAP.
- if (style->width().isFixed())
- style->setWhiteSpace(NORMAL);
- else
- style->setWhiteSpace(NOWRAP);
- }
- }
-
- // Tables never support the -webkit-* values for text-align and will reset back to the default.
- if (isHTMLTableElement(e) && (style->textAlign() == WEBKIT_LEFT || style->textAlign() == WEBKIT_CENTER || style->textAlign() == WEBKIT_RIGHT))
- style->setTextAlign(TASTART);
-
- // Frames and framesets never honor position:relative or position:absolute. This is necessary to
- // fix a crash where a site tries to position these objects. They also never honor display.
- if (e && (isHTMLFrameElement(*e) || isHTMLFrameSetElement(*e))) {
- style->setPosition(StaticPosition);
- style->setDisplay(BLOCK);
- }
-
- // Ruby text does not support float or position. This might change with evolution of the specification.
- if (isHTMLRTElement(e)) {
- style->setPosition(StaticPosition);
- style->setFloating(NoFloat);
- }
-
- // FIXME: We shouldn't be overriding start/-webkit-auto like this. Do it in html.css instead.
- // Table headers with a text-align of -webkit-auto will change the text-align to center.
- if (e && e->hasTagName(thTag) && style->textAlign() == TASTART)
- style->setTextAlign(CENTER);
-
- if (isHTMLLegendElement(e))
- style->setDisplay(BLOCK);
+ if (e)
+ adjustStyleForTagName(style, parentStyle, *e);
// Per the spec, position 'static' and 'relative' in the top layer compute to 'absolute'.
if (isInTopLayer(e, style) && (style->position() == StaticPosition || style->position() == RelativePosition))
@@ -323,18 +276,6 @@ void StyleAdjuster::adjustRenderStyle(RenderStyle* style, RenderStyle* parentSty
style->setTransform(TransformOperations(makeIdentity));
}
- // Textarea considers overflow visible as auto.
- if (isHTMLTextAreaElement(e)) {
- style->setOverflowX(style->overflowX() == OVISIBLE ? OAUTO : style->overflowX());
- style->setOverflowY(style->overflowY() == OVISIBLE ? OAUTO : style->overflowY());
- }
-
- // For now, <marquee> requires an overflow clip to work properly.
- if (isHTMLMarqueeElement(e)) {
- style->setOverflowX(OHIDDEN);
- style->setOverflowY(OHIDDEN);
- }
-
if (doesNotInheritTextDecoration(style, e))
style->setTextDecorationsInEffect(style->textDecoration());
else
@@ -370,15 +311,6 @@ void StyleAdjuster::adjustRenderStyle(RenderStyle* style, RenderStyle* parentSty
style->adjustBackgroundLayers();
style->adjustMaskLayers();
- // Important: Intrinsic margins get added to controls before the theme has adjusted the style, since the theme will
- // alter fonts and heights/widths.
- if (e && e->isFormControlElement() && style->fontSize() >= 11) {
- // Don't apply intrinsic margins to image buttons. The designer knows how big the images are,
- // so we have to treat all image buttons as though they were explicitly sized.
- if (!isHTMLInputElement(*e) || !toHTMLInputElement(e)->isImageButton())
- addIntrinsicMargins(style);
- }
-
// Let the theme also have a crack at adjusting the style.
if (style->hasAppearance())
RenderTheme::theme().adjustStyle(style, e, m_cachedUAStyle);
@@ -420,4 +352,89 @@ void StyleAdjuster::adjustRenderStyle(RenderStyle* style, RenderStyle* parentSty
}
}
+void StyleAdjuster::adjustStyleForTagName(RenderStyle* style, RenderStyle* parentStyle, Element& element)
+{
+ // <div> and <span> are the most common elements on the web, we skip all the work for them.
+ if (isHTMLDivElement(element) || isHTMLSpanElement(element))
+ return;
+
+ if (isHTMLTableCellElement(element)) {
+ // If we have a <td> that specifies a float property, in quirks mode we just drop the float property.
+ // FIXME: Why is this only <td> and not <th>?
+ if (element.hasTagName(tdTag) && m_useQuirksModeStyles) {
+ style->setDisplay(TABLE_CELL);
+ style->setFloating(NoFloat);
+ }
+ // FIXME: We shouldn't be overriding start/-webkit-auto like this. Do it in html.css instead.
+ // Table headers with a text-align of -webkit-auto will change the text-align to center.
+ if (element.hasTagName(thTag) && style->textAlign() == TASTART)
+ style->setTextAlign(CENTER);
+ if (style->whiteSpace() == KHTML_NOWRAP) {
+ // Figure out if we are really nowrapping or if we should just
+ // use normal instead. If the width of the cell is fixed, then
+ // we don't actually use NOWRAP.
+ if (style->width().isFixed())
+ style->setWhiteSpace(NORMAL);
+ else
+ style->setWhiteSpace(NOWRAP);
+ }
+ return;
+ }
+
+ if (isHTMLTableElement(element)) {
+ // Sites commonly use display:inline/block on <td>s and <table>s. In quirks mode we force
+ // these tags to retain their display types.
+ if (m_useQuirksModeStyles)
+ style->setDisplay(style->isDisplayInlineType() ? INLINE_TABLE : TABLE);
+ // Tables never support the -webkit-* values for text-align and will reset back to the default.
+ if (style->textAlign() == WEBKIT_LEFT || style->textAlign() == WEBKIT_CENTER || style->textAlign() == WEBKIT_RIGHT)
+ style->setTextAlign(TASTART);
+ return;
+ }
+
+ if (isHTMLFrameElement(element) || isHTMLFrameSetElement(element)) {
+ // Frames and framesets never honor position:relative or position:absolute. This is necessary to
+ // fix a crash where a site tries to position these objects. They also never honor display.
+ style->setPosition(StaticPosition);
+ style->setDisplay(BLOCK);
+ return;
+ }
+
+ if (isHTMLRTElement(element)) {
+ // Ruby text does not support float or position. This might change with evolution of the specification.
+ style->setPosition(StaticPosition);
+ style->setFloating(NoFloat);
+ return;
+ }
+
+ if (isHTMLLegendElement(element)) {
+ style->setDisplay(BLOCK);
+ return;
+ }
+
+ if (isHTMLMarqueeElement(element)) {
+ // For now, <marquee> requires an overflow clip to work properly.
+ style->setOverflowX(OHIDDEN);
+ style->setOverflowY(OHIDDEN);
+ return;
+ }
+
+ if (element.isFormControlElement()) {
+ if (isHTMLTextAreaElement(element)) {
+ // Textarea considers overflow visible as auto.
+ style->setOverflowX(style->overflowX() == OVISIBLE ? OAUTO : style->overflowX());
+ style->setOverflowY(style->overflowY() == OVISIBLE ? OAUTO : style->overflowY());
+ }
+
+ // Important: Intrinsic margins get added to controls before the theme has adjusted the style,
+ // since the theme will alter fonts and heights/widths.
+ //
+ // Don't apply intrinsic margins to image buttons. The designer knows how big the images are,
+ // so we have to treat all image buttons as though they were explicitly sized.
+ if (style->fontSize() >= 11 && (!isHTMLInputElement(element) || !toHTMLInputElement(element).isImageButton()))
+ addIntrinsicMargins(style);
+ return;
+ }
+}
+
}
« 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