2 * Copyright 2019 Jacek Caban for CodeWeavers
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
31 #include "wine/debug.h"
33 #include "mshtml_private.h"
35 WINE_DEFAULT_DEBUG_CHANNEL(mshtml
);
39 ISVGElement ISVGElement_iface
;
42 static inline SVGElement
*impl_from_ISVGElement(ISVGElement
*iface
)
44 return CONTAINING_RECORD(iface
, SVGElement
, ISVGElement_iface
);
47 static HRESULT WINAPI
SVGElement_QueryInterface(ISVGElement
*iface
,
48 REFIID riid
, void **ppv
)
50 SVGElement
*This
= impl_from_ISVGElement(iface
);
52 return IHTMLDOMNode_QueryInterface(&This
->element
.node
.IHTMLDOMNode_iface
, riid
, ppv
);
55 static ULONG WINAPI
SVGElement_AddRef(ISVGElement
*iface
)
57 SVGElement
*This
= impl_from_ISVGElement(iface
);
59 return IHTMLDOMNode_AddRef(&This
->element
.node
.IHTMLDOMNode_iface
);
62 static ULONG WINAPI
SVGElement_Release(ISVGElement
*iface
)
64 SVGElement
*This
= impl_from_ISVGElement(iface
);
66 return IHTMLDOMNode_Release(&This
->element
.node
.IHTMLDOMNode_iface
);
69 static HRESULT WINAPI
SVGElement_GetTypeInfoCount(ISVGElement
*iface
, UINT
*pctinfo
)
71 SVGElement
*This
= impl_from_ISVGElement(iface
);
72 return IDispatchEx_GetTypeInfoCount(&This
->element
.node
.event_target
.dispex
.IDispatchEx_iface
, pctinfo
);
75 static HRESULT WINAPI
SVGElement_GetTypeInfo(ISVGElement
*iface
, UINT iTInfo
,
76 LCID lcid
, ITypeInfo
**ppTInfo
)
78 SVGElement
*This
= impl_from_ISVGElement(iface
);
79 return IDispatchEx_GetTypeInfo(&This
->element
.node
.event_target
.dispex
.IDispatchEx_iface
, iTInfo
, lcid
,
83 static HRESULT WINAPI
SVGElement_GetIDsOfNames(ISVGElement
*iface
, REFIID riid
,
84 LPOLESTR
*rgszNames
, UINT cNames
,
85 LCID lcid
, DISPID
*rgDispId
)
87 SVGElement
*This
= impl_from_ISVGElement(iface
);
88 return IDispatchEx_GetIDsOfNames(&This
->element
.node
.event_target
.dispex
.IDispatchEx_iface
, riid
, rgszNames
,
89 cNames
, lcid
, rgDispId
);
92 static HRESULT WINAPI
SVGElement_Invoke(ISVGElement
*iface
, DISPID dispIdMember
,
93 REFIID riid
, LCID lcid
, WORD wFlags
, DISPPARAMS
*pDispParams
,
94 VARIANT
*pVarResult
, EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
96 SVGElement
*This
= impl_from_ISVGElement(iface
);
97 return IDispatchEx_Invoke(&This
->element
.node
.event_target
.dispex
.IDispatchEx_iface
, dispIdMember
, riid
,
98 lcid
, wFlags
, pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
101 static HRESULT WINAPI
SVGElement_put_xmlbase(ISVGElement
*iface
, BSTR v
)
103 SVGElement
*This
= impl_from_ISVGElement(iface
);
104 FIXME("(%p)->(%s)\n", This
, debugstr_w(v
));
108 static HRESULT WINAPI
SVGElement_get_xmlbase(ISVGElement
*iface
, BSTR
*p
)
110 SVGElement
*This
= impl_from_ISVGElement(iface
);
111 FIXME("(%p)->(%p)\n", This
, p
);
115 static HRESULT WINAPI
SVGElement_putref_ownerSVGElement(ISVGElement
*iface
, ISVGSVGElement
*v
)
117 SVGElement
*This
= impl_from_ISVGElement(iface
);
118 FIXME("(%p)->(%p)\n", This
, v
);
122 static HRESULT WINAPI
SVGElement_get_ownerSVGElement(ISVGElement
*iface
, ISVGSVGElement
**p
)
124 SVGElement
*This
= impl_from_ISVGElement(iface
);
125 FIXME("(%p)->(%p)\n", This
, p
);
129 static HRESULT WINAPI
SVGElement_putref_viewportElement(ISVGElement
*iface
, ISVGElement
*v
)
131 SVGElement
*This
= impl_from_ISVGElement(iface
);
132 FIXME("(%p)->(%p)\n", This
, v
);
136 static HRESULT WINAPI
SVGElement_get_viewportElement(ISVGElement
*iface
, ISVGElement
**p
)
138 SVGElement
*This
= impl_from_ISVGElement(iface
);
139 FIXME("(%p)->(%p)\n", This
, p
);
143 static HRESULT WINAPI
SVGElement_putref_focusable(ISVGElement
*iface
, ISVGAnimatedEnumeration
*v
)
145 SVGElement
*This
= impl_from_ISVGElement(iface
);
146 FIXME("(%p)->(%p)\n", This
, v
);
150 static HRESULT WINAPI
SVGElement_get_focusable(ISVGElement
*iface
, ISVGAnimatedEnumeration
**p
)
152 SVGElement
*This
= impl_from_ISVGElement(iface
);
153 FIXME("(%p)->(%p)\n", This
, p
);
157 static const ISVGElementVtbl SVGElementVtbl
= {
158 SVGElement_QueryInterface
,
161 SVGElement_GetTypeInfoCount
,
162 SVGElement_GetTypeInfo
,
163 SVGElement_GetIDsOfNames
,
165 SVGElement_put_xmlbase
,
166 SVGElement_get_xmlbase
,
167 SVGElement_putref_ownerSVGElement
,
168 SVGElement_get_ownerSVGElement
,
169 SVGElement_putref_viewportElement
,
170 SVGElement_get_viewportElement
,
171 SVGElement_putref_focusable
,
172 SVGElement_get_focusable
175 static inline SVGElement
*SVGElement_from_HTMLDOMNode(HTMLDOMNode
*iface
)
177 return CONTAINING_RECORD(iface
, SVGElement
, element
.node
);
180 static HRESULT
SVGElement_QI(HTMLDOMNode
*iface
, REFIID riid
, void **ppv
)
182 SVGElement
*This
= SVGElement_from_HTMLDOMNode(iface
);
184 TRACE("(%p)->(%s %p)\n", This
, debugstr_mshtml_guid(riid
), ppv
);
186 if(IsEqualGUID(&IID_ISVGElement
, riid
))
187 *ppv
= &This
->ISVGElement_iface
;
189 return HTMLElement_QI(&This
->element
.node
, riid
, ppv
);
191 IUnknown_AddRef((IUnknown
*)*ppv
);
195 static const NodeImplVtbl SVGElementImplVtbl
= {
198 HTMLElement_destructor
,
202 HTMLElement_get_attr_col
,
205 static void init_svg_element(SVGElement
*svg_element
, HTMLDocumentNode
*doc
, nsIDOMSVGElement
*nselem
)
207 if(!svg_element
->element
.node
.vtbl
)
208 svg_element
->element
.node
.vtbl
= &SVGElementImplVtbl
;
209 svg_element
->ISVGElement_iface
.lpVtbl
= &SVGElementVtbl
;
210 HTMLElement_Init(&svg_element
->element
, doc
, (nsIDOMElement
*)nselem
, NULL
);
213 struct SVGSVGElement
{
214 SVGElement svg_element
;
215 ISVGSVGElement ISVGSVGElement_iface
;
218 static inline SVGSVGElement
*impl_from_ISVGSVGElement(ISVGSVGElement
*iface
)
220 return CONTAINING_RECORD(iface
, SVGSVGElement
, ISVGSVGElement_iface
);
223 static HRESULT WINAPI
SVGSVGElement_QueryInterface(ISVGSVGElement
*iface
,
224 REFIID riid
, void **ppv
)
226 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
228 return IHTMLDOMNode_QueryInterface(&This
->svg_element
.element
.node
.IHTMLDOMNode_iface
, riid
, ppv
);
231 static ULONG WINAPI
SVGSVGElement_AddRef(ISVGSVGElement
*iface
)
233 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
235 return IHTMLDOMNode_AddRef(&This
->svg_element
.element
.node
.IHTMLDOMNode_iface
);
238 static ULONG WINAPI
SVGSVGElement_Release(ISVGSVGElement
*iface
)
240 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
242 return IHTMLDOMNode_Release(&This
->svg_element
.element
.node
.IHTMLDOMNode_iface
);
245 static HRESULT WINAPI
SVGSVGElement_GetTypeInfoCount(ISVGSVGElement
*iface
, UINT
*pctinfo
)
247 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
248 return IDispatchEx_GetTypeInfoCount(&This
->svg_element
.element
.node
.event_target
.dispex
.IDispatchEx_iface
, pctinfo
);
251 static HRESULT WINAPI
SVGSVGElement_GetTypeInfo(ISVGSVGElement
*iface
, UINT iTInfo
,
252 LCID lcid
, ITypeInfo
**ppTInfo
)
254 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
255 return IDispatchEx_GetTypeInfo(&This
->svg_element
.element
.node
.event_target
.dispex
.IDispatchEx_iface
, iTInfo
, lcid
,
259 static HRESULT WINAPI
SVGSVGElement_GetIDsOfNames(ISVGSVGElement
*iface
, REFIID riid
,
260 LPOLESTR
*rgszNames
, UINT cNames
,
261 LCID lcid
, DISPID
*rgDispId
)
263 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
264 return IDispatchEx_GetIDsOfNames(&This
->svg_element
.element
.node
.event_target
.dispex
.IDispatchEx_iface
, riid
, rgszNames
,
265 cNames
, lcid
, rgDispId
);
268 static HRESULT WINAPI
SVGSVGElement_Invoke(ISVGSVGElement
*iface
, DISPID dispIdMember
,
269 REFIID riid
, LCID lcid
, WORD wFlags
, DISPPARAMS
*pDispParams
,
270 VARIANT
*pVarResult
, EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
272 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
273 return IDispatchEx_Invoke(&This
->svg_element
.element
.node
.event_target
.dispex
.IDispatchEx_iface
, dispIdMember
, riid
,
274 lcid
, wFlags
, pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
277 static HRESULT WINAPI
SVGSVGElement_putref_x(ISVGSVGElement
*iface
, ISVGAnimatedLength
*v
)
279 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
280 FIXME("(%p)->(%p)\n", This
, v
);
284 static HRESULT WINAPI
SVGSVGElement_get_x(ISVGSVGElement
*iface
, ISVGAnimatedLength
**p
)
286 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
287 FIXME("(%p)->(%p)\n", This
, p
);
291 static HRESULT WINAPI
SVGSVGElement_putref_y(ISVGSVGElement
*iface
, ISVGAnimatedLength
*v
)
293 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
294 FIXME("(%p)->(%p)\n", This
, v
);
298 static HRESULT WINAPI
SVGSVGElement_get_y(ISVGSVGElement
*iface
, ISVGAnimatedLength
**p
)
300 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
301 FIXME("(%p)->(%p)\n", This
, p
);
305 static HRESULT WINAPI
SVGSVGElement_putref_width(ISVGSVGElement
*iface
, ISVGAnimatedLength
*v
)
307 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
308 FIXME("(%p)->(%p)\n", This
, v
);
312 static HRESULT WINAPI
SVGSVGElement_get_width(ISVGSVGElement
*iface
, ISVGAnimatedLength
**p
)
314 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
315 FIXME("(%p)->(%p)\n", This
, p
);
319 static HRESULT WINAPI
SVGSVGElement_putref_height(ISVGSVGElement
*iface
, ISVGAnimatedLength
*v
)
321 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
322 FIXME("(%p)->(%p)\n", This
, v
);
326 static HRESULT WINAPI
SVGSVGElement_get_height(ISVGSVGElement
*iface
, ISVGAnimatedLength
**p
)
328 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
329 FIXME("(%p)->(%p)\n", This
, p
);
333 static HRESULT WINAPI
SVGSVGElement_put_contentScriptType(ISVGSVGElement
*iface
, BSTR v
)
335 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
336 FIXME("(%p)->(%s)\n", This
, debugstr_w(v
));
340 static HRESULT WINAPI
SVGSVGElement_get_contentScriptType(ISVGSVGElement
*iface
, BSTR
*p
)
342 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
343 FIXME("(%p)->(%p)\n", This
, p
);
347 static HRESULT WINAPI
SVGSVGElement_put_contentStyleType(ISVGSVGElement
*iface
, BSTR v
)
349 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
350 FIXME("(%p)->(%p)\n", This
, v
);
354 static HRESULT WINAPI
SVGSVGElement_get_contentStyleType(ISVGSVGElement
*iface
, BSTR
*p
)
356 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
357 FIXME("(%p)->(%p)\n", This
, p
);
361 static HRESULT WINAPI
SVGSVGElement_putref_viewport(ISVGSVGElement
*iface
, ISVGRect
*v
)
363 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
364 FIXME("(%p)->(%p)\n", This
, v
);
368 static HRESULT WINAPI
SVGSVGElement_get_viewport(ISVGSVGElement
*iface
, ISVGRect
**p
)
370 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
371 FIXME("(%p)->(%p)\n", This
, p
);
375 static HRESULT WINAPI
SVGSVGElement_put_pixelUnitToMillimeterX(ISVGSVGElement
*iface
, float v
)
377 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
378 FIXME("(%p)->(%f)\n", This
, v
);
382 static HRESULT WINAPI
SVGSVGElement_get_pixelUnitToMillimeterX(ISVGSVGElement
*iface
, float *p
)
384 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
385 FIXME("(%p)->(%p)\n", This
, p
);
389 static HRESULT WINAPI
SVGSVGElement_put_pixelUnitToMillimeterY(ISVGSVGElement
*iface
, float v
)
391 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
392 FIXME("(%p)->(%f)\n", This
, v
);
396 static HRESULT WINAPI
SVGSVGElement_get_pixelUnitToMillimeterY(ISVGSVGElement
*iface
, float *p
)
398 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
399 FIXME("(%p)->(%p)\n", This
, p
);
403 static HRESULT WINAPI
SVGSVGElement_put_screenPixelToMillimeterX(ISVGSVGElement
*iface
, float v
)
405 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
406 FIXME("(%p)->(%f)\n", This
, v
);
410 static HRESULT WINAPI
SVGSVGElement_get_screenPixelToMillimeterX(ISVGSVGElement
*iface
, float *p
)
412 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
413 FIXME("(%p)->(%p)\n", This
, p
);
417 static HRESULT WINAPI
SVGSVGElement_put_screenPixelToMillimeterY(ISVGSVGElement
*iface
, float v
)
419 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
420 FIXME("(%p)->(%f)\n", This
, v
);
424 static HRESULT WINAPI
SVGSVGElement_get_screenPixelToMillimeterY(ISVGSVGElement
*iface
, float *p
)
426 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
427 FIXME("(%p)->(%p)\n", This
, p
);
431 static HRESULT WINAPI
SVGSVGElement_put_useCurrentView(ISVGSVGElement
*iface
, VARIANT_BOOL v
)
433 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
434 FIXME("(%p)->(%x)\n", This
, v
);
438 static HRESULT WINAPI
SVGSVGElement_get_useCurrentView(ISVGSVGElement
*iface
, VARIANT_BOOL
*p
)
440 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
441 FIXME("(%p)->(%p)\n", This
, p
);
445 static HRESULT WINAPI
SVGSVGElement_putref_currentView(ISVGSVGElement
*iface
, ISVGViewSpec
*v
)
447 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
448 FIXME("(%p)->(%p)\n", This
, v
);
452 static HRESULT WINAPI
SVGSVGElement_get_currentView(ISVGSVGElement
*iface
, ISVGViewSpec
**p
)
454 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
455 FIXME("(%p)->(%p)\n", This
, p
);
459 static HRESULT WINAPI
SVGSVGElement_put_currentScale(ISVGSVGElement
*iface
, float v
)
461 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
462 FIXME("(%p)->(%f)\n", This
, v
);
466 static HRESULT WINAPI
SVGSVGElement_get_currentScale(ISVGSVGElement
*iface
, float *p
)
468 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
469 FIXME("(%p)->(%p)\n", This
, p
);
473 static HRESULT WINAPI
SVGSVGElement_putref_currentTranslate(ISVGSVGElement
*iface
, ISVGPoint
*v
)
475 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
476 FIXME("(%p)->(%p)\n", This
, v
);
480 static HRESULT WINAPI
SVGSVGElement_get_currentTranslate(ISVGSVGElement
*iface
, ISVGPoint
**p
)
482 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
483 FIXME("(%p)->(%p)\n", This
, p
);
487 static HRESULT WINAPI
SVGSVGElement_suspendRedraw(ISVGSVGElement
*iface
, ULONG max_wait
, ULONG
*p
)
489 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
490 FIXME("(%p)->(%u %p)\n", This
, max_wait
, p
);
494 static HRESULT WINAPI
SVGSVGElement_unsuspendRedraw(ISVGSVGElement
*iface
, ULONG id
)
496 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
497 FIXME("(%p)->(%u)\n", This
, id
);
501 static HRESULT WINAPI
SVGSVGElement_unsuspendRedrawAll(ISVGSVGElement
*iface
)
503 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
504 FIXME("(%p)\n", This
);
508 static HRESULT WINAPI
SVGSVGElement_forceRedraw(ISVGSVGElement
*iface
)
510 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
511 FIXME("(%p)\n", This
);
515 static HRESULT WINAPI
SVGSVGElement_pauseAnimations(ISVGSVGElement
*iface
)
517 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
518 FIXME("(%p)\n", This
);
522 static HRESULT WINAPI
SVGSVGElement_unpauseAnimations(ISVGSVGElement
*iface
)
524 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
525 FIXME("(%p)\n", This
);
529 static HRESULT WINAPI
SVGSVGElement_animationsPaused(ISVGSVGElement
*iface
, VARIANT_BOOL
*p
)
531 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
532 FIXME("(%p)->(%p)\n", This
, p
);
536 static HRESULT WINAPI
SVGSVGElement_getCurrentTime(ISVGSVGElement
*iface
, float *p
)
538 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
539 FIXME("(%p)->(%p)\n", This
, p
);
543 static HRESULT WINAPI
SVGSVGElement_setCurrentTime(ISVGSVGElement
*iface
, float v
)
545 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
546 FIXME("(%p)->(%f)\n", This
, v
);
550 static HRESULT WINAPI
SVGSVGElement_getIntersectionList(ISVGSVGElement
*iface
, ISVGRect
*rect
,
551 ISVGElement
*reference_element
, VARIANT
*p
)
553 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
554 FIXME("(%p)->(%p %p %p)\n", This
, rect
, reference_element
, p
);
558 static HRESULT WINAPI
SVGSVGElement_getEnclosureList(ISVGSVGElement
*iface
, ISVGRect
*rect
,
559 ISVGElement
*reference_element
, VARIANT
*p
)
561 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
562 FIXME("(%p)->()\n", This
);
566 static HRESULT WINAPI
SVGSVGElement_checkIntersection(ISVGSVGElement
*iface
, ISVGElement
*element
,
567 ISVGRect
*rect
, VARIANT_BOOL
*p
)
569 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
570 FIXME("(%p)->(%p %p %p)\n", This
, element
, rect
, p
);
574 static HRESULT WINAPI
SVGSVGElement_checkEnclosure(ISVGSVGElement
*iface
, ISVGElement
*element
,
575 ISVGRect
*rect
, VARIANT_BOOL
*p
)
577 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
578 FIXME("(%p)->(%p %p %p)\n", This
, element
, rect
, p
);
582 static HRESULT WINAPI
SVGSVGElement_deselectAll(ISVGSVGElement
*iface
)
584 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
585 FIXME("(%p)\n", This
);
589 static HRESULT WINAPI
SVGSVGElement_createSVGNumber(ISVGSVGElement
*iface
, ISVGNumber
**p
)
591 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
592 FIXME("(%p)->(%p)\n", This
, p
);
596 static HRESULT WINAPI
SVGSVGElement_createSVGLength(ISVGSVGElement
*iface
, ISVGLength
**p
)
598 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
599 FIXME("(%p)->(%p)\n", This
, p
);
603 static HRESULT WINAPI
SVGSVGElement_createSVGAngle(ISVGSVGElement
*iface
, ISVGAngle
**p
)
605 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
606 FIXME("(%p)->(%p)\n", This
, p
);
610 static HRESULT WINAPI
SVGSVGElement_createSVGPoint(ISVGSVGElement
*iface
, ISVGPoint
**p
)
612 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
613 FIXME("(%p)->(%p)\n", This
, p
);
617 static HRESULT WINAPI
SVGSVGElement_createSVGMatrix(ISVGSVGElement
*iface
, ISVGMatrix
**p
)
619 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
620 FIXME("(%p)->(%p)\n", This
, p
);
624 static HRESULT WINAPI
SVGSVGElement_createSVGRect(ISVGSVGElement
*iface
, ISVGRect
**p
)
626 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
627 FIXME("(%p)->(%p)\n", This
, p
);
631 static HRESULT WINAPI
SVGSVGElement_createSVGTransform(ISVGSVGElement
*iface
, ISVGTransform
**p
)
633 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
634 FIXME("(%p)->(%p)\n", This
, p
);
638 static HRESULT WINAPI
SVGSVGElement_createSVGTransformFromMatrix(ISVGSVGElement
*iface
,
639 ISVGMatrix
*matrix
, ISVGTransform
**p
)
641 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
642 FIXME("(%p)->(%p %p)\n", This
, matrix
, p
);
646 static HRESULT WINAPI
SVGSVGElement_getElementById(ISVGSVGElement
*iface
, BSTR id
, IHTMLElement
**p
)
648 SVGSVGElement
*This
= impl_from_ISVGSVGElement(iface
);
649 FIXME("(%p)->(%s %p)\n", This
, debugstr_w(id
), p
);
653 static const ISVGSVGElementVtbl SVGSVGElementVtbl
= {
654 SVGSVGElement_QueryInterface
,
655 SVGSVGElement_AddRef
,
656 SVGSVGElement_Release
,
657 SVGSVGElement_GetTypeInfoCount
,
658 SVGSVGElement_GetTypeInfo
,
659 SVGSVGElement_GetIDsOfNames
,
660 SVGSVGElement_Invoke
,
661 SVGSVGElement_putref_x
,
663 SVGSVGElement_putref_y
,
665 SVGSVGElement_putref_width
,
666 SVGSVGElement_get_width
,
667 SVGSVGElement_putref_height
,
668 SVGSVGElement_get_height
,
669 SVGSVGElement_put_contentScriptType
,
670 SVGSVGElement_get_contentScriptType
,
671 SVGSVGElement_put_contentStyleType
,
672 SVGSVGElement_get_contentStyleType
,
673 SVGSVGElement_putref_viewport
,
674 SVGSVGElement_get_viewport
,
675 SVGSVGElement_put_pixelUnitToMillimeterX
,
676 SVGSVGElement_get_pixelUnitToMillimeterX
,
677 SVGSVGElement_put_pixelUnitToMillimeterY
,
678 SVGSVGElement_get_pixelUnitToMillimeterY
,
679 SVGSVGElement_put_screenPixelToMillimeterX
,
680 SVGSVGElement_get_screenPixelToMillimeterX
,
681 SVGSVGElement_put_screenPixelToMillimeterY
,
682 SVGSVGElement_get_screenPixelToMillimeterY
,
683 SVGSVGElement_put_useCurrentView
,
684 SVGSVGElement_get_useCurrentView
,
685 SVGSVGElement_putref_currentView
,
686 SVGSVGElement_get_currentView
,
687 SVGSVGElement_put_currentScale
,
688 SVGSVGElement_get_currentScale
,
689 SVGSVGElement_putref_currentTranslate
,
690 SVGSVGElement_get_currentTranslate
,
691 SVGSVGElement_suspendRedraw
,
692 SVGSVGElement_unsuspendRedraw
,
693 SVGSVGElement_unsuspendRedrawAll
,
694 SVGSVGElement_forceRedraw
,
695 SVGSVGElement_pauseAnimations
,
696 SVGSVGElement_unpauseAnimations
,
697 SVGSVGElement_animationsPaused
,
698 SVGSVGElement_getCurrentTime
,
699 SVGSVGElement_setCurrentTime
,
700 SVGSVGElement_getIntersectionList
,
701 SVGSVGElement_getEnclosureList
,
702 SVGSVGElement_checkIntersection
,
703 SVGSVGElement_checkEnclosure
,
704 SVGSVGElement_deselectAll
,
705 SVGSVGElement_createSVGNumber
,
706 SVGSVGElement_createSVGLength
,
707 SVGSVGElement_createSVGAngle
,
708 SVGSVGElement_createSVGPoint
,
709 SVGSVGElement_createSVGMatrix
,
710 SVGSVGElement_createSVGRect
,
711 SVGSVGElement_createSVGTransform
,
712 SVGSVGElement_createSVGTransformFromMatrix
,
713 SVGSVGElement_getElementById
716 static inline SVGSVGElement
*SVGSVGElement_from_HTMLDOMNode(HTMLDOMNode
*iface
)
718 return CONTAINING_RECORD(iface
, SVGSVGElement
, svg_element
.element
.node
);
721 static HRESULT
SVGSVGElement_QI(HTMLDOMNode
*iface
, REFIID riid
, void **ppv
)
723 SVGSVGElement
*This
= SVGSVGElement_from_HTMLDOMNode(iface
);
725 TRACE("(%p)->(%s %p)\n", This
, debugstr_mshtml_guid(riid
), ppv
);
727 if(IsEqualGUID(&IID_ISVGSVGElement
, riid
))
728 *ppv
= &This
->ISVGSVGElement_iface
;
730 return SVGElement_QI(&This
->svg_element
.element
.node
, riid
, ppv
);
732 IUnknown_AddRef((IUnknown
*)*ppv
);
736 static const NodeImplVtbl SVGSVGElementImplVtbl
= {
737 &CLSID_SVGSVGElement
,
739 HTMLElement_destructor
,
743 HTMLElement_get_attr_col
,
746 static HRESULT
create_viewport_element(HTMLDocumentNode
*doc
, nsIDOMSVGElement
*nselem
, HTMLElement
**elem
)
750 ret
= heap_alloc_zero(sizeof(SVGSVGElement
));
752 return E_OUTOFMEMORY
;
754 ret
->ISVGSVGElement_iface
.lpVtbl
= &SVGSVGElementVtbl
;
755 ret
->svg_element
.element
.node
.vtbl
= &SVGSVGElementImplVtbl
;
757 init_svg_element(&ret
->svg_element
, doc
, nselem
);
759 *elem
= &ret
->svg_element
.element
;
763 struct SVGCircleElement
{
764 SVGElement svg_element
;
765 ISVGCircleElement ISVGCircleElement_iface
;
768 static inline SVGCircleElement
*impl_from_ISVGCircleElement(ISVGCircleElement
*iface
)
770 return CONTAINING_RECORD(iface
, SVGCircleElement
, ISVGCircleElement_iface
);
773 static HRESULT WINAPI
SVGCircleElement_QueryInterface(ISVGCircleElement
*iface
,
774 REFIID riid
, void **ppv
)
776 SVGCircleElement
*This
= impl_from_ISVGCircleElement(iface
);
778 return IHTMLDOMNode_QueryInterface(&This
->svg_element
.element
.node
.IHTMLDOMNode_iface
, riid
, ppv
);
781 static ULONG WINAPI
SVGCircleElement_AddRef(ISVGCircleElement
*iface
)
783 SVGCircleElement
*This
= impl_from_ISVGCircleElement(iface
);
785 return IHTMLDOMNode_AddRef(&This
->svg_element
.element
.node
.IHTMLDOMNode_iface
);
788 static ULONG WINAPI
SVGCircleElement_Release(ISVGCircleElement
*iface
)
790 SVGCircleElement
*This
= impl_from_ISVGCircleElement(iface
);
792 return IHTMLDOMNode_Release(&This
->svg_element
.element
.node
.IHTMLDOMNode_iface
);
795 static HRESULT WINAPI
SVGCircleElement_GetTypeInfoCount(ISVGCircleElement
*iface
, UINT
*pctinfo
)
797 SVGCircleElement
*This
= impl_from_ISVGCircleElement(iface
);
798 return IDispatchEx_GetTypeInfoCount(&This
->svg_element
.element
.node
.event_target
.dispex
.IDispatchEx_iface
, pctinfo
);
801 static HRESULT WINAPI
SVGCircleElement_GetTypeInfo(ISVGCircleElement
*iface
, UINT iTInfo
,
802 LCID lcid
, ITypeInfo
**ppTInfo
)
804 SVGCircleElement
*This
= impl_from_ISVGCircleElement(iface
);
805 return IDispatchEx_GetTypeInfo(&This
->svg_element
.element
.node
.event_target
.dispex
.IDispatchEx_iface
, iTInfo
, lcid
,
809 static HRESULT WINAPI
SVGCircleElement_GetIDsOfNames(ISVGCircleElement
*iface
, REFIID riid
,
810 LPOLESTR
*rgszNames
, UINT cNames
,
811 LCID lcid
, DISPID
*rgDispId
)
813 SVGCircleElement
*This
= impl_from_ISVGCircleElement(iface
);
814 return IDispatchEx_GetIDsOfNames(&This
->svg_element
.element
.node
.event_target
.dispex
.IDispatchEx_iface
, riid
, rgszNames
,
815 cNames
, lcid
, rgDispId
);
818 static HRESULT WINAPI
SVGCircleElement_Invoke(ISVGCircleElement
*iface
, DISPID dispIdMember
,
819 REFIID riid
, LCID lcid
, WORD wFlags
, DISPPARAMS
*pDispParams
,
820 VARIANT
*pVarResult
, EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
822 SVGCircleElement
*This
= impl_from_ISVGCircleElement(iface
);
823 return IDispatchEx_Invoke(&This
->svg_element
.element
.node
.event_target
.dispex
.IDispatchEx_iface
, dispIdMember
, riid
,
824 lcid
, wFlags
, pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
827 static HRESULT WINAPI
SVGCircleElement_putref_cx(ISVGCircleElement
*iface
, ISVGAnimatedLength
*v
)
829 SVGCircleElement
*This
= impl_from_ISVGCircleElement(iface
);
830 FIXME("(%p)->(%p)\n", This
, v
);
834 static HRESULT WINAPI
SVGCircleElement_get_cx(ISVGCircleElement
*iface
, ISVGAnimatedLength
**p
)
836 SVGCircleElement
*This
= impl_from_ISVGCircleElement(iface
);
837 FIXME("(%p)->(%p)\n", This
, p
);
841 static HRESULT WINAPI
SVGCircleElement_putref_cy(ISVGCircleElement
*iface
, ISVGAnimatedLength
*v
)
843 SVGCircleElement
*This
= impl_from_ISVGCircleElement(iface
);
844 FIXME("(%p)->(%p)\n", This
, v
);
848 static HRESULT WINAPI
SVGCircleElement_get_cy(ISVGCircleElement
*iface
, ISVGAnimatedLength
**p
)
850 SVGCircleElement
*This
= impl_from_ISVGCircleElement(iface
);
851 FIXME("(%p)->(%p)\n", This
, p
);
855 static HRESULT WINAPI
SVGCircleElement_putref_r(ISVGCircleElement
*iface
, ISVGAnimatedLength
*v
)
857 SVGCircleElement
*This
= impl_from_ISVGCircleElement(iface
);
858 FIXME("(%p)->(%p)\n", This
, v
);
862 static HRESULT WINAPI
SVGCircleElement_get_r(ISVGCircleElement
*iface
, ISVGAnimatedLength
**p
)
864 SVGCircleElement
*This
= impl_from_ISVGCircleElement(iface
);
865 FIXME("(%p)->(%p)\n", This
, p
);
869 static const ISVGCircleElementVtbl SVGCircleElementVtbl
= {
870 SVGCircleElement_QueryInterface
,
871 SVGCircleElement_AddRef
,
872 SVGCircleElement_Release
,
873 SVGCircleElement_GetTypeInfoCount
,
874 SVGCircleElement_GetTypeInfo
,
875 SVGCircleElement_GetIDsOfNames
,
876 SVGCircleElement_Invoke
,
877 SVGCircleElement_putref_cx
,
878 SVGCircleElement_get_cx
,
879 SVGCircleElement_putref_cy
,
880 SVGCircleElement_get_cy
,
881 SVGCircleElement_putref_r
,
882 SVGCircleElement_get_r
885 static inline SVGCircleElement
*SVGCircleElement_from_HTMLDOMNode(HTMLDOMNode
*iface
)
887 return CONTAINING_RECORD(iface
, SVGCircleElement
, svg_element
.element
.node
);
890 static HRESULT
SVGCircleElement_QI(HTMLDOMNode
*iface
, REFIID riid
, void **ppv
)
892 SVGCircleElement
*This
= SVGCircleElement_from_HTMLDOMNode(iface
);
894 TRACE("(%p)->(%s %p)\n", This
, debugstr_mshtml_guid(riid
), ppv
);
896 if(IsEqualGUID(&IID_ISVGCircleElement
, riid
))
897 *ppv
= &This
->ISVGCircleElement_iface
;
899 return SVGElement_QI(&This
->svg_element
.element
.node
, riid
, ppv
);
901 IUnknown_AddRef((IUnknown
*)*ppv
);
905 static const NodeImplVtbl SVGCircleElementImplVtbl
= {
906 &CLSID_SVGCircleElement
,
908 HTMLElement_destructor
,
912 HTMLElement_get_attr_col
,
915 static HRESULT
create_circle_element(HTMLDocumentNode
*doc
, nsIDOMSVGElement
*nselem
, HTMLElement
**elem
)
917 SVGCircleElement
*ret
;
919 ret
= heap_alloc_zero(sizeof(SVGCircleElement
));
921 return E_OUTOFMEMORY
;
923 ret
->ISVGCircleElement_iface
.lpVtbl
= &SVGCircleElementVtbl
;
924 ret
->svg_element
.element
.node
.vtbl
= &SVGCircleElementImplVtbl
;
926 init_svg_element(&ret
->svg_element
, doc
, nselem
);
928 *elem
= &ret
->svg_element
.element
;
933 ISVGTextContentElement ISVGTextContentElement_iface
;
934 SVGElement
*svg_element
;
935 } SVGTextContentElement
;
937 static inline SVGTextContentElement
*impl_from_ISVGTextContentElement(ISVGTextContentElement
*iface
)
939 return CONTAINING_RECORD(iface
, SVGTextContentElement
, ISVGTextContentElement_iface
);
942 static HRESULT WINAPI
SVGTextContentElement_QueryInterface(ISVGTextContentElement
*iface
,
943 REFIID riid
, void **ppv
)
945 SVGTextContentElement
*This
= impl_from_ISVGTextContentElement(iface
);
946 return IHTMLDOMNode_QueryInterface(&This
->svg_element
->element
.node
.IHTMLDOMNode_iface
, riid
, ppv
);
949 static ULONG WINAPI
SVGTextContentElement_AddRef(ISVGTextContentElement
*iface
)
951 SVGTextContentElement
*This
= impl_from_ISVGTextContentElement(iface
);
953 return IHTMLDOMNode_AddRef(&This
->svg_element
->element
.node
.IHTMLDOMNode_iface
);
956 static ULONG WINAPI
SVGTextContentElement_Release(ISVGTextContentElement
*iface
)
958 SVGTextContentElement
*This
= impl_from_ISVGTextContentElement(iface
);
960 return IHTMLDOMNode_Release(&This
->svg_element
->element
.node
.IHTMLDOMNode_iface
);
963 static HRESULT WINAPI
SVGTextContentElement_GetTypeInfoCount(ISVGTextContentElement
*iface
, UINT
*pctinfo
)
965 SVGTextContentElement
*This
= impl_from_ISVGTextContentElement(iface
);
966 return IDispatchEx_GetTypeInfoCount(&This
->svg_element
->element
.node
.event_target
.dispex
.IDispatchEx_iface
, pctinfo
);
969 static HRESULT WINAPI
SVGTextContentElement_GetTypeInfo(ISVGTextContentElement
*iface
, UINT iTInfo
,
970 LCID lcid
, ITypeInfo
**ppTInfo
)
972 SVGTextContentElement
*This
= impl_from_ISVGTextContentElement(iface
);
973 return IDispatchEx_GetTypeInfo(&This
->svg_element
->element
.node
.event_target
.dispex
.IDispatchEx_iface
, iTInfo
, lcid
,
977 static HRESULT WINAPI
SVGTextContentElement_GetIDsOfNames(ISVGTextContentElement
*iface
, REFIID riid
,
978 LPOLESTR
*rgszNames
, UINT cNames
,
979 LCID lcid
, DISPID
*rgDispId
)
981 SVGTextContentElement
*This
= impl_from_ISVGTextContentElement(iface
);
982 return IDispatchEx_GetIDsOfNames(&This
->svg_element
->element
.node
.event_target
.dispex
.IDispatchEx_iface
, riid
, rgszNames
,
983 cNames
, lcid
, rgDispId
);
986 static HRESULT WINAPI
SVGTextContentElement_Invoke(ISVGTextContentElement
*iface
, DISPID dispIdMember
,
987 REFIID riid
, LCID lcid
, WORD wFlags
, DISPPARAMS
*pDispParams
,
988 VARIANT
*pVarResult
, EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
990 SVGTextContentElement
*This
= impl_from_ISVGTextContentElement(iface
);
991 return IDispatchEx_Invoke(&This
->svg_element
->element
.node
.event_target
.dispex
.IDispatchEx_iface
, dispIdMember
, riid
,
992 lcid
, wFlags
, pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
995 static HRESULT WINAPI
SVGTextContentElement_putref_textLength(ISVGTextContentElement
*iface
, ISVGAnimatedLength
*v
)
997 SVGTextContentElement
*This
= impl_from_ISVGTextContentElement(iface
);
998 FIXME("(%p)->(%p)\n", This
, v
);
1002 static HRESULT WINAPI
SVGTextContentElement_get_textLength(ISVGTextContentElement
*iface
, ISVGAnimatedLength
**p
)
1004 SVGTextContentElement
*This
= impl_from_ISVGTextContentElement(iface
);
1005 FIXME("(%p)->(%p)\n", This
, p
);
1009 static HRESULT WINAPI
SVGTextContentElement_putref_lengthAdjust(ISVGTextContentElement
*iface
, ISVGAnimatedEnumeration
*v
)
1011 SVGTextContentElement
*This
= impl_from_ISVGTextContentElement(iface
);
1012 FIXME("(%p)->(%p)\n", This
, v
);
1016 static HRESULT WINAPI
SVGTextContentElement_get_lengthAdjust(ISVGTextContentElement
*iface
, ISVGAnimatedEnumeration
**p
)
1018 SVGTextContentElement
*This
= impl_from_ISVGTextContentElement(iface
);
1019 FIXME("(%p)->(%p)\n", This
, p
);
1023 static HRESULT WINAPI
SVGTextContentElement_getNumberOfChars(ISVGTextContentElement
*iface
, LONG
*p
)
1025 SVGTextContentElement
*This
= impl_from_ISVGTextContentElement(iface
);
1026 FIXME("(%p)->(%p)\n", This
, p
);
1030 static HRESULT WINAPI
SVGTextContentElement_getComputedTextLength(ISVGTextContentElement
*iface
, float *p
)
1032 SVGTextContentElement
*This
= impl_from_ISVGTextContentElement(iface
);
1033 FIXME("(%p)->(%p)\n", This
, p
);
1037 static HRESULT WINAPI
SVGTextContentElement_getSubStringLength(ISVGTextContentElement
*iface
,
1038 LONG charnum
, LONG nchars
, float *p
)
1040 SVGTextContentElement
*This
= impl_from_ISVGTextContentElement(iface
);
1041 FIXME("(%p)->(%d %d %p)\n", This
, charnum
, nchars
, p
);
1045 static HRESULT WINAPI
SVGTextContentElement_getStartPositionOfChar(ISVGTextContentElement
*iface
,
1046 LONG charnum
, ISVGPoint
**p
)
1048 SVGTextContentElement
*This
= impl_from_ISVGTextContentElement(iface
);
1049 FIXME("(%p)->(%d %p)\n", This
, charnum
, p
);
1053 static HRESULT WINAPI
SVGTextContentElement_getEndPositionOfChar(ISVGTextContentElement
*iface
,
1054 LONG charnum
, ISVGPoint
**p
)
1056 SVGTextContentElement
*This
= impl_from_ISVGTextContentElement(iface
);
1057 FIXME("(%p)->(%d %p)\n", This
, charnum
, p
);
1061 static HRESULT WINAPI
SVGTextContentElement_getExtentOfChar(ISVGTextContentElement
*iface
,
1062 LONG charnum
, ISVGRect
**p
)
1064 SVGTextContentElement
*This
= impl_from_ISVGTextContentElement(iface
);
1065 FIXME("(%p)->(%d %p)\n", This
, charnum
, p
);
1069 static HRESULT WINAPI
SVGTextContentElement_getRotationOfChar(ISVGTextContentElement
*iface
,
1070 LONG charnum
, float *p
)
1072 SVGTextContentElement
*This
= impl_from_ISVGTextContentElement(iface
);
1073 FIXME("(%p)->(%d %p)\n", This
, charnum
, p
);
1077 static HRESULT WINAPI
SVGTextContentElement_getCharNumAtPosition(ISVGTextContentElement
*iface
,
1078 ISVGPoint
*point
, LONG
*p
)
1080 SVGTextContentElement
*This
= impl_from_ISVGTextContentElement(iface
);
1081 FIXME("(%p)->(%p %p)\n", This
, point
, p
);
1085 static HRESULT WINAPI
SVGTextContentElement_selectSubString(ISVGTextContentElement
*iface
,
1086 LONG charnum
, LONG nchars
)
1088 SVGTextContentElement
*This
= impl_from_ISVGTextContentElement(iface
);
1089 FIXME("(%p)->(%d %d)\n", This
, charnum
, nchars
);
1093 static const ISVGTextContentElementVtbl SVGTextContentElementVtbl
= {
1094 SVGTextContentElement_QueryInterface
,
1095 SVGTextContentElement_AddRef
,
1096 SVGTextContentElement_Release
,
1097 SVGTextContentElement_GetTypeInfoCount
,
1098 SVGTextContentElement_GetTypeInfo
,
1099 SVGTextContentElement_GetIDsOfNames
,
1100 SVGTextContentElement_Invoke
,
1101 SVGTextContentElement_putref_textLength
,
1102 SVGTextContentElement_get_textLength
,
1103 SVGTextContentElement_putref_lengthAdjust
,
1104 SVGTextContentElement_get_lengthAdjust
,
1105 SVGTextContentElement_getNumberOfChars
,
1106 SVGTextContentElement_getComputedTextLength
,
1107 SVGTextContentElement_getSubStringLength
,
1108 SVGTextContentElement_getStartPositionOfChar
,
1109 SVGTextContentElement_getEndPositionOfChar
,
1110 SVGTextContentElement_getExtentOfChar
,
1111 SVGTextContentElement_getRotationOfChar
,
1112 SVGTextContentElement_getCharNumAtPosition
,
1113 SVGTextContentElement_selectSubString
1116 static void init_text_content_element(SVGTextContentElement
*text_content
, SVGElement
*svg_element
)
1118 text_content
->ISVGTextContentElement_iface
.lpVtbl
= &SVGTextContentElementVtbl
;
1119 text_content
->svg_element
= svg_element
;
1122 struct SVGTSpanElement
{
1123 SVGElement svg_element
;
1124 SVGTextContentElement text_content
;
1127 static inline SVGTSpanElement
*SVGTSpanElement_from_HTMLDOMNode(HTMLDOMNode
*iface
)
1129 return CONTAINING_RECORD(iface
, SVGTSpanElement
, svg_element
.element
.node
);
1132 static HRESULT
SVGTSpanElement_QI(HTMLDOMNode
*iface
, REFIID riid
, void **ppv
)
1134 SVGTSpanElement
*This
= SVGTSpanElement_from_HTMLDOMNode(iface
);
1136 TRACE("(%p)->(%s %p)\n", This
, debugstr_mshtml_guid(riid
), ppv
);
1138 if(IsEqualGUID(&IID_ISVGTSpanElement
, riid
))
1139 *ppv
= &This
->svg_element
.ISVGElement_iface
; /* no additional methods */
1140 else if(IsEqualGUID(&IID_ISVGTextContentElement
, riid
))
1141 *ppv
= &This
->text_content
.ISVGTextContentElement_iface
;
1143 return SVGElement_QI(&This
->svg_element
.element
.node
, riid
, ppv
);
1145 IUnknown_AddRef((IUnknown
*)*ppv
);
1149 static const NodeImplVtbl SVGTSpanElementImplVtbl
= {
1150 &CLSID_SVGTSpanElement
,
1152 HTMLElement_destructor
,
1156 HTMLElement_get_attr_col
,
1159 static HRESULT
create_tspan_element(HTMLDocumentNode
*doc
, nsIDOMSVGElement
*nselem
, HTMLElement
**elem
)
1161 SVGTSpanElement
*ret
;
1163 ret
= heap_alloc_zero(sizeof(SVGTSpanElement
));
1165 return E_OUTOFMEMORY
;
1167 ret
->svg_element
.element
.node
.vtbl
= &SVGTSpanElementImplVtbl
;
1168 init_text_content_element(&ret
->text_content
, &ret
->svg_element
);
1169 init_svg_element(&ret
->svg_element
, doc
, nselem
);
1171 *elem
= &ret
->svg_element
.element
;
1175 HRESULT
create_svg_element(HTMLDocumentNode
*doc
, nsIDOMSVGElement
*dom_element
, const WCHAR
*tag_name
, HTMLElement
**elem
)
1177 SVGElement
*svg_element
;
1179 TRACE("%s\n", debugstr_w(tag_name
));
1181 if(!wcscmp(tag_name
, L
"svg"))
1182 return create_viewport_element(doc
, dom_element
, elem
);
1183 if(!wcscmp(tag_name
, L
"circle"))
1184 return create_circle_element(doc
, dom_element
, elem
);
1185 if(!wcscmp(tag_name
, L
"tspan"))
1186 return create_tspan_element(doc
, dom_element
, elem
);
1188 svg_element
= heap_alloc_zero(sizeof(*svg_element
));
1190 return E_OUTOFMEMORY
;
1192 init_svg_element(svg_element
, doc
, dom_element
);
1193 *elem
= &svg_element
->element
;