summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dom/smil/nsSMILCSSProperty.cpp1
-rw-r--r--layout/generic/nsFrame.cpp2
-rw-r--r--layout/style/nsRuleNode.cpp15
-rw-r--r--layout/style/nsStyleContext.cpp17
4 files changed, 27 insertions, 8 deletions
diff --git a/dom/smil/nsSMILCSSProperty.cpp b/dom/smil/nsSMILCSSProperty.cpp
index 14e428c05b..070f3489ed 100644
--- a/dom/smil/nsSMILCSSProperty.cpp
+++ b/dom/smil/nsSMILCSSProperty.cpp
@@ -195,6 +195,7 @@ nsSMILCSSProperty::IsPropertyAnimatable(nsCSSPropertyID aPropID)
// writing-mode
switch (aPropID) {
+ case eCSSProperty_caret_color:
case eCSSProperty_clip:
case eCSSProperty_clip_rule:
case eCSSProperty_clip_path:
diff --git a/layout/generic/nsFrame.cpp b/layout/generic/nsFrame.cpp
index 7f67c7d684..a9e6354abe 100644
--- a/layout/generic/nsFrame.cpp
+++ b/layout/generic/nsFrame.cpp
@@ -1831,7 +1831,7 @@ nsIFrame::DisplayCaret(nsDisplayListBuilder* aBuilder,
nscolor
nsIFrame::GetCaretColorAt(int32_t aOffset)
{
- return StyleColor()->CalcComplexColor(StyleUserInterface()->mCaretColor);
+ return nsLayoutUtils::GetColor(this, eCSSProperty_caret_color);
}
bool
diff --git a/layout/style/nsRuleNode.cpp b/layout/style/nsRuleNode.cpp
index 66345390e5..1136edee22 100644
--- a/layout/style/nsRuleNode.cpp
+++ b/layout/style/nsRuleNode.cpp
@@ -5142,6 +5142,13 @@ nsRuleNode::ComputeUserInterfaceData(void* aStartStruct,
{
COMPUTE_START_INHERITED(UserInterface, ui, parentUI)
+ auto setComplexColor = [&](const nsCSSValue* aValue,
+ StyleComplexColor nsStyleUserInterface::* aField) {
+ SetComplexColor<eUnsetInherit>(*aValue, parentUI->*aField,
+ StyleComplexColor::Auto(),
+ mPresContext, ui->*aField, conditions);
+ };
+
// cursor: enum, url, inherit
const nsCSSValue* cursorValue = aRuleData->ValueForCursor();
nsCSSUnit cursorUnit = cursorValue->GetUnit();
@@ -5214,12 +5221,8 @@ nsRuleNode::ComputeUserInterfaceData(void* aStartStruct,
NS_STYLE_POINTER_EVENTS_AUTO);
// caret-color: auto, color, inherit
- const nsCSSValue* caretColorValue = aRuleData->ValueForCaretColor();
- SetComplexColor<eUnsetInherit>(*caretColorValue,
- parentUI->mCaretColor,
- StyleComplexColor::Auto(),
- mPresContext,
- ui->mCaretColor, conditions);
+ setComplexColor(aRuleData->ValueForCaretColor(),
+ &nsStyleUserInterface::mCaretColor);
COMPUTE_END_INHERITED(UserInterface, ui)
}
diff --git a/layout/style/nsStyleContext.cpp b/layout/style/nsStyleContext.cpp
index 4b1a14897a..38b422bd73 100644
--- a/layout/style/nsStyleContext.cpp
+++ b/layout/style/nsStyleContext.cpp
@@ -1255,6 +1255,17 @@ nsStyleContext::CalcStyleDifferenceInternal(StyleContextLike* aNewContext,
}
}
+ // NB: Calling Peek on |this|, not |thisVis| (see above).
+ if (!change && PeekStyleUserInterface()) {
+ const nsStyleUserInterface *thisVisUserInterface = thisVis->StyleUserInterface();
+ const nsStyleUserInterface *otherVisUserInterface = otherVis->StyleUserInterface();
+ if (thisVisUserInterface->mCaretColor !=
+ otherVisUserInterface->mCaretColor) {
+ change = true;
+ }
+ }
+
+
if (change) {
hint |= nsChangeHint_RepaintFrame;
}
@@ -1487,6 +1498,9 @@ ExtractColor(nsCSSPropertyID aProperty,
case StyleAnimationValue::eUnit_ComplexColor:
return Some(aStyleContext->StyleColor()->
CalcComplexColor(val.GetStyleComplexColorValue()));
+ case StyleAnimationValue::eUnit_Auto:
+ return Some(aStyleContext->StyleColor()->
+ CalcComplexColor(StyleComplexColor::Auto()));
default:
return Nothing();
}
@@ -1508,7 +1522,8 @@ static const ColorIndexSet gVisitedIndices[2] = { { 0, 0 }, { 1, 0 } };
nscolor
nsStyleContext::GetVisitedDependentColor(nsCSSPropertyID aProperty)
{
- NS_ASSERTION(aProperty == eCSSProperty_color ||
+ NS_ASSERTION(aProperty == eCSSProperty_caret_color ||
+ aProperty == eCSSProperty_color ||
aProperty == eCSSProperty_background_color ||
aProperty == eCSSProperty_border_top_color ||
aProperty == eCSSProperty_border_right_color ||