Bug 1308963 - Part 1. Set initial value of mask-repeat as repeat.
MozReview-Commit-ID: 8VrPiEyKF4n
--- a/layout/style/nsCSSParser.cpp
+++ b/layout/style/nsCSSParser.cpp
@@ -12241,26 +12241,22 @@ CSSParserImpl::ParseImageLayersItem(
RefPtr<nsCSSValue::Array> positionXArr = nsCSSValue::Array::Create(2);
RefPtr<nsCSSValue::Array> positionYArr = nsCSSValue::Array::Create(2);
aState.mPositionX->mValue.SetArrayValue(positionXArr, eCSSUnit_Array);
aState.mPositionY->mValue.SetArrayValue(positionYArr, eCSSUnit_Array);
if (eCSSProperty_mask == aTable[nsStyleImageLayers::shorthand]) {
aState.mOrigin->mValue.SetIntValue(NS_STYLE_IMAGELAYER_ORIGIN_BORDER,
eCSSUnit_Enumerated);
- aState.mRepeat->mXValue.SetIntValue(NS_STYLE_IMAGELAYER_REPEAT_NO_REPEAT,
- eCSSUnit_Enumerated);
positionXArr->Item(1).SetPercentValue(0.5f);
positionYArr->Item(1).SetPercentValue(0.5f);
} else {
aState.mOrigin->mValue.SetIntValue(NS_STYLE_IMAGELAYER_ORIGIN_PADDING,
eCSSUnit_Enumerated);
- aState.mRepeat->mXValue.SetIntValue(NS_STYLE_IMAGELAYER_REPEAT_REPEAT,
- eCSSUnit_Enumerated);
positionXArr->Item(1).SetPercentValue(0.0f);
positionYArr->Item(1).SetPercentValue(0.0f);
}
aState.mSize->mXValue.SetAutoValue();
aState.mSize->mYValue.SetAutoValue();
aState.mComposite->mValue.SetIntValue(NS_STYLE_MASK_COMPOSITE_ADD,
--- a/layout/style/nsComputedDOMStyle.cpp
+++ b/layout/style/nsComputedDOMStyle.cpp
@@ -6137,17 +6137,17 @@ nsComputedDOMStyle::DoGetMask()
// a longhand.
if (svg->mMask.mImageCount > 1 ||
firstLayer.mClip != NS_STYLE_IMAGELAYER_CLIP_BORDER ||
firstLayer.mOrigin != NS_STYLE_IMAGELAYER_ORIGIN_BORDER ||
firstLayer.mComposite != NS_STYLE_MASK_COMPOSITE_ADD ||
firstLayer.mMaskMode != NS_STYLE_MASK_MODE_MATCH_SOURCE ||
!nsStyleImageLayers::IsInitialPositionForLayerType(
firstLayer.mPosition, nsStyleImageLayers::LayerType::Mask) ||
- !firstLayer.mRepeat.IsInitialValue(nsStyleImageLayers::LayerType::Mask) ||
+ !firstLayer.mRepeat.IsInitialValue() ||
!firstLayer.mSize.IsInitialValue() ||
!(firstLayer.mImage.GetType() == eStyleImageType_Null ||
firstLayer.mImage.GetType() == eStyleImageType_Image)) {
return nullptr;
}
RefPtr<nsROCSSPrimitiveValue> val = new nsROCSSPrimitiveValue;
--- a/layout/style/nsRuleNode.cpp
+++ b/layout/style/nsRuleNode.cpp
@@ -7254,17 +7254,17 @@ nsRuleNode::ComputeBackgroundData(void*
parentBG->mImage.mLayers,
&nsStyleImageLayers::Layer::mImage,
initialImage, parentBG->mImage.mImageCount,
bg->mImage.mImageCount,
maxItemCount, rebuild, conditions);
// background-repeat: enum, inherit, initial [pair list]
nsStyleImageLayers::Repeat initialRepeat;
- initialRepeat.SetInitialValues(nsStyleImageLayers::LayerType::Background);
+ initialRepeat.SetInitialValues();
SetImageLayerPairList(aContext, *aRuleData->ValueForBackgroundRepeat(),
bg->mImage.mLayers,
parentBG->mImage.mLayers,
&nsStyleImageLayers::Layer::mRepeat,
initialRepeat, parentBG->mImage.mRepeatCount,
bg->mImage.mRepeatCount, maxItemCount, rebuild,
conditions);
@@ -9955,17 +9955,17 @@ nsRuleNode::ComputeSVGResetData(void* aS
&nsStyleImageLayers::Layer::mSourceURI,
RefPtr<css::URLValueData>(),
parentSVGReset->mMask.mImageCount,
svgReset->mMask.mImageCount,
maxItemCount, rebuild, conditions);
// mask-repeat: enum, inherit, initial [pair list]
nsStyleImageLayers::Repeat initialRepeat;
- initialRepeat.SetInitialValues(nsStyleImageLayers::LayerType::Mask);
+ initialRepeat.SetInitialValues();
SetImageLayerPairList(aContext, *aRuleData->ValueForMaskRepeat(),
svgReset->mMask.mLayers,
parentSVGReset->mMask.mLayers,
&nsStyleImageLayers::Layer::mRepeat,
initialRepeat, parentSVGReset->mMask.mRepeatCount,
svgReset->mMask.mRepeatCount, maxItemCount, rebuild,
conditions);
--- a/layout/style/nsStyleStruct.cpp
+++ b/layout/style/nsStyleStruct.cpp
@@ -2760,43 +2760,16 @@ nsStyleImageLayers::Size::operator==(con
"bad mHeightType for aOther");
return mWidthType == aOther.mWidthType &&
mHeightType == aOther.mHeightType &&
(mWidthType != eLengthPercentage || mWidth == aOther.mWidth) &&
(mHeightType != eLengthPercentage || mHeight == aOther.mHeight);
}
-bool
-nsStyleImageLayers::Repeat::IsInitialValue(LayerType aType) const
-{
- if (aType == LayerType::Background) {
- return mXRepeat == NS_STYLE_IMAGELAYER_REPEAT_REPEAT &&
- mYRepeat == NS_STYLE_IMAGELAYER_REPEAT_REPEAT;
- } else {
- MOZ_ASSERT(aType == LayerType::Mask);
- return mXRepeat == NS_STYLE_IMAGELAYER_REPEAT_NO_REPEAT &&
- mYRepeat == NS_STYLE_IMAGELAYER_REPEAT_NO_REPEAT;
- }
-}
-
-void
-nsStyleImageLayers::Repeat::SetInitialValues(LayerType aType)
-{
- if (aType == LayerType::Background) {
- mXRepeat = NS_STYLE_IMAGELAYER_REPEAT_REPEAT;
- mYRepeat = NS_STYLE_IMAGELAYER_REPEAT_REPEAT;
- } else {
- MOZ_ASSERT(aType == LayerType::Mask);
-
- mXRepeat = NS_STYLE_IMAGELAYER_REPEAT_NO_REPEAT;
- mYRepeat = NS_STYLE_IMAGELAYER_REPEAT_NO_REPEAT;
- }
-}
-
nsStyleImageLayers::Layer::Layer()
: mClip(NS_STYLE_IMAGELAYER_CLIP_BORDER)
, mAttachment(NS_STYLE_IMAGELAYER_ATTACHMENT_SCROLL)
, mBlendMode(NS_STYLE_BLEND_NORMAL)
, mComposite(NS_STYLE_MASK_COMPOSITE_ADD)
, mMaskMode(NS_STYLE_MASK_MODE_MATCH_SOURCE)
{
mImage.SetNull();
@@ -2805,17 +2778,17 @@ nsStyleImageLayers::Layer::Layer()
nsStyleImageLayers::Layer::~Layer()
{
}
void
nsStyleImageLayers::Layer::Initialize(nsStyleImageLayers::LayerType aType)
{
- mRepeat.SetInitialValues(aType);
+ mRepeat.SetInitialValues();
float initialPositionValue =
nsStyleImageLayers::GetInitialPositionForLayerType(aType);
mPosition.SetInitialPercentValues(initialPositionValue);
if (aType == LayerType::Background) {
mOrigin = NS_STYLE_IMAGELAYER_ORIGIN_PADDING;
} else {
--- a/layout/style/nsStyleStruct.h
+++ b/layout/style/nsStyleStruct.h
@@ -740,25 +740,31 @@ struct nsStyleImageLayers {
struct Repeat;
friend struct Repeat;
struct Repeat {
uint8_t mXRepeat, mYRepeat;
// Initialize nothing
Repeat() {}
- bool IsInitialValue(LayerType aType) const;
+ bool IsInitialValue() const {
+ return mXRepeat == NS_STYLE_IMAGELAYER_REPEAT_REPEAT &&
+ mYRepeat == NS_STYLE_IMAGELAYER_REPEAT_REPEAT;
+ }
bool DependsOnPositioningAreaSize() const {
return mXRepeat == NS_STYLE_IMAGELAYER_REPEAT_SPACE ||
mYRepeat == NS_STYLE_IMAGELAYER_REPEAT_SPACE;
}
// Initialize to initial values
- void SetInitialValues(LayerType aType);
+ void SetInitialValues() {
+ mXRepeat = NS_STYLE_IMAGELAYER_REPEAT_REPEAT;
+ mYRepeat = NS_STYLE_IMAGELAYER_REPEAT_REPEAT;
+ }
bool operator==(const Repeat& aOther) const {
return mXRepeat == aOther.mXRepeat &&
mYRepeat == aOther.mYRepeat;
}
bool operator!=(const Repeat& aOther) const {
return !(*this == aOther);
}