OLD | NEW |
(Empty) | |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #ifndef PseudoElementData_h |
| 6 #define PseudoElementData_h |
| 7 |
| 8 #include "platform/heap/Handle.h" |
| 9 |
| 10 namespace blink { |
| 11 |
| 12 class PseudoElementData final : public GarbageCollected<PseudoElementData> { |
| 13 WTF_MAKE_NONCOPYABLE(PseudoElementData); |
| 14 public: |
| 15 static PseudoElementData* create(); |
| 16 void setPseudoElement(PseudoId, PseudoElement*); |
| 17 PseudoElement* pseudoElement(PseudoId) const; |
| 18 bool hasPseudoElements() const; |
| 19 void clearPseudoElements(); |
| 20 DEFINE_INLINE_TRACE() |
| 21 { |
| 22 visitor->trace(m_generatedBefore); |
| 23 visitor->trace(m_generatedAfter); |
| 24 visitor->trace(m_generatedFirstLetter); |
| 25 visitor->trace(m_backdrop); |
| 26 } |
| 27 private: |
| 28 PseudoElementData() = default; |
| 29 Member<PseudoElement> m_generatedBefore; |
| 30 Member<PseudoElement> m_generatedAfter; |
| 31 Member<PseudoElement> m_generatedFirstLetter; |
| 32 Member<PseudoElement> m_backdrop; |
| 33 }; |
| 34 |
| 35 inline PseudoElementData* PseudoElementData::create() |
| 36 { |
| 37 return new PseudoElementData(); |
| 38 } |
| 39 |
| 40 inline bool PseudoElementData::hasPseudoElements() const |
| 41 { |
| 42 return m_generatedBefore || m_generatedAfter || m_backdrop || m_generatedFir
stLetter; |
| 43 } |
| 44 |
| 45 inline void PseudoElementData::clearPseudoElements() |
| 46 { |
| 47 setPseudoElement(PseudoIdBefore, nullptr); |
| 48 setPseudoElement(PseudoIdAfter, nullptr); |
| 49 setPseudoElement(PseudoIdBackdrop, nullptr); |
| 50 setPseudoElement(PseudoIdFirstLetter, nullptr); |
| 51 } |
| 52 |
| 53 inline void PseudoElementData::setPseudoElement(PseudoId pseudoId, PseudoElement
* element) |
| 54 { |
| 55 switch (pseudoId) { |
| 56 case PseudoIdBefore: |
| 57 if (m_generatedBefore) |
| 58 m_generatedBefore->dispose(); |
| 59 m_generatedBefore = element; |
| 60 break; |
| 61 case PseudoIdAfter: |
| 62 if (m_generatedAfter) |
| 63 m_generatedAfter->dispose(); |
| 64 m_generatedAfter = element; |
| 65 break; |
| 66 case PseudoIdBackdrop: |
| 67 if (m_backdrop) |
| 68 m_backdrop->dispose(); |
| 69 m_backdrop = element; |
| 70 break; |
| 71 case PseudoIdFirstLetter: |
| 72 if (m_generatedFirstLetter) |
| 73 m_generatedFirstLetter->dispose(); |
| 74 m_generatedFirstLetter = element; |
| 75 break; |
| 76 default: |
| 77 ASSERT_NOT_REACHED(); |
| 78 } |
| 79 } |
| 80 |
| 81 inline PseudoElement* PseudoElementData::pseudoElement(PseudoId pseudoId) const |
| 82 { |
| 83 switch (pseudoId) { |
| 84 case PseudoIdBefore: |
| 85 return m_generatedBefore; |
| 86 case PseudoIdAfter: |
| 87 return m_generatedAfter; |
| 88 case PseudoIdBackdrop: |
| 89 return m_backdrop; |
| 90 case PseudoIdFirstLetter: |
| 91 return m_generatedFirstLetter; |
| 92 default: |
| 93 return nullptr; |
| 94 } |
| 95 } |
| 96 |
| 97 } // namespace blink |
| 98 |
| 99 #endif // PseudoElementData_h |
OLD | NEW |