Bug 1269933 - Teach CounterStyles their name and remove the string member from the style structs. r=xidorn

This commit is contained in:
Bobby Holley 2016-05-04 11:42:08 -07:00
parent 7c027eb69c
commit 2dfd23a1ac
5 changed files with 39 additions and 22 deletions

View File

@ -590,6 +590,7 @@ protected:
}
public:
virtual void GetStyleName(nsSubstring& aResult) override;
virtual void GetPrefix(nsSubstring& aResult) override;
virtual void GetSuffix(nsSubstring& aResult) override;
virtual void GetSpokenCounterText(CounterValue aOrdinal,
@ -616,6 +617,16 @@ public:
NS_IMETHOD_(MozExternalRefCountType) Release() override { return 2; }
};
/* virtual */ void
BuiltinCounterStyle::GetStyleName(nsSubstring& aResult)
{
MOZ_ASSERT(mStyle != NS_STYLE_LIST_STYLE_CUSTOM);
const nsAFlatCString& str =
nsCSSProps::ValueToKeyword(mStyle, nsCSSProps::kListStyleKTable);
MOZ_ASSERT(!str.IsEmpty());
aResult.Assign(NS_ConvertUTF8toUTF16(str));
}
/* virtual */ void
BuiltinCounterStyle::GetPrefix(nsSubstring& aResult)
{
@ -1021,9 +1032,11 @@ class CustomCounterStyle final : public CounterStyle
private:
~CustomCounterStyle() {}
public:
CustomCounterStyle(CounterStyleManager* aManager,
CustomCounterStyle(const nsAString& aName,
CounterStyleManager* aManager,
nsCSSCounterStyleRule* aRule)
: CounterStyle(NS_STYLE_LIST_STYLE_CUSTOM),
mName(aName),
mManager(aManager),
mRule(aRule),
mRuleGeneration(aRule->GetGeneration()),
@ -1051,6 +1064,7 @@ public:
nsCSSCounterStyleRule* GetRule() const { return mRule; }
uint32_t GetRuleGeneration() const { return mRuleGeneration; }
virtual void GetStyleName(nsSubstring& aResult) override;
virtual void GetPrefix(nsSubstring& aResult) override;
virtual void GetSuffix(nsSubstring& aResult) override;
virtual void GetSpokenCounterText(CounterValue aOrdinal,
@ -1120,6 +1134,8 @@ private:
CounterStyle* GetExtends();
CounterStyle* GetExtendsRoot();
nsString mName;
// CounterStyleManager should always overlive any CounterStyle as it
// is owned by nsPresContext, and will be released after all nodes and
// frames are released.
@ -1214,6 +1230,12 @@ CustomCounterStyle::ResetDependentData()
}
}
/* virtual */ void
CustomCounterStyle::GetStyleName(nsSubstring& aResult)
{
aResult.Assign(mName);
}
/* virtual */ void
CustomCounterStyle::GetPrefix(nsSubstring& aResult)
{
@ -1716,6 +1738,12 @@ AnonymousCounterStyle::AnonymousCounterStyle(const nsCSSValue::Array* aParams)
mSymbols.Compact();
}
/* virtual */ void
AnonymousCounterStyle::GetStyleName(nsAString& aResult)
{
aResult.Truncate();
}
/* virtual */ void
AnonymousCounterStyle::GetPrefix(nsAString& aResult)
{
@ -2008,7 +2036,7 @@ CounterStyleManager::BuildCounterStyle(const nsSubstring& aName)
nsCSSCounterStyleRule* rule = styleSet->IsGecko() ?
styleSet->AsGecko()->CounterStyleRuleForName(aName) : nullptr;
if (rule) {
data = new (mPresContext) CustomCounterStyle(this, rule);
data = new (mPresContext) CustomCounterStyle(aName, this, rule);
} else {
int32_t type;
nsCSSKeyword keyword = nsCSSKeywords::LookupKeyword(aName);

View File

@ -51,6 +51,7 @@ public:
// styles are dependent for fallback.
bool IsDependentStyle() const;
virtual void GetStyleName(nsSubstring& aResult) = 0;
virtual void GetPrefix(nsSubstring& aResult) = 0;
virtual void GetSuffix(nsSubstring& aResult) = 0;
void GetCounterText(CounterValue aOrdinal,
@ -108,6 +109,7 @@ public:
explicit AnonymousCounterStyle(const nsSubstring& aContent);
explicit AnonymousCounterStyle(const nsCSSValue::Array* aValue);
virtual void GetStyleName(nsAString& aResult) override;
virtual void GetPrefix(nsAString& aResult) override;
virtual void GetSuffix(nsAString& aResult) override;
virtual bool IsBullet() override;

View File

@ -7809,9 +7809,7 @@ nsRuleNode::ComputeListData(void* aStartStruct,
case eCSSUnit_Unset:
case eCSSUnit_Inherit: {
conditions.SetUncacheable();
nsString type;
parentList->GetListStyleType(type);
list->SetListStyleType(type, parentList->GetCounterStyle());
list->SetCounterStyle(parentList->GetCounterStyle());
break;
}
case eCSSUnit_Initial:
@ -7826,8 +7824,7 @@ nsRuleNode::ComputeListData(void* aStartStruct,
case eCSSUnit_String: {
nsString str;
typeValue->GetStringValue(str);
list->SetListStyleType(NS_LITERAL_STRING(""),
new AnonymousCounterStyle(str));
list->SetCounterStyle(new AnonymousCounterStyle(str));
break;
}
case eCSSUnit_Enumerated: {
@ -7857,9 +7854,7 @@ nsRuleNode::ComputeListData(void* aStartStruct,
break;
}
case eCSSUnit_Symbols:
list->SetListStyleType(
NS_LITERAL_STRING(""),
new AnonymousCounterStyle(typeValue->GetArrayValue()));
list->SetCounterStyle(new AnonymousCounterStyle(typeValue->GetArrayValue()));
break;
case eCSSUnit_Null:
break;

View File

@ -597,8 +597,7 @@ nsChangeHint nsStyleOutline::CalcDifference(const nsStyleOutline& aOther) const
//
nsStyleList::nsStyleList(StyleStructContext aContext)
: mListStylePosition(NS_STYLE_LIST_STYLE_POSITION_OUTSIDE),
mListStyleType(NS_LITERAL_STRING("disc")),
mCounterStyle(aContext.BuildCounterStyle(mListStyleType))
mCounterStyle(aContext.BuildCounterStyle(NS_LITERAL_STRING("disc")))
{
MOZ_COUNT_CTOR(nsStyleList);
SetQuotesInitial();
@ -611,7 +610,6 @@ nsStyleList::~nsStyleList()
nsStyleList::nsStyleList(const nsStyleList& aSource)
: mListStylePosition(aSource.mListStylePosition),
mListStyleType(aSource.mListStyleType),
mCounterStyle(aSource.mCounterStyle),
mQuotes(aSource.mQuotes),
mImageRegion(aSource.mImageRegion)
@ -686,8 +684,6 @@ nsStyleList::CalcDifference(const nsStyleList& aOther) const
if (EqualImages(mListStyleImage, aOther.mListStyleImage) &&
mCounterStyle == aOther.mCounterStyle) {
if (mImageRegion.IsEqualInterior(aOther.mImageRegion)) {
if (mListStyleType != aOther.mListStyleType)
return nsChangeHint_NeutralChange;
return NS_STYLE_HINT_NONE;
}
if (mImageRegion.width == aOther.mImageRegion.width &&

View File

@ -1441,22 +1441,19 @@ struct MOZ_NEEDS_MEMMOVABLE_MEMBERS nsStyleList
mListStyleImage->LockImage();
}
void GetListStyleType(nsSubstring& aType) const { aType = mListStyleType; }
void GetListStyleType(nsSubstring& aType) const { mCounterStyle->GetStyleName(aType); }
mozilla::CounterStyle* GetCounterStyle() const
{
return mCounterStyle.get();
}
void SetListStyleType(const nsSubstring& aType,
mozilla::CounterStyle* aStyle)
void SetCounterStyle(mozilla::CounterStyle* aStyle)
{
mListStyleType = aType;
mCounterStyle = aStyle;
}
void SetListStyleType(const nsSubstring& aType,
nsPresContext* aPresContext)
{
SetListStyleType(aType, aPresContext->
CounterStyleManager()->BuildCounterStyle(aType));
SetCounterStyle(aPresContext->CounterStyleManager()->BuildCounterStyle(aType));
}
const nsStyleQuoteValues::QuotePairArray& GetQuotePairs() const;
@ -1468,7 +1465,6 @@ struct MOZ_NEEDS_MEMMOVABLE_MEMBERS nsStyleList
uint8_t mListStylePosition; // [inherited]
private:
nsString mListStyleType; // [inherited]
RefPtr<mozilla::CounterStyle> mCounterStyle; // [inherited]
RefPtr<imgRequestProxy> mListStyleImage; // [inherited]
RefPtr<nsStyleQuoteValues> mQuotes; // [inherited]