| 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 | 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights |
| 4 * reserved. | 4 * reserved. |
| 5 * Copyright (C) 2011 Adobe Systems Incorporated. All rights reserved. | 5 * Copyright (C) 2011 Adobe Systems Incorporated. All rights reserved. |
| 6 * | 6 * |
| 7 * This library is free software; you can redistribute it and/or | 7 * This library is free software; you can redistribute it and/or |
| 8 * modify it under the terms of the GNU Library General Public | 8 * modify it under the terms of the GNU Library General Public |
| 9 * License as published by the Free Software Foundation; either | 9 * License as published by the Free Software Foundation; either |
| 10 * version 2 of the License, or (at your option) any later version. | 10 * version 2 of the License, or (at your option) any later version. |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 72 // re-create the same structure for an accurate size comparison. | 72 // re-create the same structure for an accurate size comparison. |
| 73 struct SameSizeAsComputedStyle : public RefCounted<SameSizeAsComputedStyle> { | 73 struct SameSizeAsComputedStyle : public RefCounted<SameSizeAsComputedStyle> { |
| 74 struct ComputedStyleBase { | 74 struct ComputedStyleBase { |
| 75 unsigned m_bitfields[4]; | 75 unsigned m_bitfields[4]; |
| 76 } m_base; | 76 } m_base; |
| 77 | 77 |
| 78 void* dataRefs[7]; | 78 void* dataRefs[7]; |
| 79 void* ownPtrs[1]; | 79 void* ownPtrs[1]; |
| 80 void* dataRefSvgStyle; | 80 void* dataRefSvgStyle; |
| 81 | 81 |
| 82 struct InheritedData { | |
| 83 unsigned m_bitfields[1]; | |
| 84 } m_inheritedData; | |
| 85 | |
| 86 struct NonInheritedData { | 82 struct NonInheritedData { |
| 87 unsigned m_bitfields[1]; | 83 unsigned m_bitfields[1]; |
| 88 } m_nonInheritedData; | 84 } m_nonInheritedData; |
| 89 }; | 85 }; |
| 90 | 86 |
| 91 // If this assert fails, it means that size of ComputedStyle has changed. Please | 87 // If this assert fails, it means that size of ComputedStyle has changed. Please |
| 92 // check that you really *do* what to increase the size of ComputedStyle, then | 88 // check that you really *do* what to increase the size of ComputedStyle, then |
| 93 // update the SameSizeAsComputedStyle struct to match the updated storage of | 89 // update the SameSizeAsComputedStyle struct to match the updated storage of |
| 94 // ComputedStyle. | 90 // ComputedStyle. |
| 95 ASSERT_SIZE(ComputedStyle, SameSizeAsComputedStyle); | 91 ASSERT_SIZE(ComputedStyle, SameSizeAsComputedStyle); |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 146 : ComputedStyleBase(o), | 142 : ComputedStyleBase(o), |
| 147 RefCounted<ComputedStyle>(), | 143 RefCounted<ComputedStyle>(), |
| 148 m_box(o.m_box), | 144 m_box(o.m_box), |
| 149 m_visual(o.m_visual), | 145 m_visual(o.m_visual), |
| 150 m_background(o.m_background), | 146 m_background(o.m_background), |
| 151 m_surround(o.m_surround), | 147 m_surround(o.m_surround), |
| 152 m_rareNonInheritedData(o.m_rareNonInheritedData), | 148 m_rareNonInheritedData(o.m_rareNonInheritedData), |
| 153 m_rareInheritedData(o.m_rareInheritedData), | 149 m_rareInheritedData(o.m_rareInheritedData), |
| 154 m_styleInheritedData(o.m_styleInheritedData), | 150 m_styleInheritedData(o.m_styleInheritedData), |
| 155 m_svgStyle(o.m_svgStyle), | 151 m_svgStyle(o.m_svgStyle), |
| 156 m_inheritedData(o.m_inheritedData), | |
| 157 m_nonInheritedData(o.m_nonInheritedData) {} | 152 m_nonInheritedData(o.m_nonInheritedData) {} |
| 158 | 153 |
| 159 static StyleRecalcChange diffPseudoStyles(const ComputedStyle& oldStyle, | 154 static StyleRecalcChange diffPseudoStyles(const ComputedStyle& oldStyle, |
| 160 const ComputedStyle& newStyle) { | 155 const ComputedStyle& newStyle) { |
| 161 // If the pseudoStyles have changed, ensure layoutObject triggers setStyle. | 156 // If the pseudoStyles have changed, ensure layoutObject triggers setStyle. |
| 162 if (!oldStyle.hasAnyPublicPseudoStyles() && | 157 if (!oldStyle.hasAnyPublicPseudoStyles() && |
| 163 !newStyle.hasAnyPublicPseudoStyles()) | 158 !newStyle.hasAnyPublicPseudoStyles()) |
| 164 return NoChange; | 159 return NoChange; |
| 165 for (PseudoId pseudoId = FirstPublicPseudoId; | 160 for (PseudoId pseudoId = FirstPublicPseudoId; |
| 166 pseudoId < FirstInternalPseudoId; | 161 pseudoId < FirstInternalPseudoId; |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 328 if (isAtShadowBoundary == AtShadowBoundary) { | 323 if (isAtShadowBoundary == AtShadowBoundary) { |
| 329 // Even if surrounding content is user-editable, shadow DOM should act as a | 324 // Even if surrounding content is user-editable, shadow DOM should act as a |
| 330 // single unit, and not necessarily be editable | 325 // single unit, and not necessarily be editable |
| 331 EUserModify currentUserModify = userModify(); | 326 EUserModify currentUserModify = userModify(); |
| 332 m_rareInheritedData = inheritParent.m_rareInheritedData; | 327 m_rareInheritedData = inheritParent.m_rareInheritedData; |
| 333 setUserModify(currentUserModify); | 328 setUserModify(currentUserModify); |
| 334 } else { | 329 } else { |
| 335 m_rareInheritedData = inheritParent.m_rareInheritedData; | 330 m_rareInheritedData = inheritParent.m_rareInheritedData; |
| 336 } | 331 } |
| 337 m_styleInheritedData = inheritParent.m_styleInheritedData; | 332 m_styleInheritedData = inheritParent.m_styleInheritedData; |
| 338 m_inheritedData = inheritParent.m_inheritedData; | |
| 339 if (m_svgStyle != inheritParent.m_svgStyle) | 333 if (m_svgStyle != inheritParent.m_svgStyle) |
| 340 m_svgStyle.access()->inheritFrom(inheritParent.m_svgStyle.get()); | 334 m_svgStyle.access()->inheritFrom(inheritParent.m_svgStyle.get()); |
| 341 } | 335 } |
| 342 | 336 |
| 343 void ComputedStyle::copyNonInheritedFromCached(const ComputedStyle& other) { | 337 void ComputedStyle::copyNonInheritedFromCached(const ComputedStyle& other) { |
| 344 ComputedStyleBase::copyNonInheritedFromCached(other); | 338 ComputedStyleBase::copyNonInheritedFromCached(other); |
| 345 m_box = other.m_box; | 339 m_box = other.m_box; |
| 346 m_visual = other.m_visual; | 340 m_visual = other.m_visual; |
| 347 m_background = other.m_background; | 341 m_background = other.m_background; |
| 348 m_surround = other.m_surround; | 342 m_surround = other.m_surround; |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 470 } | 464 } |
| 471 | 465 |
| 472 bool ComputedStyle::independentInheritedEqual( | 466 bool ComputedStyle::independentInheritedEqual( |
| 473 const ComputedStyle& other) const { | 467 const ComputedStyle& other) const { |
| 474 return ComputedStyleBase::independentInheritedEqual(other); | 468 return ComputedStyleBase::independentInheritedEqual(other); |
| 475 } | 469 } |
| 476 | 470 |
| 477 bool ComputedStyle::nonIndependentInheritedEqual( | 471 bool ComputedStyle::nonIndependentInheritedEqual( |
| 478 const ComputedStyle& other) const { | 472 const ComputedStyle& other) const { |
| 479 return ComputedStyleBase::nonIndependentInheritedEqual(other) && | 473 return ComputedStyleBase::nonIndependentInheritedEqual(other) && |
| 480 m_inheritedData == other.m_inheritedData && | |
| 481 m_styleInheritedData == other.m_styleInheritedData && | 474 m_styleInheritedData == other.m_styleInheritedData && |
| 482 m_svgStyle->inheritedEqual(*other.m_svgStyle) && | 475 m_svgStyle->inheritedEqual(*other.m_svgStyle) && |
| 483 m_rareInheritedData == other.m_rareInheritedData; | 476 m_rareInheritedData == other.m_rareInheritedData; |
| 484 } | 477 } |
| 485 | 478 |
| 486 bool ComputedStyle::loadingCustomFontsEqual(const ComputedStyle& other) const { | 479 bool ComputedStyle::loadingCustomFontsEqual(const ComputedStyle& other) const { |
| 487 return font().loadingCustomFonts() == other.font().loadingCustomFonts(); | 480 return font().loadingCustomFonts() == other.font().loadingCustomFonts(); |
| 488 } | 481 } |
| 489 | 482 |
| 490 bool ComputedStyle::nonInheritedEqual(const ComputedStyle& other) const { | 483 bool ComputedStyle::nonInheritedEqual(const ComputedStyle& other) const { |
| 491 // compare everything except the pseudoStyle pointer | 484 // compare everything except the pseudoStyle pointer |
| 492 return ComputedStyleBase::nonInheritedEqual(other) && | 485 return ComputedStyleBase::nonInheritedEqual(other) && |
| 493 m_nonInheritedData == other.m_nonInheritedData && | 486 m_nonInheritedData == other.m_nonInheritedData && |
| 494 m_box == other.m_box && m_visual == other.m_visual && | 487 m_box == other.m_box && m_visual == other.m_visual && |
| 495 m_background == other.m_background && m_surround == other.m_surround && | 488 m_background == other.m_background && m_surround == other.m_surround && |
| 496 m_rareNonInheritedData == other.m_rareNonInheritedData && | 489 m_rareNonInheritedData == other.m_rareNonInheritedData && |
| 497 m_svgStyle->nonInheritedEqual(*other.m_svgStyle); | 490 m_svgStyle->nonInheritedEqual(*other.m_svgStyle); |
| 498 } | 491 } |
| 499 | 492 |
| 500 bool ComputedStyle::inheritedDataShared(const ComputedStyle& other) const { | 493 bool ComputedStyle::inheritedDataShared(const ComputedStyle& other) const { |
| 501 // This is a fast check that only looks if the data structures are shared. | 494 // This is a fast check that only looks if the data structures are shared. |
| 502 // TODO(sashab): Should ComputedStyleBase have an inheritedDataShared method? | 495 // TODO(sashab): Should ComputedStyleBase have an inheritedDataShared method? |
| 503 return ComputedStyleBase::inheritedEqual(other) && | 496 return ComputedStyleBase::inheritedEqual(other) && |
| 504 m_inheritedData == other.m_inheritedData && | |
| 505 m_styleInheritedData.get() == other.m_styleInheritedData.get() && | 497 m_styleInheritedData.get() == other.m_styleInheritedData.get() && |
| 506 m_svgStyle.get() == other.m_svgStyle.get() && | 498 m_svgStyle.get() == other.m_svgStyle.get() && |
| 507 m_rareInheritedData.get() == other.m_rareInheritedData.get(); | 499 m_rareInheritedData.get() == other.m_rareInheritedData.get(); |
| 508 } | 500 } |
| 509 | 501 |
| 510 static bool dependenceOnContentHeightHasChanged(const ComputedStyle& a, | 502 static bool dependenceOnContentHeightHasChanged(const ComputedStyle& a, |
| 511 const ComputedStyle& b) { | 503 const ComputedStyle& b) { |
| 512 // If top or bottom become auto/non-auto then it means we either have to solve | 504 // If top or bottom become auto/non-auto then it means we either have to solve |
| 513 // height based on the content or stop doing so | 505 // height based on the content or stop doing so |
| 514 // (http://www.w3.org/TR/CSS2/visudet.html#abs-non-replaced-height) | 506 // (http://www.w3.org/TR/CSS2/visudet.html#abs-non-replaced-height) |
| (...skipping 392 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 907 return true; | 899 return true; |
| 908 } | 900 } |
| 909 | 901 |
| 910 return false; | 902 return false; |
| 911 } | 903 } |
| 912 | 904 |
| 913 bool ComputedStyle::diffNeedsPaintInvalidationObject( | 905 bool ComputedStyle::diffNeedsPaintInvalidationObject( |
| 914 const ComputedStyle& other) const { | 906 const ComputedStyle& other) const { |
| 915 if (visibility() != other.visibility() || | 907 if (visibility() != other.visibility() || |
| 916 printColorAdjust() != other.printColorAdjust() || | 908 printColorAdjust() != other.printColorAdjust() || |
| 917 m_inheritedData.m_insideLink != other.m_inheritedData.m_insideLink || | 909 insideLink() != other.insideLink() || |
| 918 !m_surround->border.visuallyEqual(other.m_surround->border) || | 910 !m_surround->border.visuallyEqual(other.m_surround->border) || |
| 919 *m_background != *other.m_background) | 911 *m_background != *other.m_background) |
| 920 return true; | 912 return true; |
| 921 | 913 |
| 922 if (m_rareInheritedData.get() != other.m_rareInheritedData.get()) { | 914 if (m_rareInheritedData.get() != other.m_rareInheritedData.get()) { |
| 923 if (m_rareInheritedData->userModify != | 915 if (m_rareInheritedData->userModify != |
| 924 other.m_rareInheritedData->userModify || | 916 other.m_rareInheritedData->userModify || |
| 925 m_rareInheritedData->userSelect != | 917 m_rareInheritedData->userSelect != |
| 926 other.m_rareInheritedData->userSelect || | 918 other.m_rareInheritedData->userSelect || |
| 927 m_rareInheritedData->m_imageRendering != | 919 m_rareInheritedData->m_imageRendering != |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1059 diff.setNeedsRecomputeOverflow(); | 1051 diff.setNeedsRecomputeOverflow(); |
| 1060 } | 1052 } |
| 1061 | 1053 |
| 1062 if (!m_surround->border.visualOverflowEqual(other.m_surround->border)) | 1054 if (!m_surround->border.visualOverflowEqual(other.m_surround->border)) |
| 1063 diff.setNeedsRecomputeOverflow(); | 1055 diff.setNeedsRecomputeOverflow(); |
| 1064 | 1056 |
| 1065 if (!diff.needsFullPaintInvalidation()) { | 1057 if (!diff.needsFullPaintInvalidation()) { |
| 1066 if (m_styleInheritedData->color != other.m_styleInheritedData->color || | 1058 if (m_styleInheritedData->color != other.m_styleInheritedData->color || |
| 1067 m_styleInheritedData->visitedLinkColor != | 1059 m_styleInheritedData->visitedLinkColor != |
| 1068 other.m_styleInheritedData->visitedLinkColor || | 1060 other.m_styleInheritedData->visitedLinkColor || |
| 1069 m_inheritedData.m_hasSimpleUnderline != | 1061 m_hasSimpleUnderline != other.m_hasSimpleUnderline || |
| 1070 other.m_inheritedData.m_hasSimpleUnderline || | |
| 1071 m_visual->textDecoration != other.m_visual->textDecoration) { | 1062 m_visual->textDecoration != other.m_visual->textDecoration) { |
| 1072 diff.setTextDecorationOrColorChanged(); | 1063 diff.setTextDecorationOrColorChanged(); |
| 1073 } else if (m_rareNonInheritedData.get() != | 1064 } else if (m_rareNonInheritedData.get() != |
| 1074 other.m_rareNonInheritedData.get() && | 1065 other.m_rareNonInheritedData.get() && |
| 1075 (m_rareNonInheritedData->m_textDecorationStyle != | 1066 (m_rareNonInheritedData->m_textDecorationStyle != |
| 1076 other.m_rareNonInheritedData->m_textDecorationStyle || | 1067 other.m_rareNonInheritedData->m_textDecorationStyle || |
| 1077 m_rareNonInheritedData->m_textDecorationColor != | 1068 m_rareNonInheritedData->m_textDecorationColor != |
| 1078 other.m_rareNonInheritedData->m_textDecorationColor || | 1069 other.m_rareNonInheritedData->m_textDecorationColor || |
| 1079 m_rareNonInheritedData->m_visitedLinkTextDecorationColor != | 1070 m_rareNonInheritedData->m_visitedLinkTextDecorationColor != |
| 1080 other.m_rareNonInheritedData | 1071 other.m_rareNonInheritedData |
| (...skipping 622 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1703 return getFontDescription().hasSizeAdjust(); | 1694 return getFontDescription().hasSizeAdjust(); |
| 1704 } | 1695 } |
| 1705 FontWeight ComputedStyle::fontWeight() const { | 1696 FontWeight ComputedStyle::fontWeight() const { |
| 1706 return getFontDescription().weight(); | 1697 return getFontDescription().weight(); |
| 1707 } | 1698 } |
| 1708 FontStretch ComputedStyle::fontStretch() const { | 1699 FontStretch ComputedStyle::fontStretch() const { |
| 1709 return getFontDescription().stretch(); | 1700 return getFontDescription().stretch(); |
| 1710 } | 1701 } |
| 1711 | 1702 |
| 1712 TextDecoration ComputedStyle::textDecorationsInEffect() const { | 1703 TextDecoration ComputedStyle::textDecorationsInEffect() const { |
| 1713 if (m_inheritedData.m_hasSimpleUnderline) | 1704 if (m_hasSimpleUnderline) |
| 1714 return TextDecorationUnderline; | 1705 return TextDecorationUnderline; |
| 1715 if (!m_rareInheritedData->appliedTextDecorations) | 1706 if (!m_rareInheritedData->appliedTextDecorations) |
| 1716 return TextDecorationNone; | 1707 return TextDecorationNone; |
| 1717 | 1708 |
| 1718 int decorations = 0; | 1709 int decorations = 0; |
| 1719 | 1710 |
| 1720 const Vector<AppliedTextDecoration>& applied = appliedTextDecorations(); | 1711 const Vector<AppliedTextDecoration>& applied = appliedTextDecorations(); |
| 1721 | 1712 |
| 1722 for (size_t i = 0; i < applied.size(); ++i) | 1713 for (size_t i = 0; i < applied.size(); ++i) |
| 1723 decorations |= applied[i].lines(); | 1714 decorations |= applied[i].lines(); |
| 1724 | 1715 |
| 1725 return static_cast<TextDecoration>(decorations); | 1716 return static_cast<TextDecoration>(decorations); |
| 1726 } | 1717 } |
| 1727 | 1718 |
| 1728 const Vector<AppliedTextDecoration>& ComputedStyle::appliedTextDecorations() | 1719 const Vector<AppliedTextDecoration>& ComputedStyle::appliedTextDecorations() |
| 1729 const { | 1720 const { |
| 1730 if (m_inheritedData.m_hasSimpleUnderline) { | 1721 if (m_hasSimpleUnderline) { |
| 1731 DEFINE_STATIC_LOCAL( | 1722 DEFINE_STATIC_LOCAL( |
| 1732 Vector<AppliedTextDecoration>, underline, | 1723 Vector<AppliedTextDecoration>, underline, |
| 1733 (1, AppliedTextDecoration( | 1724 (1, AppliedTextDecoration( |
| 1734 TextDecorationUnderline, TextDecorationStyleSolid, | 1725 TextDecorationUnderline, TextDecorationStyleSolid, |
| 1735 visitedDependentColor(CSSPropertyTextDecorationColor)))); | 1726 visitedDependentColor(CSSPropertyTextDecorationColor)))); |
| 1736 // Since we only have one of these in memory, just update the color before | 1727 // Since we only have one of these in memory, just update the color before |
| 1737 // returning. | 1728 // returning. |
| 1738 underline.at(0).setColor( | 1729 underline.at(0).setColor( |
| 1739 visitedDependentColor(CSSPropertyTextDecorationColor)); | 1730 visitedDependentColor(CSSPropertyTextDecorationColor)); |
| 1740 return underline; | 1731 return underline; |
| (...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2005 DCHECK(list); | 1996 DCHECK(list); |
| 2006 if (!list->hasOneRef()) | 1997 if (!list->hasOneRef()) |
| 2007 list = list->copy(); | 1998 list = list->copy(); |
| 2008 | 1999 |
| 2009 for (size_t i = 0; i < list->size(); ++i) | 2000 for (size_t i = 0; i < list->size(); ++i) |
| 2010 list->at(i).setColor(overrideColor); | 2001 list->at(i).setColor(overrideColor); |
| 2011 } | 2002 } |
| 2012 | 2003 |
| 2013 void ComputedStyle::applyTextDecorations(const Color& parentTextDecorationColor, | 2004 void ComputedStyle::applyTextDecorations(const Color& parentTextDecorationColor, |
| 2014 bool overrideExistingColors) { | 2005 bool overrideExistingColors) { |
| 2015 if (getTextDecoration() == TextDecorationNone && | 2006 if (getTextDecoration() == TextDecorationNone && !m_hasSimpleUnderline && |
| 2016 !m_inheritedData.m_hasSimpleUnderline && | |
| 2017 !m_rareInheritedData->appliedTextDecorations) | 2007 !m_rareInheritedData->appliedTextDecorations) |
| 2018 return; | 2008 return; |
| 2019 | 2009 |
| 2020 // If there are any color changes or decorations set by this element, stop | 2010 // If there are any color changes or decorations set by this element, stop |
| 2021 // using m_hasSimpleUnderline. | 2011 // using m_hasSimpleUnderline. |
| 2022 Color currentTextDecorationColor = | 2012 Color currentTextDecorationColor = |
| 2023 visitedDependentColor(CSSPropertyTextDecorationColor); | 2013 visitedDependentColor(CSSPropertyTextDecorationColor); |
| 2024 if (m_inheritedData.m_hasSimpleUnderline && | 2014 if (m_hasSimpleUnderline && |
| 2025 (getTextDecoration() != TextDecorationNone || | 2015 (getTextDecoration() != TextDecorationNone || |
| 2026 currentTextDecorationColor != parentTextDecorationColor)) { | 2016 currentTextDecorationColor != parentTextDecorationColor)) { |
| 2027 m_inheritedData.m_hasSimpleUnderline = false; | 2017 m_hasSimpleUnderline = false; |
| 2028 addAppliedTextDecoration(AppliedTextDecoration(TextDecorationUnderline, | 2018 addAppliedTextDecoration(AppliedTextDecoration(TextDecorationUnderline, |
| 2029 TextDecorationStyleSolid, | 2019 TextDecorationStyleSolid, |
| 2030 parentTextDecorationColor)); | 2020 parentTextDecorationColor)); |
| 2031 } | 2021 } |
| 2032 if (overrideExistingColors && m_rareInheritedData->appliedTextDecorations) | 2022 if (overrideExistingColors && m_rareInheritedData->appliedTextDecorations) |
| 2033 overrideTextDecorationColors(currentTextDecorationColor); | 2023 overrideTextDecorationColors(currentTextDecorationColor); |
| 2034 if (getTextDecoration() == TextDecorationNone) | 2024 if (getTextDecoration() == TextDecorationNone) |
| 2035 return; | 2025 return; |
| 2036 DCHECK(!m_inheritedData.m_hasSimpleUnderline); | 2026 DCHECK(!m_hasSimpleUnderline); |
| 2037 // To save memory, we don't use AppliedTextDecoration objects in the common | 2027 // To save memory, we don't use AppliedTextDecoration objects in the common |
| 2038 // case of a single simple underline of currentColor. | 2028 // case of a single simple underline of currentColor. |
| 2039 TextDecoration decorationLines = getTextDecoration(); | 2029 TextDecoration decorationLines = getTextDecoration(); |
| 2040 TextDecorationStyle decorationStyle = getTextDecorationStyle(); | 2030 TextDecorationStyle decorationStyle = getTextDecorationStyle(); |
| 2041 bool isSimpleUnderline = decorationLines == TextDecorationUnderline && | 2031 bool isSimpleUnderline = decorationLines == TextDecorationUnderline && |
| 2042 decorationStyle == TextDecorationStyleSolid && | 2032 decorationStyle == TextDecorationStyleSolid && |
| 2043 textDecorationColor().isCurrentColor(); | 2033 textDecorationColor().isCurrentColor(); |
| 2044 if (isSimpleUnderline && !m_rareInheritedData->appliedTextDecorations) { | 2034 if (isSimpleUnderline && !m_rareInheritedData->appliedTextDecorations) { |
| 2045 m_inheritedData.m_hasSimpleUnderline = true; | 2035 m_hasSimpleUnderline = true; |
| 2046 return; | 2036 return; |
| 2047 } | 2037 } |
| 2048 | 2038 |
| 2049 addAppliedTextDecoration(AppliedTextDecoration( | 2039 addAppliedTextDecoration(AppliedTextDecoration( |
| 2050 decorationLines, decorationStyle, currentTextDecorationColor)); | 2040 decorationLines, decorationStyle, currentTextDecorationColor)); |
| 2051 } | 2041 } |
| 2052 | 2042 |
| 2053 void ComputedStyle::clearAppliedTextDecorations() { | 2043 void ComputedStyle::clearAppliedTextDecorations() { |
| 2054 m_inheritedData.m_hasSimpleUnderline = false; | 2044 m_hasSimpleUnderline = false; |
| 2055 | 2045 |
| 2056 if (m_rareInheritedData->appliedTextDecorations) | 2046 if (m_rareInheritedData->appliedTextDecorations) |
| 2057 m_rareInheritedData.access()->appliedTextDecorations = nullptr; | 2047 m_rareInheritedData.access()->appliedTextDecorations = nullptr; |
| 2058 } | 2048 } |
| 2059 | 2049 |
| 2060 void ComputedStyle::restoreParentTextDecorations( | 2050 void ComputedStyle::restoreParentTextDecorations( |
| 2061 const ComputedStyle& parentStyle) { | 2051 const ComputedStyle& parentStyle) { |
| 2062 m_inheritedData.m_hasSimpleUnderline = | 2052 m_hasSimpleUnderline = parentStyle.m_hasSimpleUnderline; |
| 2063 parentStyle.m_inheritedData.m_hasSimpleUnderline; | |
| 2064 if (m_rareInheritedData->appliedTextDecorations != | 2053 if (m_rareInheritedData->appliedTextDecorations != |
| 2065 parentStyle.m_rareInheritedData->appliedTextDecorations) | 2054 parentStyle.m_rareInheritedData->appliedTextDecorations) |
| 2066 m_rareInheritedData.access()->appliedTextDecorations = | 2055 m_rareInheritedData.access()->appliedTextDecorations = |
| 2067 parentStyle.m_rareInheritedData->appliedTextDecorations; | 2056 parentStyle.m_rareInheritedData->appliedTextDecorations; |
| 2068 } | 2057 } |
| 2069 | 2058 |
| 2070 void ComputedStyle::clearMultiCol() { | 2059 void ComputedStyle::clearMultiCol() { |
| 2071 m_rareNonInheritedData.access()->m_multiCol = nullptr; | 2060 m_rareNonInheritedData.access()->m_multiCol = nullptr; |
| 2072 m_rareNonInheritedData.access()->m_multiCol.init(); | 2061 m_rareNonInheritedData.access()->m_multiCol.init(); |
| 2073 } | 2062 } |
| (...skipping 424 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2498 if (value < 0) | 2487 if (value < 0) |
| 2499 fvalue -= 0.5f; | 2488 fvalue -= 0.5f; |
| 2500 else | 2489 else |
| 2501 fvalue += 0.5f; | 2490 fvalue += 0.5f; |
| 2502 } | 2491 } |
| 2503 | 2492 |
| 2504 return roundForImpreciseConversion<int>(fvalue / zoomFactor); | 2493 return roundForImpreciseConversion<int>(fvalue / zoomFactor); |
| 2505 } | 2494 } |
| 2506 | 2495 |
| 2507 } // namespace blink | 2496 } // namespace blink |
| OLD | NEW |