Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(253)

Side by Side Diff: third_party/WebKit/Source/core/dom/ElementData.h

Issue 1898403002: [WIP] Implement :dir() (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase... other changes too probably Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google Inc. All rights reserved.
3 * Copyright (C) 2014 Apple Inc. All rights reserved. 3 * Copyright (C) 2014 Apple Inc. All rights reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are 6 * modification, are permitted provided that the following conditions are
7 * met: 7 * met:
8 * 8 *
9 * * Redistributions of source code must retain the above copyright 9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
(...skipping 26 matching lines...) Expand all
37 #include "core/dom/SpaceSplitString.h" 37 #include "core/dom/SpaceSplitString.h"
38 #include "platform/heap/Handle.h" 38 #include "platform/heap/Handle.h"
39 #include "wtf/text/AtomicString.h" 39 #include "wtf/text/AtomicString.h"
40 40
41 namespace blink { 41 namespace blink {
42 42
43 class ShareableElementData; 43 class ShareableElementData;
44 class StylePropertySet; 44 class StylePropertySet;
45 class UniqueElementData; 45 class UniqueElementData;
46 46
47 enum class CachedTextDirection {
48 NotAutoOrNotCached,
49 AutoLTR,
50 AutoRTL,
51 // This should also have a state like AutoInherit as it is possible for
52 // an element with dir=auto to end up inheriting its parent's directionality
53 // but we currently don't handle that correctly.
54 };
55
47 // ElementData represents very common, but not necessarily unique to an element, 56 // ElementData represents very common, but not necessarily unique to an element,
48 // data such as attributes, inline style, and parsed class names and ids. 57 // data such as attributes, inline style, and parsed class names and ids.
49 class ElementData : public GarbageCollectedFinalized<ElementData> { 58 class ElementData : public GarbageCollectedFinalized<ElementData> {
50 public: 59 public:
51 // Override GarbageCollectedFinalized's finalizeGarbageCollectedObject to 60 // Override GarbageCollectedFinalized's finalizeGarbageCollectedObject to
52 // dispatch to the correct subclass destructor. 61 // dispatch to the correct subclass destructor.
53 void finalizeGarbageCollectedObject(); 62 void finalizeGarbageCollectedObject();
54 63
55 void clearClass() const { m_classNames.clear(); } 64 void clearClass() const { m_classNames.clear(); }
56 void setClass(const AtomicString& className, bool shouldFoldCase) const { m_ classNames.set(shouldFoldCase ? className.lowerASCII() : className , SpaceSplitS tring::ShouldNotFoldCase); } 65 void setClass(const AtomicString& className, bool shouldFoldCase) const { m_ classNames.set(shouldFoldCase ? className.lowerASCII() : className , SpaceSplitS tring::ShouldNotFoldCase); }
57 const SpaceSplitString& classNames() const { return m_classNames; } 66 const SpaceSplitString& classNames() const { return m_classNames; }
58 67
59 const AtomicString& idForStyleResolution() const { return m_idForStyleResolu tion; } 68 const AtomicString& idForStyleResolution() const { return m_idForStyleResolu tion; }
60 void setIdForStyleResolution(const AtomicString& newId) const { m_idForStyle Resolution = newId; } 69 void setIdForStyleResolution(const AtomicString& newId) const { m_idForStyle Resolution = newId; }
61 70
62 const StylePropertySet* inlineStyle() const { return m_inlineStyle.get(); } 71 const StylePropertySet* inlineStyle() const { return m_inlineStyle.get(); }
63 72
64 const StylePropertySet* presentationAttributeStyle() const; 73 const StylePropertySet* presentationAttributeStyle() const;
65 74
66 AttributeCollection attributes() const; 75 AttributeCollection attributes() const;
67 76
68 bool hasID() const { return !m_idForStyleResolution.isNull(); } 77 bool hasID() const { return !m_idForStyleResolution.isNull(); }
69 bool hasClass() const { return !m_classNames.isNull(); } 78 bool hasClass() const { return !m_classNames.isNull(); }
70 79
71 bool isEquivalent(const ElementData* other) const; 80 bool isEquivalent(const ElementData* other) const;
72 81
73 bool isUnique() const { return m_isUnique; } 82 bool isUnique() const { return m_isUnique; }
74 83
84 CachedTextDirection directionality() const { return static_cast<CachedTextDi rection>(m_directionality); }
85 void setDirectionality(CachedTextDirection directionality) const { m_directi onality = static_cast<int>(directionality); }
86
75 DECLARE_TRACE_AFTER_DISPATCH(); 87 DECLARE_TRACE_AFTER_DISPATCH();
76 DECLARE_TRACE(); 88 DECLARE_TRACE();
77 89
78 protected: 90 protected:
79 ElementData(); 91 ElementData();
80 explicit ElementData(unsigned arraySize); 92 explicit ElementData(unsigned arraySize);
81 ElementData(const ElementData&, bool isUnique); 93 ElementData(const ElementData&, bool isUnique);
82 94
83 // Keep the type in a bitfield instead of using virtual destructors to avoid adding a vtable. 95 // Keep the type in a bitfield instead of using virtual destructors to avoid adding a vtable.
84 unsigned m_isUnique : 1; 96 unsigned m_isUnique : 1;
85 unsigned m_arraySize : 28; 97 unsigned m_arraySize : 26;
98 mutable unsigned m_directionality : 2;
86 mutable unsigned m_presentationAttributeStyleIsDirty : 1; 99 mutable unsigned m_presentationAttributeStyleIsDirty : 1;
87 mutable unsigned m_styleAttributeIsDirty : 1; 100 mutable unsigned m_styleAttributeIsDirty : 1;
88 mutable unsigned m_animatedSVGAttributesAreDirty : 1; 101 mutable unsigned m_animatedSVGAttributesAreDirty : 1;
89 102
90 mutable Member<StylePropertySet> m_inlineStyle; 103 mutable Member<StylePropertySet> m_inlineStyle;
91 mutable SpaceSplitString m_classNames; 104 mutable SpaceSplitString m_classNames;
92 mutable AtomicString m_idForStyleResolution; 105 mutable AtomicString m_idForStyleResolution;
93 106
94 private: 107 private:
95 friend class Element; 108 friend class Element;
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 } 212 }
200 213
201 inline MutableAttributeCollection UniqueElementData::attributes() 214 inline MutableAttributeCollection UniqueElementData::attributes()
202 { 215 {
203 return MutableAttributeCollection(m_attributeVector); 216 return MutableAttributeCollection(m_attributeVector);
204 } 217 }
205 218
206 } // namespace blink 219 } // namespace blink
207 220
208 #endif // ElementData_h 221 #endif // ElementData_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698