Index: Source/core/dom/Node.h |
diff --git a/Source/core/dom/Node.h b/Source/core/dom/Node.h |
index cce831a769f2edc00b28ea5f7808fa1f672bb756..b85ca81ae2912c25d0182c7933ec4fcf379ea584 100644 |
--- a/Source/core/dom/Node.h |
+++ b/Source/core/dom/Node.h |
@@ -100,6 +100,21 @@ enum StyleChangeSource { |
StyleChangeFromRenderer |
}; |
+enum DynamicRestyleFlags { |
+ ChildrenAffectedByFocus = 1 << 0, |
+ ChildrenAffectedByHover = 1 << 1, |
+ ChildrenAffectedByActive = 1 << 2, |
+ ChildrenAffectedByDrag = 1 << 3, |
+ ChildrenAffectedByFirstChildRules = 1 << 4, |
+ ChildrenAffectedByLastChildRules = 1 << 5, |
+ ChildrenAffectedByDirectAdjacentRules = 1 << 6, |
+ ChildrenAffectedByIndirectAdjacentRules = 1 << 7, |
+ ChildrenAffectedByForwardPositionalRules = 1 << 8, |
+ ChildrenAffectedByBackwardPositionalRules = 1 << 9, |
+ |
+ NumberOfDynamicRestyleFlags = 10, |
+}; |
+ |
class NodeRareDataBase { |
public: |
RenderObject* renderer() const { return m_renderer; } |
@@ -377,6 +392,38 @@ public: |
bool shouldNotifyRendererWithIdenticalStyles() const { return getFlag(NotifyRendererWithIdenticalStyles); } |
+ bool childrenAffectedByFocus() const { return hasRestyleFlag(ChildrenAffectedByFocus); } |
ojan
2014/03/21 22:39:12
What isn't all this stuff on ContainerNode?
|
+ void setChildrenAffectedByFocus() { setRestyleFlag(ChildrenAffectedByFocus); } |
+ |
+ bool childrenAffectedByHover() const { return hasRestyleFlag(ChildrenAffectedByHover); } |
+ void setChildrenAffectedByHover() { setRestyleFlag(ChildrenAffectedByHover); } |
+ |
+ bool childrenAffectedByActive() const { return hasRestyleFlag(ChildrenAffectedByActive); } |
+ void setChildrenAffectedByActive() { setRestyleFlag(ChildrenAffectedByActive); } |
+ |
+ bool childrenAffectedByDrag() const { return hasRestyleFlag(ChildrenAffectedByDrag); } |
+ void setChildrenAffectedByDrag() { setRestyleFlag(ChildrenAffectedByDrag); } |
+ |
+ bool childrenAffectedByPositionalRules() const { return hasRestyleFlag(ChildrenAffectedByForwardPositionalRules) || hasRestyleFlag(ChildrenAffectedByBackwardPositionalRules); } |
+ |
+ bool childrenAffectedByFirstChildRules() const { return hasRestyleFlag(ChildrenAffectedByFirstChildRules); } |
+ void setChildrenAffectedByFirstChildRules() { setRestyleFlag(ChildrenAffectedByFirstChildRules); } |
+ |
+ bool childrenAffectedByLastChildRules() const { return hasRestyleFlag(ChildrenAffectedByLastChildRules); } |
+ void setChildrenAffectedByLastChildRules() { setRestyleFlag(ChildrenAffectedByLastChildRules); } |
+ |
+ bool childrenAffectedByDirectAdjacentRules() const { return hasRestyleFlag(ChildrenAffectedByDirectAdjacentRules); } |
+ void setChildrenAffectedByDirectAdjacentRules() { setRestyleFlag(ChildrenAffectedByDirectAdjacentRules); } |
+ |
+ bool childrenAffectedByIndirectAdjacentRules() const { return hasRestyleFlag(ChildrenAffectedByIndirectAdjacentRules); } |
+ void setChildrenAffectedByIndirectAdjacentRules() { setRestyleFlag(ChildrenAffectedByIndirectAdjacentRules); } |
+ |
+ bool childrenAffectedByForwardPositionalRules() const { return hasRestyleFlag(ChildrenAffectedByForwardPositionalRules); } |
+ void setChildrenAffectedByForwardPositionalRules() { setRestyleFlag(ChildrenAffectedByForwardPositionalRules); } |
+ |
+ bool childrenAffectedByBackwardPositionalRules() const { return hasRestyleFlag(ChildrenAffectedByBackwardPositionalRules); } |
+ void setChildrenAffectedByBackwardPositionalRules() { setRestyleFlag(ChildrenAffectedByBackwardPositionalRules); } |
+ |
void setIsLink(bool f); |
bool hasScopedHTMLStyleChild() const { return getFlag(HasScopedHTMLStyleChildFlag); } |
@@ -672,6 +719,9 @@ public: |
void setAlreadySpellChecked(bool flag) { setFlag(flag, AlreadySpellCheckedFlag); } |
bool isAlreadySpellChecked() { return getFlag(AlreadySpellCheckedFlag); } |
+ bool isFinishedParsingChildren() const { return getFlag(IsFinishedParsingChildrenFlag); } |
+ bool childrenSupportStyleSharing() const { return !hasRestyleFlags(); } |
+ |
private: |
enum NodeFlags { |
IsTextFlag = 1, |
@@ -728,6 +778,12 @@ private: |
void setFlag(NodeFlags mask) const { m_nodeFlags |= mask; } |
void clearFlag(NodeFlags mask) const { m_nodeFlags &= ~mask; } |
+ bool hasRestyleFlag(DynamicRestyleFlags mask) const { return hasRareData() && hasRestyleFlagInternal(mask); } |
+ bool hasRestyleFlags() const { return hasRareData() && hasRestyleFlagsInternal(); } |
+ void setRestyleFlag(DynamicRestyleFlags); |
+ bool hasRestyleFlagInternal(DynamicRestyleFlags) const; |
+ bool hasRestyleFlagsInternal() const; |
+ |
protected: |
enum ConstructionType { |
CreateOther = DefaultNodeFlags, |
@@ -786,7 +842,6 @@ protected: |
void markAncestorsWithChildNeedsStyleRecalc(); |
- bool isFinishedParsingChildren() const { return getFlag(IsFinishedParsingChildrenFlag); } |
void setIsFinishedParsingChildren(bool value) { setFlag(value, IsFinishedParsingChildrenFlag); } |
private: |