: m_invalidateCustomPseudo(false)
, m_wholeSubtreeInvalid(false)
, m_treeBoundaryCrossing(false)
+ , m_insertionPointCrossing(false)
{ }
void pushInvalidationSet(const DescendantInvalidationSet&);
void setWholeSubtreeInvalid() { m_wholeSubtreeInvalid = true; }
bool treeBoundaryCrossing() const { return m_treeBoundaryCrossing; }
+ bool insertionPointCrossing() const { return m_insertionPointCrossing; }
typedef Vector<const DescendantInvalidationSet*, 16> InvalidationSets;
InvalidationSets m_invalidationSets;
bool m_invalidateCustomPseudo;
bool m_wholeSubtreeInvalid;
bool m_treeBoundaryCrossing;
+ bool m_insertionPointCrossing;
};
bool invalidate(Element&, RecursionData&);
, m_prevInvalidateCustomPseudo(data->m_invalidateCustomPseudo)
, m_prevWholeSubtreeInvalid(data->m_wholeSubtreeInvalid)
, m_treeBoundaryCrossing(data->m_treeBoundaryCrossing)
+ , m_insertionPointCrossing(data->m_insertionPointCrossing)
, m_data(data)
{ }
~RecursionCheckpoint()
m_data->m_invalidateCustomPseudo = m_prevInvalidateCustomPseudo;
m_data->m_wholeSubtreeInvalid = m_prevWholeSubtreeInvalid;
m_data->m_treeBoundaryCrossing = m_treeBoundaryCrossing;
+ m_data->m_insertionPointCrossing = m_insertionPointCrossing;
}
private:
bool m_prevInvalidateCustomPseudo;
bool m_prevWholeSubtreeInvalid;
bool m_treeBoundaryCrossing;
+ bool m_insertionPointCrossing;
RecursionData* m_data;
};