Chromium Code Reviews| Index: Source/core/rendering/RenderObject.cpp |
| diff --git a/Source/core/rendering/RenderObject.cpp b/Source/core/rendering/RenderObject.cpp |
| index d55645e614dfe44aece0455d296605469d0c60a7..72f06006d92e78a6ccea892a57676319685818db 100644 |
| --- a/Source/core/rendering/RenderObject.cpp |
| +++ b/Source/core/rendering/RenderObject.cpp |
| @@ -2977,61 +2977,38 @@ static Color decorationColor(const RenderObject* object, RenderStyle* style) |
| return object->resolveColor(style, CSSPropertyWebkitTextFillColor); |
| } |
| -void RenderObject::getTextDecorations(unsigned decorations, AppliedTextDecoration& underline, AppliedTextDecoration& overline, AppliedTextDecoration& linethrough, bool quirksMode, bool firstlineStyle) |
| +static bool hasSimpleUnderline(RenderStyle* style) |
| +{ |
| + return style->textDecoration() & TextDecorationUnderline |
| + && style->textDecorationStyle() == TextDecorationStyleSolid; |
|
esprehn
2014/03/31 17:41:24
This should be a method on RenderStyle.
|
| +} |
| + |
| +Color RenderObject::getUnderlineColor(bool quirksMode, bool firstlineStyle) |
| { |
| RenderObject* curr = this; |
| - RenderStyle* styleToUse = 0; |
| - unsigned currDecs = TextDecorationNone; |
| - Color resultColor; |
| - TextDecorationStyle resultStyle; |
| do { |
| - styleToUse = curr->style(firstlineStyle); |
| - currDecs = styleToUse->textDecoration(); |
| - currDecs &= decorations; |
| - resultColor = decorationColor(this, styleToUse); |
| - resultStyle = styleToUse->textDecorationStyle(); |
| - // Parameter 'decorations' is cast as an int to enable the bitwise operations below. |
| - if (currDecs) { |
| - if (currDecs & TextDecorationUnderline) { |
| - decorations &= ~TextDecorationUnderline; |
| - underline.color = resultColor; |
| - underline.style = resultStyle; |
| - } |
| - if (currDecs & TextDecorationOverline) { |
| - decorations &= ~TextDecorationOverline; |
| - overline.color = resultColor; |
| - overline.style = resultStyle; |
| - } |
| - if (currDecs & TextDecorationLineThrough) { |
| - decorations &= ~TextDecorationLineThrough; |
| - linethrough.color = resultColor; |
| - linethrough.style = resultStyle; |
| - } |
| - } |
| - if (curr->isRubyText()) |
| - return; |
| + RenderStyle* styleToUse = curr->style(firstlineStyle); |
| + if (hasSimpleUnderline(styleToUse)) |
| + return styleToUse->visitedDependentDecorationColor(); |
| curr = curr->parent(); |
| if (curr && curr->isAnonymousBlock() && toRenderBlock(curr)->continuation()) |
| curr = toRenderBlock(curr)->continuation(); |
| - } while (curr && decorations && (!quirksMode || !curr->node() || (!isHTMLAnchorElement(*curr->node()) && !isHTMLFontElement(*curr->node())))); |
| + } while (curr && (!quirksMode || !curr->node() || (!isHTMLAnchorElement(*curr->node()) && !isHTMLFontElement(*curr->node())))); |
| // If we bailed out, use the element we bailed out at (typically a <font> or <a> element). |
| - if (decorations && curr) { |
| - styleToUse = curr->style(firstlineStyle); |
| - resultColor = decorationColor(this, styleToUse); |
| - if (decorations & TextDecorationUnderline) { |
| - underline.color = resultColor; |
| - underline.style = resultStyle; |
| - } |
| - if (decorations & TextDecorationOverline) { |
| - overline.color = resultColor; |
| - overline.style = resultStyle; |
| - } |
| - if (decorations & TextDecorationLineThrough) { |
| - linethrough.color = resultColor; |
| - linethrough.style = resultStyle; |
| - } |
| - } |
| + if (curr) |
| + return curr->style(firstlineStyle)->visitedDependentDecorationColor(); |
| + |
| + // If we can't find the originating element in the first-line styles, try again |
| + // with the regular styles. |
| + if (firstlineStyle) |
| + return getUnderlineColor(quirksMode, false); |
| + |
| + // If we reach this, it means we can't find the originating element for |
| + // the applied underline. It's probably incorrect that the underline is |
| + // applied. |
| + ASSERT_NOT_REACHED(); |
| + return Color(); |
| } |
| void RenderObject::addAnnotatedRegions(Vector<AnnotatedRegionValue>& regions) |