OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1999 Antti Koivisto (koivisto@kde.org) | 2 * Copyright (C) 1999 Antti Koivisto (koivisto@kde.org) |
3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights
reserved. | 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights
reserved. |
4 * Copyright (C) 2011 Adobe Systems Incorporated. All rights reserved. | 4 * Copyright (C) 2011 Adobe Systems Incorporated. All rights reserved. |
5 * | 5 * |
6 * This library is free software; you can redistribute it and/or | 6 * This library is free software; you can redistribute it and/or |
7 * modify it under the terms of the GNU Library General Public | 7 * modify it under the terms of the GNU Library General Public |
8 * License as published by the Free Software Foundation; either | 8 * License as published by the Free Software Foundation; either |
9 * version 2 of the License, or (at your option) any later version. | 9 * version 2 of the License, or (at your option) any later version. |
10 * | 10 * |
(...skipping 1253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1264 | 1264 |
1265 list->append(decoration); | 1265 list->append(decoration); |
1266 } | 1266 } |
1267 | 1267 |
1268 void RenderStyle::applyTextDecorations() | 1268 void RenderStyle::applyTextDecorations() |
1269 { | 1269 { |
1270 if (textDecoration() == TextDecorationNone) | 1270 if (textDecoration() == TextDecorationNone) |
1271 return; | 1271 return; |
1272 | 1272 |
1273 TextDecorationStyle style = textDecorationStyle(); | 1273 TextDecorationStyle style = textDecorationStyle(); |
1274 StyleColor styleColor = visitedDependentDecorationStyleColor(); | 1274 StyleColor styleColor = decorationColorIncludingFallback(insideLink() == Ins
ideVisitedLink); |
1275 | 1275 |
1276 int decorations = textDecoration(); | 1276 int decorations = textDecoration(); |
1277 | 1277 |
1278 if (decorations & TextDecorationUnderline) { | 1278 if (decorations & TextDecorationUnderline) { |
1279 // To save memory, we don't use AppliedTextDecoration objects in the | 1279 // To save memory, we don't use AppliedTextDecoration objects in the |
1280 // common case of a single simple underline. | 1280 // common case of a single simple underline. |
1281 AppliedTextDecoration underline(TextDecorationUnderline, style, styleCol
or); | 1281 AppliedTextDecoration underline(TextDecorationUnderline, style, styleCol
or); |
1282 | 1282 |
1283 if (!rareInheritedData->appliedTextDecorations && underline.isSimpleUnde
rline()) | 1283 if (!rareInheritedData->appliedTextDecorations && underline.isSimpleUnde
rline()) |
1284 inherited_flags.m_textUnderline = true; | 1284 inherited_flags.m_textUnderline = true; |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1375 const ShadowData& shadow = shadowList->shadows()[i]; | 1375 const ShadowData& shadow = shadowList->shadows()[i]; |
1376 if (shadow.style() == Inset) | 1376 if (shadow.style() == Inset) |
1377 continue; | 1377 continue; |
1378 float blurAndSpread = shadow.blur() + shadow.spread(); | 1378 float blurAndSpread = shadow.blur() + shadow.spread(); |
1379 | 1379 |
1380 top = std::min<LayoutUnit>(top, shadow.y() - blurAndSpread); | 1380 top = std::min<LayoutUnit>(top, shadow.y() - blurAndSpread); |
1381 bottom = std::max<LayoutUnit>(bottom, shadow.y() + blurAndSpread); | 1381 bottom = std::max<LayoutUnit>(bottom, shadow.y() + blurAndSpread); |
1382 } | 1382 } |
1383 } | 1383 } |
1384 | 1384 |
1385 StyleColor RenderStyle::visitedDependentDecorationStyleColor() const | 1385 StyleColor RenderStyle::decorationColorIncludingFallback(bool visitedLink) const |
1386 { | 1386 { |
1387 bool isVisited = insideLink() == InsideVisitedLink; | 1387 StyleColor styleColor = visitedLink ? visitedLinkTextDecorationColor() : tex
tDecorationColor(); |
1388 | |
1389 StyleColor styleColor = isVisited ? visitedLinkTextDecorationColor() : textD
ecorationColor(); | |
1390 | 1388 |
1391 if (!styleColor.isCurrentColor()) | 1389 if (!styleColor.isCurrentColor()) |
1392 return styleColor; | 1390 return styleColor; |
1393 | 1391 |
1394 if (textStrokeWidth()) { | 1392 if (textStrokeWidth()) { |
1395 // Prefer stroke color if possible, but not if it's fully transparent. | 1393 // Prefer stroke color if possible, but not if it's fully transparent. |
1396 StyleColor textStrokeStyleColor = isVisited ? visitedLinkTextStrokeColor
() : textStrokeColor(); | 1394 StyleColor textStrokeStyleColor = visitedLink ? visitedLinkTextStrokeCol
or() : textStrokeColor(); |
1397 if (!textStrokeStyleColor.isCurrentColor() && textStrokeStyleColor.color
().alpha()) | 1395 if (!textStrokeStyleColor.isCurrentColor() && textStrokeStyleColor.color
().alpha()) |
1398 return textStrokeStyleColor; | 1396 return textStrokeStyleColor; |
1399 } | 1397 } |
1400 | 1398 |
1401 return isVisited ? visitedLinkTextFillColor() : textFillColor(); | 1399 return visitedLink ? visitedLinkTextFillColor() : textFillColor(); |
1402 } | |
1403 | |
1404 Color RenderStyle::visitedDependentDecorationColor() const | |
1405 { | |
1406 bool isVisited = insideLink() == InsideVisitedLink; | |
1407 return visitedDependentDecorationStyleColor().resolve(isVisited ? visitedLin
kColor() : color()); | |
1408 } | 1400 } |
1409 | 1401 |
1410 Color RenderStyle::colorIncludingFallback(int colorProperty, bool visitedLink) c
onst | 1402 Color RenderStyle::colorIncludingFallback(int colorProperty, bool visitedLink) c
onst |
1411 { | 1403 { |
1412 StyleColor result(StyleColor::currentColor()); | 1404 StyleColor result(StyleColor::currentColor()); |
1413 EBorderStyle borderStyle = BNONE; | 1405 EBorderStyle borderStyle = BNONE; |
1414 switch (colorProperty) { | 1406 switch (colorProperty) { |
1415 case CSSPropertyBackgroundColor: | 1407 case CSSPropertyBackgroundColor: |
1416 result = visitedLink ? visitedLinkBackgroundColor() : backgroundColor(); | 1408 result = visitedLink ? visitedLinkBackgroundColor() : backgroundColor(); |
1417 break; | 1409 break; |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1454 break; | 1446 break; |
1455 case CSSPropertyLightingColor: | 1447 case CSSPropertyLightingColor: |
1456 result = lightingColor(); | 1448 result = lightingColor(); |
1457 break; | 1449 break; |
1458 case CSSPropertyStopColor: | 1450 case CSSPropertyStopColor: |
1459 result = stopColor(); | 1451 result = stopColor(); |
1460 break; | 1452 break; |
1461 case CSSPropertyWebkitTapHighlightColor: | 1453 case CSSPropertyWebkitTapHighlightColor: |
1462 result = tapHighlightColor(); | 1454 result = tapHighlightColor(); |
1463 break; | 1455 break; |
| 1456 case CSSPropertyTextDecorationColor: |
| 1457 result = decorationColorIncludingFallback(visitedLink); |
| 1458 break; |
1464 default: | 1459 default: |
1465 ASSERT_NOT_REACHED(); | 1460 ASSERT_NOT_REACHED(); |
1466 break; | 1461 break; |
1467 } | 1462 } |
1468 | 1463 |
1469 if (!result.isCurrentColor()) | 1464 if (!result.isCurrentColor()) |
1470 return result.color(); | 1465 return result.color(); |
1471 | 1466 |
1472 // FIXME: Treating styled borders with initial color differently causes prob
lems | 1467 // FIXME: Treating styled borders with initial color differently causes prob
lems |
1473 // See crbug.com/316559, crbug.com/276231 | 1468 // See crbug.com/316559, crbug.com/276231 |
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1755 horizontal || includeLogicalRightEdge); | 1750 horizontal || includeLogicalRightEdge); |
1756 | 1751 |
1757 edges[BSLeft] = BorderEdge(borderLeftWidth(), | 1752 edges[BSLeft] = BorderEdge(borderLeftWidth(), |
1758 visitedDependentColor(CSSPropertyBorderLeftColor), | 1753 visitedDependentColor(CSSPropertyBorderLeftColor), |
1759 borderLeftStyle(), | 1754 borderLeftStyle(), |
1760 borderLeftIsTransparent(), | 1755 borderLeftIsTransparent(), |
1761 !horizontal || includeLogicalLeftEdge); | 1756 !horizontal || includeLogicalLeftEdge); |
1762 } | 1757 } |
1763 | 1758 |
1764 } // namespace blink | 1759 } // namespace blink |
OLD | NEW |