OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2007, 2008 Nikolas Zimmermann <zimmermann@kde.org> | 2 * Copyright (C) 2007, 2008 Nikolas Zimmermann <zimmermann@kde.org> |
3 * Copyright (C) Research In Motion Limited 2010. All rights reserved. | 3 * Copyright (C) Research In Motion Limited 2010. All rights reserved. |
4 * Copyright (C) 2011 Torch Mobile (Beijing) Co. Ltd. All rights reserved. | 4 * Copyright (C) 2011 Torch Mobile (Beijing) Co. Ltd. All rights reserved. |
5 * | 5 * |
6 * This library is free software; you can redistribute it and/or | 6 * This library is free software; you can redistribute it and/or |
7 * modify it under the terms of the GNU Library General Public | 7 * modify it under the terms of the GNU Library General Public |
8 * License as published by the Free Software Foundation; either | 8 * License as published by the Free Software Foundation; either |
9 * version 2 of the License, or (at your option) any later version. | 9 * version 2 of the License, or (at your option) any later version. |
10 * | 10 * |
(...skipping 17 matching lines...) Expand all Loading... |
28 #include "core/events/EventListener.h" | 28 #include "core/events/EventListener.h" |
29 #include "core/svg/SVGElement.h" | 29 #include "core/svg/SVGElement.h" |
30 #include "core/svg/SVGUseElement.h" | 30 #include "core/svg/SVGUseElement.h" |
31 | 31 |
32 #include "wtf/RefCountedLeakCounter.h" | 32 #include "wtf/RefCountedLeakCounter.h" |
33 | 33 |
34 namespace WebCore { | 34 namespace WebCore { |
35 | 35 |
36 DEFINE_DEBUG_ONLY_GLOBAL(WTF::RefCountedLeakCounter, instanceCounter, ("WebCoreS
VGElementInstance")); | 36 DEFINE_DEBUG_ONLY_GLOBAL(WTF::RefCountedLeakCounter, instanceCounter, ("WebCoreS
VGElementInstance")); |
37 | 37 |
38 // EventTarget API | |
39 DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(SVGElementInstance, correspondingElem
ent(), abort); | |
40 DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(SVGElementInstance, correspondingElem
ent(), blur); | |
41 DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(SVGElementInstance, correspondingElem
ent(), change); | |
42 DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(SVGElementInstance, correspondingElem
ent(), click); | |
43 DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(SVGElementInstance, correspondingElem
ent(), contextmenu); | |
44 DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(SVGElementInstance, correspondingElem
ent(), dblclick); | |
45 DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(SVGElementInstance, correspondingElem
ent(), error); | |
46 DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(SVGElementInstance, correspondingElem
ent(), focus); | |
47 DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(SVGElementInstance, correspondingElem
ent(), input); | |
48 DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(SVGElementInstance, correspondingElem
ent(), keydown); | |
49 DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(SVGElementInstance, correspondingElem
ent(), keypress); | |
50 DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(SVGElementInstance, correspondingElem
ent(), keyup); | |
51 DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(SVGElementInstance, correspondingElem
ent(), load); | |
52 DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(SVGElementInstance, correspondingElem
ent(), mousedown); | |
53 DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(SVGElementInstance, correspondingElem
ent(), mouseenter); | |
54 DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(SVGElementInstance, correspondingElem
ent(), mouseleave); | |
55 DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(SVGElementInstance, correspondingElem
ent(), mousemove); | |
56 DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(SVGElementInstance, correspondingElem
ent(), mouseout); | |
57 DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(SVGElementInstance, correspondingElem
ent(), mouseover); | |
58 DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(SVGElementInstance, correspondingElem
ent(), mouseup); | |
59 DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(SVGElementInstance, correspondingElem
ent(), mousewheel); | |
60 DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(SVGElementInstance, correspondingElem
ent(), wheel); | |
61 DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(SVGElementInstance, correspondingElem
ent(), beforecut); | |
62 DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(SVGElementInstance, correspondingElem
ent(), cut); | |
63 DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(SVGElementInstance, correspondingElem
ent(), beforecopy); | |
64 DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(SVGElementInstance, correspondingElem
ent(), copy); | |
65 DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(SVGElementInstance, correspondingElem
ent(), beforepaste); | |
66 DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(SVGElementInstance, correspondingElem
ent(), paste); | |
67 DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(SVGElementInstance, correspondingElem
ent(), dragenter); | |
68 DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(SVGElementInstance, correspondingElem
ent(), dragover); | |
69 DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(SVGElementInstance, correspondingElem
ent(), dragleave); | |
70 DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(SVGElementInstance, correspondingElem
ent(), drop); | |
71 DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(SVGElementInstance, correspondingElem
ent(), dragstart); | |
72 DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(SVGElementInstance, correspondingElem
ent(), drag); | |
73 DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(SVGElementInstance, correspondingElem
ent(), dragend); | |
74 DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(SVGElementInstance, correspondingElem
ent(), reset); | |
75 DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(SVGElementInstance, correspondingElem
ent(), resize); | |
76 DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(SVGElementInstance, correspondingElem
ent(), scroll); | |
77 DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(SVGElementInstance, correspondingElem
ent(), search); | |
78 DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(SVGElementInstance, correspondingElem
ent(), select); | |
79 DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(SVGElementInstance, correspondingElem
ent(), selectstart); | |
80 DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(SVGElementInstance, correspondingElem
ent(), submit); | |
81 DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(SVGElementInstance, correspondingElem
ent(), unload); | |
82 | |
83 PassRefPtrWillBeRawPtr<SVGElementInstance> SVGElementInstance::create(SVGUseElem
ent* correspondingUseElement, SVGUseElement* directUseElement, PassRefPtrWillBeR
awPtr<SVGElement> originalElement) | 38 PassRefPtrWillBeRawPtr<SVGElementInstance> SVGElementInstance::create(SVGUseElem
ent* correspondingUseElement, SVGUseElement* directUseElement, PassRefPtrWillBeR
awPtr<SVGElement> originalElement) |
84 { | 39 { |
85 return adoptRefWillBeRefCountedGarbageCollected(new SVGElementInstance(corre
spondingUseElement, directUseElement, originalElement)); | 40 return adoptRefWillBeRefCountedGarbageCollected(new SVGElementInstance(corre
spondingUseElement, directUseElement, originalElement)); |
86 } | 41 } |
87 | 42 |
88 SVGElementInstance::SVGElementInstance(SVGUseElement* correspondingUseElement, S
VGUseElement* directUseElement, PassRefPtrWillBeRawPtr<SVGElement> originalEleme
nt) | 43 SVGElementInstance::SVGElementInstance(SVGUseElement* correspondingUseElement, S
VGUseElement* directUseElement, PassRefPtrWillBeRawPtr<SVGElement> originalEleme
nt) |
89 : m_parentInstance(nullptr) | 44 : m_parentInstance(nullptr) |
90 , m_correspondingUseElement(correspondingUseElement) | 45 , m_correspondingUseElement(correspondingUseElement) |
91 , m_directUseElement(directUseElement) | 46 , m_directUseElement(directUseElement) |
92 , m_element(originalElement) | 47 , m_element(originalElement) |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
158 // Register as instance for passed element. | 113 // Register as instance for passed element. |
159 m_element->mapInstanceToElement(shadowTreeElement()); | 114 m_element->mapInstanceToElement(shadowTreeElement()); |
160 | 115 |
161 } | 116 } |
162 | 117 |
163 void SVGElementInstance::appendChild(PassRefPtrWillBeRawPtr<SVGElementInstance>
child) | 118 void SVGElementInstance::appendChild(PassRefPtrWillBeRawPtr<SVGElementInstance>
child) |
164 { | 119 { |
165 appendChildToContainer<SVGElementInstance, SVGElementInstance>(*child, *this
); | 120 appendChildToContainer<SVGElementInstance, SVGElementInstance>(*child, *this
); |
166 } | 121 } |
167 | 122 |
168 const AtomicString& SVGElementInstance::interfaceName() const | |
169 { | |
170 return EventTargetNames::SVGElementInstance; | |
171 } | |
172 | |
173 ExecutionContext* SVGElementInstance::executionContext() const | |
174 { | |
175 return &m_element->document(); | |
176 } | |
177 | |
178 bool SVGElementInstance::addEventListener(const AtomicString& eventType, PassRef
Ptr<EventListener> listener, bool useCapture) | |
179 { | |
180 return m_element->addEventListener(eventType, listener, useCapture); | |
181 } | |
182 | |
183 bool SVGElementInstance::removeEventListener(const AtomicString& eventType, Even
tListener* listener, bool useCapture) | |
184 { | |
185 return m_element->removeEventListener(eventType, listener, useCapture); | |
186 } | |
187 | |
188 void SVGElementInstance::removeAllEventListeners() | |
189 { | |
190 m_element->removeAllEventListeners(); | |
191 } | |
192 | |
193 Node* SVGElementInstance::toNode() | |
194 { | |
195 return shadowTreeElement(); | |
196 } | |
197 | |
198 Document* SVGElementInstance::ownerDocument() const | |
199 { | |
200 return m_element ? m_element->ownerDocument() : 0; | |
201 } | |
202 | |
203 bool SVGElementInstance::dispatchEvent(PassRefPtrWillBeRawPtr<Event> event) | |
204 { | |
205 SVGElement* element = shadowTreeElement(); | |
206 if (!element) | |
207 return false; | |
208 | |
209 return element->dispatchEvent(event); | |
210 } | |
211 | |
212 EventTargetData* SVGElementInstance::eventTargetData() | |
213 { | |
214 // Since no event listeners are added to an SVGElementInstance, we don't hav
e eventTargetData. | |
215 return 0; | |
216 } | |
217 | |
218 EventTargetData& SVGElementInstance::ensureEventTargetData() | |
219 { | |
220 // EventTarget would use these methods if we were actually using its add/rem
oveEventListener logic. | |
221 // As we're forwarding those calls to the correspondingElement(), no one sho
uld ever call this function. | |
222 ASSERT_NOT_REACHED(); | |
223 return *eventTargetData(); | |
224 } | |
225 | |
226 void SVGElementInstance::trace(Visitor* visitor) | 123 void SVGElementInstance::trace(Visitor* visitor) |
227 { | 124 { |
228 visitor->trace(m_parentInstance); | 125 visitor->trace(m_parentInstance); |
229 visitor->trace(m_correspondingUseElement); | 126 visitor->trace(m_correspondingUseElement); |
230 visitor->trace(m_directUseElement); | 127 visitor->trace(m_directUseElement); |
231 visitor->trace(m_element); | 128 visitor->trace(m_element); |
232 visitor->trace(m_shadowTreeElement); | 129 visitor->trace(m_shadowTreeElement); |
233 visitor->trace(m_previousSibling); | 130 visitor->trace(m_previousSibling); |
234 visitor->trace(m_nextSibling); | 131 visitor->trace(m_nextSibling); |
235 visitor->trace(m_firstChild); | 132 visitor->trace(m_firstChild); |
236 visitor->trace(m_lastChild); | 133 visitor->trace(m_lastChild); |
237 EventTarget::trace(visitor); | |
238 } | 134 } |
239 | 135 |
240 } | 136 } |
OLD | NEW |