зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1345804 part 2 - Add new AtomIdent unit to nsCSSValue. r=heycam
MozReview-Commit-ID: 4Qc3POvHrJg --HG-- extra : rebase_source : 80b4ca720db36d47fc0b9e69bd6c4f03de758ce2
This commit is contained in:
Родитель
cf27123d34
Коммит
404a4a6ca2
|
@ -226,6 +226,10 @@ nsCSSValue::nsCSSValue(const nsCSSValue& aCopy)
|
|||
mValue.mFontFamilyList = aCopy.mValue.mFontFamilyList;
|
||||
mValue.mFontFamilyList->AddRef();
|
||||
}
|
||||
else if (eCSSUnit_AtomIdent == mUnit) {
|
||||
mValue.mAtom = aCopy.mValue.mAtom;
|
||||
mValue.mAtom->AddRef();
|
||||
}
|
||||
else {
|
||||
MOZ_ASSERT(false, "unknown unit");
|
||||
}
|
||||
|
@ -321,6 +325,9 @@ bool nsCSSValue::operator==(const nsCSSValue& aOther) const
|
|||
else if (eCSSUnit_FontFamilyList == mUnit) {
|
||||
return *mValue.mFontFamilyList == *aOther.mValue.mFontFamilyList;
|
||||
}
|
||||
else if (eCSSUnit_AtomIdent == mUnit) {
|
||||
return mValue.mAtom == aOther.mValue.mAtom;
|
||||
}
|
||||
else {
|
||||
return mValue.mFloat == aOther.mValue.mFloat;
|
||||
}
|
||||
|
@ -453,6 +460,8 @@ void nsCSSValue::DoReset()
|
|||
DO_RELEASE(mGridTemplateAreas);
|
||||
} else if (eCSSUnit_FontFamilyList == mUnit) {
|
||||
DO_RELEASE(mFontFamilyList);
|
||||
} else if (eCSSUnit_AtomIdent == mUnit) {
|
||||
DO_RELEASE(mAtom);
|
||||
}
|
||||
mUnit = eCSSUnit_Null;
|
||||
}
|
||||
|
@ -975,6 +984,16 @@ nsCSSValue::BufferFromString(const nsString& aValue)
|
|||
return buffer.forget();
|
||||
}
|
||||
|
||||
void
|
||||
nsCSSValue::AtomizeIdentValue()
|
||||
{
|
||||
MOZ_ASSERT(mUnit == eCSSUnit_Ident);
|
||||
nsCOMPtr<nsIAtom> atom = NS_Atomize(GetStringBufferValue());
|
||||
Reset();
|
||||
mUnit = eCSSUnit_AtomIdent;
|
||||
mValue.mAtom = atom.forget().take();
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
||||
struct CSSValueSerializeCalcOps {
|
||||
|
@ -1966,6 +1985,9 @@ nsCSSValue::AppendToString(nsCSSPropertyID aProperty, nsAString& aResult,
|
|||
} else if (eCSSUnit_FontFamilyList == unit) {
|
||||
nsStyleUtil::AppendEscapedCSSFontFamilyList(*mValue.mFontFamilyList,
|
||||
aResult);
|
||||
} else if (eCSSUnit_AtomIdent == unit) {
|
||||
nsDependentAtomString buffer(GetAtomValue());
|
||||
nsStyleUtil::AppendEscapedCSSIdent(buffer, aResult);
|
||||
}
|
||||
|
||||
switch (unit) {
|
||||
|
@ -1986,6 +2008,7 @@ nsCSSValue::AppendToString(nsCSSPropertyID aProperty, nsAString& aResult,
|
|||
case eCSSUnit_FontFamilyList: break;
|
||||
case eCSSUnit_String: break;
|
||||
case eCSSUnit_Ident: break;
|
||||
case eCSSUnit_AtomIdent: break;
|
||||
case eCSSUnit_URL: break;
|
||||
case eCSSUnit_Image: break;
|
||||
case eCSSUnit_Element: break;
|
||||
|
@ -2183,6 +2206,10 @@ nsCSSValue::SizeOfExcludingThis(mozilla::MallocSizeOf aMallocSizeOf) const
|
|||
n += mValue.mFontFamilyList->SizeOfIncludingThis(aMallocSizeOf);
|
||||
break;
|
||||
|
||||
// Atom is always shared, and thus should not be counted.
|
||||
case eCSSUnit_AtomIdent:
|
||||
break;
|
||||
|
||||
// Int: nothing extra to measure.
|
||||
case eCSSUnit_Integer:
|
||||
case eCSSUnit_Enumerated:
|
||||
|
|
|
@ -34,6 +34,7 @@
|
|||
#include <type_traits>
|
||||
|
||||
class imgRequestProxy;
|
||||
class nsIAtom;
|
||||
class nsIContent;
|
||||
class nsIDocument;
|
||||
class nsIPrincipal;
|
||||
|
@ -491,6 +492,9 @@ enum nsCSSUnit {
|
|||
|
||||
eCSSUnit_FontFamilyList = 58, // (FontFamilyList*) value
|
||||
|
||||
// Atom units
|
||||
eCSSUnit_AtomIdent = 60, // (nsIAtom*) for its string as an identifier
|
||||
|
||||
eCSSUnit_Integer = 70, // (int) simple value
|
||||
eCSSUnit_Enumerated = 71, // (int) value has enumerated meaning
|
||||
|
||||
|
@ -880,6 +884,11 @@ public:
|
|||
return mValue.mFloatColor;
|
||||
}
|
||||
|
||||
nsIAtom* GetAtomValue() const {
|
||||
MOZ_ASSERT(mUnit == eCSSUnit_AtomIdent);
|
||||
return mValue.mAtom;
|
||||
}
|
||||
|
||||
void Reset() // sets to null
|
||||
{
|
||||
if (mUnit != eCSSUnit_Null)
|
||||
|
@ -964,6 +973,9 @@ public:
|
|||
static already_AddRefed<nsStringBuffer>
|
||||
BufferFromString(const nsString& aValue);
|
||||
|
||||
// Convert the given Ident value into AtomIdent.
|
||||
void AtomizeIdentValue();
|
||||
|
||||
size_t SizeOfExcludingThis(mozilla::MallocSizeOf aMallocSizeOf) const;
|
||||
|
||||
static void
|
||||
|
@ -1008,6 +1020,7 @@ protected:
|
|||
// If we're of a string type, mString is not null.
|
||||
nsStringBuffer* MOZ_OWNING_REF mString;
|
||||
nscolor mColor;
|
||||
nsIAtom* MOZ_OWNING_REF mAtom;
|
||||
Array* MOZ_OWNING_REF mArray;
|
||||
mozilla::css::URLValue* MOZ_OWNING_REF mURL;
|
||||
mozilla::css::ImageValue* MOZ_OWNING_REF mImage;
|
||||
|
|
Загрузка…
Ссылка в новой задаче