Bug 976787 part 2: Add the grid-template-areas property to the style system. r=dholbert

This commit is contained in:
Simon Sapin
2014-03-10 15:54:14 -07:00
parent 9c10be3e65
commit c0f201d73c
13 changed files with 397 additions and 6 deletions

View File

@@ -178,6 +178,10 @@ nsCSSValue::nsCSSValue(const nsCSSValue& aCopy)
else if (eCSSUnit_PairListDep == mUnit) {
mValue.mPairListDependent = aCopy.mValue.mPairListDependent;
}
else if (eCSSUnit_GridTemplateAreas == mUnit) {
mValue.mGridTemplateAreas = aCopy.mValue.mGridTemplateAreas;
mValue.mGridTemplateAreas->AddRef();
}
else {
NS_ABORT_IF_FALSE(false, "unknown unit");
}
@@ -250,6 +254,9 @@ bool nsCSSValue::operator==(const nsCSSValue& aOther) const
else if (eCSSUnit_PairList == mUnit) {
return *mValue.mPairList == *aOther.mValue.mPairList;
}
else if (eCSSUnit_GridTemplateAreas == mUnit) {
return *mValue.mGridTemplateAreas == *aOther.mValue.mGridTemplateAreas;
}
else {
return mValue.mFloat == aOther.mValue.mFloat;
}
@@ -336,6 +343,8 @@ void nsCSSValue::DoReset()
mValue.mSharedList->Release();
} else if (eCSSUnit_PairList == mUnit) {
mValue.mPairList->Release();
} else if (eCSSUnit_GridTemplateAreas == mUnit) {
mValue.mGridTemplateAreas->Release();
}
mUnit = eCSSUnit_Null;
}
@@ -587,6 +596,15 @@ void nsCSSValue::SetDependentPairListValue(nsCSSValuePairList* aList)
}
}
nsCSSValueGridTemplateAreas& nsCSSValue::SetGridTemplateAreas()
{
Reset();
mUnit = eCSSUnit_GridTemplateAreas;
mValue.mGridTemplateAreas = new nsCSSValueGridTemplateAreas;
mValue.mGridTemplateAreas->AddRef();
return *mValue.mGridTemplateAreas;
}
void nsCSSValue::SetAutoValue()
{
Reset();
@@ -1307,6 +1325,8 @@ nsCSSValue::AppendToString(nsCSSProperty aProperty, nsAString& aResult,
GetPairListValue()->AppendToString(aProperty, aResult, aSerialization);
break;
}
} else if (eCSSUnit_GridTemplateAreas == unit) {
GetGridTemplateAreas().AppendToString(aProperty, aResult, aSerialization);
}
switch (unit) {
@@ -1368,6 +1388,7 @@ nsCSSValue::AppendToString(nsCSSProperty aProperty, nsAString& aResult,
case eCSSUnit_SharedList: break;
case eCSSUnit_PairList: break;
case eCSSUnit_PairListDep: break;
case eCSSUnit_GridTemplateAreas: break;
case eCSSUnit_Inch: aResult.AppendLiteral("in"); break;
case eCSSUnit_Millimeter: aResult.AppendLiteral("mm"); break;
@@ -1509,6 +1530,11 @@ nsCSSValue::SizeOfExcludingThis(mozilla::MallocSizeOf aMallocSizeOf) const
case eCSSUnit_PairListDep:
break;
// GridTemplateAreas
case eCSSUnit_GridTemplateAreas:
n += mValue.mGridTemplateAreas->SizeOfIncludingThis(aMallocSizeOf);
break;
// Int: nothing extra to measure.
case eCSSUnit_Integer:
case eCSSUnit_Enumerated:
@@ -2335,3 +2361,28 @@ nsCSSCornerSizes::corners[4] = {
&nsCSSCornerSizes::mBottomRight,
&nsCSSCornerSizes::mBottomLeft,
};
void
nsCSSValueGridTemplateAreas::AppendToString(nsCSSProperty aProperty,
nsAString& aResult,
nsCSSValue::Serialization aValueSerialization) const
{
uint32_t length = mTemplates.Length();
if (length == 0) {
aResult.AppendLiteral("none");
} else {
nsStyleUtil::AppendEscapedCSSString(mTemplates[0], aResult);
for (uint32_t i = 1; i < length; i++) {
aResult.Append(char16_t(' '));
nsStyleUtil::AppendEscapedCSSString(mTemplates[i], aResult);
}
}
}
size_t
nsCSSValueGridTemplateAreas::SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const
{
size_t n = mNamedAreas.SizeOfExcludingThis(aMallocSizeOf);
n += mTemplates.SizeOfIncludingThis(aMallocSizeOf);
return n;
}