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

Side by Side Diff: Source/core/rendering/RenderObject.cpp

Issue 219633002: Proper support for multiple text decorations. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Fix jchaffraix' issues. Created 6 years, 7 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2000 Dirk Mueller (mueller@kde.org) 4 * (C) 2000 Dirk Mueller (mueller@kde.org)
5 * (C) 2004 Allan Sandfeld Jensen (kde@carewolf.com) 5 * (C) 2004 Allan Sandfeld Jensen (kde@carewolf.com)
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2011 Apple Inc. All rights reserv ed. 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2011 Apple Inc. All rights reserv ed.
7 * Copyright (C) 2009 Google Inc. All rights reserved. 7 * Copyright (C) 2009 Google Inc. All rights reserved.
8 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo bile.com/) 8 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo bile.com/)
9 * 9 *
10 * This library is free software; you can redistribute it and/or 10 * This library is free software; you can redistribute it and/or
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
67 #include "core/rendering/RenderMarquee.h" 67 #include "core/rendering/RenderMarquee.h"
68 #include "core/rendering/RenderScrollbarPart.h" 68 #include "core/rendering/RenderScrollbarPart.h"
69 #include "core/rendering/RenderTableCaption.h" 69 #include "core/rendering/RenderTableCaption.h"
70 #include "core/rendering/RenderTableCell.h" 70 #include "core/rendering/RenderTableCell.h"
71 #include "core/rendering/RenderTableCol.h" 71 #include "core/rendering/RenderTableCol.h"
72 #include "core/rendering/RenderTableRow.h" 72 #include "core/rendering/RenderTableRow.h"
73 #include "core/rendering/RenderTheme.h" 73 #include "core/rendering/RenderTheme.h"
74 #include "core/rendering/RenderView.h" 74 #include "core/rendering/RenderView.h"
75 #include "core/rendering/compositing/CompositedLayerMapping.h" 75 #include "core/rendering/compositing/CompositedLayerMapping.h"
76 #include "core/rendering/compositing/RenderLayerCompositor.h" 76 #include "core/rendering/compositing/RenderLayerCompositor.h"
77 #include "core/rendering/style/AppliedTextDecoration.h"
77 #include "core/rendering/style/ContentData.h" 78 #include "core/rendering/style/ContentData.h"
78 #include "core/rendering/style/CursorList.h" 79 #include "core/rendering/style/CursorList.h"
79 #include "core/rendering/style/ShadowList.h" 80 #include "core/rendering/style/ShadowList.h"
80 #include "core/rendering/svg/SVGRenderSupport.h" 81 #include "core/rendering/svg/SVGRenderSupport.h"
81 #include "platform/JSONValues.h" 82 #include "platform/JSONValues.h"
82 #include "platform/Partitions.h" 83 #include "platform/Partitions.h"
83 #include "platform/TraceEvent.h" 84 #include "platform/TraceEvent.h"
84 #include "platform/TracedValue.h" 85 #include "platform/TracedValue.h"
85 #include "platform/geometry/TransformState.h" 86 #include "platform/geometry/TransformState.h"
86 #include "platform/graphics/GraphicsContext.h" 87 #include "platform/graphics/GraphicsContext.h"
(...skipping 2974 matching lines...) Expand 10 before | Expand all | Expand 10 after
3061 if (style->textStrokeWidth() > 0) { 3062 if (style->textStrokeWidth() > 0) {
3062 // Prefer stroke color if possible but not if it's fully transparent. 3063 // Prefer stroke color if possible but not if it's fully transparent.
3063 Color textStrokeColor = object->resolveColor(style, CSSPropertyWebkitTex tStrokeColor); 3064 Color textStrokeColor = object->resolveColor(style, CSSPropertyWebkitTex tStrokeColor);
3064 if (textStrokeColor.alpha()) 3065 if (textStrokeColor.alpha())
3065 return textStrokeColor; 3066 return textStrokeColor;
3066 } 3067 }
3067 3068
3068 return object->resolveColor(style, CSSPropertyWebkitTextFillColor); 3069 return object->resolveColor(style, CSSPropertyWebkitTextFillColor);
3069 } 3070 }
3070 3071
3071 void RenderObject::getTextDecorations(unsigned decorations, AppliedTextDecoratio n& underline, AppliedTextDecoration& overline, AppliedTextDecoration& linethroug h, bool quirksMode, bool firstlineStyle) 3072 RenderObject::ResolvedDecoration::ResolvedDecoration()
3073 : line(TextDecorationUnderline)
3074 , style(TextDecorationStyleSolid)
3072 { 3075 {
3076 }
3077
3078 RenderObject::ResolvedDecoration::ResolvedDecoration(const AppliedTextDecoration & decoration, const Color& color)
3079 : line(decoration.line())
3080 , style(decoration.style())
3081 , color(color)
3082 {
3083 }
3084
3085 static RenderStyle* decorationStyle(RenderObject* renderObject, bool firstlineSt yle, TextDecoration decoration)
3086 {
3087 RenderStyle* styleToUse = renderObject->style(firstlineStyle);
3088
3089 if (styleToUse->textDecoration() == decoration)
3090 return styleToUse;
3091 if (!firstlineStyle)
3092 return nullptr;
3093
3094 styleToUse = renderObject->style(false);
3095 return styleToUse->textDecoration() == decoration ? styleToUse : nullptr;
3096 }
3097
3098 void RenderObject::resolvedDecorations(bool firstlineStyle, const Vector<Applied TextDecoration>& decorations, ResolvedDecorationVector& resolved)
3099 {
3100 ASSERT(decorations.size());
3101
3102 bool quirksMode = document().inQuirksMode();
3103
3073 RenderObject* curr = this; 3104 RenderObject* curr = this;
3074 RenderStyle* styleToUse = 0; 3105 Vector<AppliedTextDecoration>::const_reverse_iterator decoration = decoratio ns.rbegin();
3075 unsigned currDecs = TextDecorationNone; 3106
3076 Color resultColor;
3077 TextDecorationStyle resultStyle;
3078 do { 3107 do {
3079 styleToUse = curr->style(firstlineStyle); 3108 if (!curr->isText()) {
3080 currDecs = styleToUse->textDecoration(); 3109 RenderStyle* styleToUse = decorationStyle(curr, firstlineStyle, deco ration->line());
3081 currDecs &= decorations; 3110 if (styleToUse) {
3082 resultColor = decorationColor(this, styleToUse); 3111 resolved.append(RenderObject::ResolvedDecoration(*decoration, st yleToUse->visitedDependentDecorationColor()));
3083 resultStyle = styleToUse->textDecorationStyle(); 3112 ++decoration;
3084 // Parameter 'decorations' is cast as an int to enable the bitwise opera tions below.
3085 if (currDecs) {
3086 if (currDecs & TextDecorationUnderline) {
3087 decorations &= ~TextDecorationUnderline;
3088 underline.color = resultColor;
3089 underline.style = resultStyle;
3090 }
3091 if (currDecs & TextDecorationOverline) {
3092 decorations &= ~TextDecorationOverline;
3093 overline.color = resultColor;
3094 overline.style = resultStyle;
3095 }
3096 if (currDecs & TextDecorationLineThrough) {
3097 decorations &= ~TextDecorationLineThrough;
3098 linethrough.color = resultColor;
3099 linethrough.style = resultStyle;
3100 } 3113 }
3101 } 3114 }
3102 if (curr->isRubyText())
3103 return;
3104 curr = curr->parent(); 3115 curr = curr->parent();
3105 if (curr && curr->isAnonymousBlock() && toRenderBlock(curr)->continuatio n()) 3116 if (curr && curr->isAnonymousBlock() && toRenderBlock(curr)->continuatio n())
3106 curr = toRenderBlock(curr)->continuation(); 3117 curr = toRenderBlock(curr)->continuation();
3107 } while (curr && decorations && (!quirksMode || !curr->node() || (!isHTMLAnc horElement(*curr->node()) && !isHTMLFontElement(*curr->node())))); 3118 } while (curr && (decoration != decorations.rend()) && (!quirksMode || !curr ->node() || (!isHTMLAnchorElement(*curr->node()) && !isHTMLFontElement(*curr->no de()))));
3108 3119
3109 // If we bailed out, use the element we bailed out at (typically a <font> or <a> element). 3120 // If we bailed out, use the element we bailed out at (typically a <font> or <a> element).
3110 if (decorations && curr) { 3121 if (curr && (decoration != decorations.rend())) {
3111 styleToUse = curr->style(firstlineStyle); 3122 RenderStyle* styleToUse = decorationStyle(curr, firstlineStyle, decorati on->line());
3112 resultColor = decorationColor(this, styleToUse); 3123 if (styleToUse)
3113 if (decorations & TextDecorationUnderline) { 3124 resolved.append(RenderObject::ResolvedDecoration(*decoration, styleT oUse->visitedDependentDecorationColor()));
3114 underline.color = resultColor;
3115 underline.style = resultStyle;
3116 }
3117 if (decorations & TextDecorationOverline) {
3118 overline.color = resultColor;
3119 overline.style = resultStyle;
3120 }
3121 if (decorations & TextDecorationLineThrough) {
3122 linethrough.color = resultColor;
3123 linethrough.style = resultStyle;
3124 }
3125 } 3125 }
3126 } 3126 }
3127 3127
3128 void RenderObject::addAnnotatedRegions(Vector<AnnotatedRegionValue>& regions) 3128 void RenderObject::addAnnotatedRegions(Vector<AnnotatedRegionValue>& regions)
3129 { 3129 {
3130 // Convert the style regions to absolute coordinates. 3130 // Convert the style regions to absolute coordinates.
3131 if (style()->visibility() != VISIBLE || !isBox()) 3131 if (style()->visibility() != VISIBLE || !isBox())
3132 return; 3132 return;
3133 3133
3134 if (style()->getDraggableRegionMode() == DraggableRegionNone) 3134 if (style()->getDraggableRegionMode() == DraggableRegionNone)
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after
3436 { 3436 {
3437 if (object1) { 3437 if (object1) {
3438 const WebCore::RenderObject* root = object1; 3438 const WebCore::RenderObject* root = object1;
3439 while (root->parent()) 3439 while (root->parent())
3440 root = root->parent(); 3440 root = root->parent();
3441 root->showRenderTreeAndMark(object1, "*", object2, "-", 0); 3441 root->showRenderTreeAndMark(object1, "*", object2, "-", 0);
3442 } 3442 }
3443 } 3443 }
3444 3444
3445 #endif 3445 #endif
OLDNEW
« no previous file with comments | « Source/core/rendering/RenderObject.h ('k') | Source/core/rendering/style/AppliedTextDecoration.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698