mshtml: Use CSSStyle for HTMLCurrentStyle implementation.
Signed-off-by: Jacek Caban <jacek@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
069d5de90a
commit
68d0052b63
|
@ -34,26 +34,23 @@
|
|||
WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
|
||||
|
||||
struct HTMLCurrentStyle {
|
||||
DispatchEx dispex;
|
||||
CSSStyle css_style;
|
||||
IHTMLCurrentStyle IHTMLCurrentStyle_iface;
|
||||
IHTMLCurrentStyle2 IHTMLCurrentStyle2_iface;
|
||||
IHTMLCurrentStyle3 IHTMLCurrentStyle3_iface;
|
||||
IHTMLCurrentStyle4 IHTMLCurrentStyle4_iface;
|
||||
|
||||
LONG ref;
|
||||
|
||||
nsIDOMCSSStyleDeclaration *nsstyle;
|
||||
HTMLElement *elem;
|
||||
};
|
||||
|
||||
static inline HRESULT get_current_style_property(HTMLCurrentStyle *current_style, styleid_t sid, BSTR *p)
|
||||
{
|
||||
return get_nsstyle_property(current_style->nsstyle, sid, COMPAT_MODE_QUIRKS, p);
|
||||
return get_nsstyle_property(current_style->css_style.nsstyle, sid, COMPAT_MODE_QUIRKS, p);
|
||||
}
|
||||
|
||||
static inline HRESULT get_current_style_property_var(HTMLCurrentStyle *This, styleid_t sid, VARIANT *v)
|
||||
{
|
||||
return get_nsstyle_property_var(This->nsstyle, sid, COMPAT_MODE_QUIRKS, v);
|
||||
return get_nsstyle_property_var(This->css_style.nsstyle, sid, COMPAT_MODE_QUIRKS, v);
|
||||
}
|
||||
|
||||
static inline HTMLCurrentStyle *impl_from_IHTMLCurrentStyle(IHTMLCurrentStyle *iface)
|
||||
|
@ -76,80 +73,59 @@ static inline HTMLCurrentStyle *impl_from_IHTMLCurrentStyle4(IHTMLCurrentStyle4
|
|||
return CONTAINING_RECORD(iface, HTMLCurrentStyle, IHTMLCurrentStyle4_iface);
|
||||
}
|
||||
|
||||
static void *HTMLCurrentStyle_QI(CSSStyle *css_style, REFIID riid)
|
||||
{
|
||||
HTMLCurrentStyle *This = CONTAINING_RECORD(css_style, HTMLCurrentStyle, css_style);
|
||||
if(IsEqualGUID(&IID_IHTMLCurrentStyle, riid))
|
||||
return &This->IHTMLCurrentStyle_iface;
|
||||
if(IsEqualGUID(&IID_IHTMLCurrentStyle2, riid))
|
||||
return &This->IHTMLCurrentStyle2_iface;
|
||||
if(IsEqualGUID(&IID_IHTMLCurrentStyle3, riid))
|
||||
return &This->IHTMLCurrentStyle3_iface;
|
||||
if(IsEqualGUID(&IID_IHTMLCurrentStyle4, riid))
|
||||
return &This->IHTMLCurrentStyle4_iface;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLCurrentStyle_QueryInterface(IHTMLCurrentStyle *iface, REFIID riid, void **ppv)
|
||||
{
|
||||
HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle(iface);
|
||||
|
||||
TRACE("(%p)->(%s %p)\n", This, debugstr_mshtml_guid(riid), ppv);
|
||||
|
||||
if(IsEqualGUID(&IID_IUnknown, riid)) {
|
||||
*ppv = &This->IHTMLCurrentStyle_iface;
|
||||
}else if(IsEqualGUID(&IID_IHTMLCurrentStyle, riid)) {
|
||||
*ppv = &This->IHTMLCurrentStyle_iface;
|
||||
}else if(IsEqualGUID(&IID_IHTMLCurrentStyle2, riid)) {
|
||||
*ppv = &This->IHTMLCurrentStyle2_iface;
|
||||
}else if(IsEqualGUID(&IID_IHTMLCurrentStyle3, riid)) {
|
||||
*ppv = &This->IHTMLCurrentStyle3_iface;
|
||||
}else if(IsEqualGUID(&IID_IHTMLCurrentStyle4, riid)) {
|
||||
*ppv = &This->IHTMLCurrentStyle4_iface;
|
||||
}else if(dispex_query_interface(&This->dispex, riid, ppv)) {
|
||||
return *ppv ? S_OK : E_NOINTERFACE;
|
||||
}else {
|
||||
*ppv = NULL;
|
||||
WARN("unsupported %s\n", debugstr_mshtml_guid(riid));
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
IUnknown_AddRef((IUnknown*)*ppv);
|
||||
return S_OK;
|
||||
return IHTMLCSSStyleDeclaration_QueryInterface(&This->css_style.IHTMLCSSStyleDeclaration_iface, riid, ppv);
|
||||
}
|
||||
|
||||
static ULONG WINAPI HTMLCurrentStyle_AddRef(IHTMLCurrentStyle *iface)
|
||||
{
|
||||
HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle(iface);
|
||||
LONG ref = InterlockedIncrement(&This->ref);
|
||||
|
||||
TRACE("(%p) ref=%d\n", This, ref);
|
||||
|
||||
return ref;
|
||||
TRACE("(%p)\n", This);
|
||||
return IHTMLCSSStyleDeclaration_AddRef(&This->css_style.IHTMLCSSStyleDeclaration_iface);
|
||||
}
|
||||
|
||||
static ULONG WINAPI HTMLCurrentStyle_Release(IHTMLCurrentStyle *iface)
|
||||
{
|
||||
HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle(iface);
|
||||
LONG ref = InterlockedDecrement(&This->ref);
|
||||
|
||||
TRACE("(%p) ref=%d\n", This, ref);
|
||||
|
||||
if(!ref) {
|
||||
if(This->nsstyle)
|
||||
nsIDOMCSSStyleDeclaration_Release(This->nsstyle);
|
||||
IHTMLElement_Release(&This->elem->IHTMLElement_iface);
|
||||
release_dispex(&This->dispex);
|
||||
heap_free(This);
|
||||
}
|
||||
|
||||
return ref;
|
||||
TRACE("(%p)\n", This);
|
||||
return IHTMLCSSStyleDeclaration_Release(&This->css_style.IHTMLCSSStyleDeclaration_iface);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLCurrentStyle_GetTypeInfoCount(IHTMLCurrentStyle *iface, UINT *pctinfo)
|
||||
{
|
||||
HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle(iface);
|
||||
return IDispatchEx_GetTypeInfoCount(&This->dispex.IDispatchEx_iface, pctinfo);
|
||||
return IDispatchEx_GetTypeInfoCount(&This->css_style.dispex.IDispatchEx_iface, pctinfo);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLCurrentStyle_GetTypeInfo(IHTMLCurrentStyle *iface, UINT iTInfo,
|
||||
LCID lcid, ITypeInfo **ppTInfo)
|
||||
{
|
||||
HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle(iface);
|
||||
return IDispatchEx_GetTypeInfo(&This->dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo);
|
||||
return IDispatchEx_GetTypeInfo(&This->css_style.dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLCurrentStyle_GetIDsOfNames(IHTMLCurrentStyle *iface, REFIID riid,
|
||||
LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
|
||||
{
|
||||
HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle(iface);
|
||||
return IDispatchEx_GetIDsOfNames(&This->dispex.IDispatchEx_iface, riid, rgszNames, cNames,
|
||||
return IDispatchEx_GetIDsOfNames(&This->css_style.dispex.IDispatchEx_iface, riid, rgszNames, cNames,
|
||||
lcid, rgDispId);
|
||||
}
|
||||
|
||||
|
@ -158,7 +134,7 @@ static HRESULT WINAPI HTMLCurrentStyle_Invoke(IHTMLCurrentStyle *iface, DISPID d
|
|||
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
|
||||
{
|
||||
HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle(iface);
|
||||
return IDispatchEx_Invoke(&This->dispex.IDispatchEx_iface, dispIdMember, riid, lcid,
|
||||
return IDispatchEx_Invoke(&This->css_style.dispex.IDispatchEx_iface, dispIdMember, riid, lcid,
|
||||
wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
|
||||
}
|
||||
|
||||
|
@ -935,21 +911,21 @@ static ULONG WINAPI HTMLCurrentStyle2_Release(IHTMLCurrentStyle2 *iface)
|
|||
static HRESULT WINAPI HTMLCurrentStyle2_GetTypeInfoCount(IHTMLCurrentStyle2 *iface, UINT *pctinfo)
|
||||
{
|
||||
HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle2(iface);
|
||||
return IDispatchEx_GetTypeInfoCount(&This->dispex.IDispatchEx_iface, pctinfo);
|
||||
return IDispatchEx_GetTypeInfoCount(&This->css_style.dispex.IDispatchEx_iface, pctinfo);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLCurrentStyle2_GetTypeInfo(IHTMLCurrentStyle2 *iface, UINT iTInfo,
|
||||
LCID lcid, ITypeInfo **ppTInfo)
|
||||
{
|
||||
HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle2(iface);
|
||||
return IDispatchEx_GetTypeInfo(&This->dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo);
|
||||
return IDispatchEx_GetTypeInfo(&This->css_style.dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLCurrentStyle2_GetIDsOfNames(IHTMLCurrentStyle2 *iface, REFIID riid,
|
||||
LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
|
||||
{
|
||||
HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle2(iface);
|
||||
return IDispatchEx_GetIDsOfNames(&This->dispex.IDispatchEx_iface, riid, rgszNames, cNames,
|
||||
return IDispatchEx_GetIDsOfNames(&This->css_style.dispex.IDispatchEx_iface, riid, rgszNames, cNames,
|
||||
lcid, rgDispId);
|
||||
}
|
||||
|
||||
|
@ -958,7 +934,7 @@ static HRESULT WINAPI HTMLCurrentStyle2_Invoke(IHTMLCurrentStyle2 *iface, DISPID
|
|||
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
|
||||
{
|
||||
HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle2(iface);
|
||||
return IDispatchEx_Invoke(&This->dispex.IDispatchEx_iface, dispIdMember, riid, lcid,
|
||||
return IDispatchEx_Invoke(&This->css_style.dispex.IDispatchEx_iface, dispIdMember, riid, lcid,
|
||||
wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
|
||||
}
|
||||
|
||||
|
@ -1153,21 +1129,21 @@ static ULONG WINAPI HTMLCurrentStyle3_Release(IHTMLCurrentStyle3 *iface)
|
|||
static HRESULT WINAPI HTMLCurrentStyle3_GetTypeInfoCount(IHTMLCurrentStyle3 *iface, UINT *pctinfo)
|
||||
{
|
||||
HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle3(iface);
|
||||
return IDispatchEx_GetTypeInfoCount(&This->dispex.IDispatchEx_iface, pctinfo);
|
||||
return IDispatchEx_GetTypeInfoCount(&This->css_style.dispex.IDispatchEx_iface, pctinfo);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLCurrentStyle3_GetTypeInfo(IHTMLCurrentStyle3 *iface, UINT iTInfo,
|
||||
LCID lcid, ITypeInfo **ppTInfo)
|
||||
{
|
||||
HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle3(iface);
|
||||
return IDispatchEx_GetTypeInfo(&This->dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo);
|
||||
return IDispatchEx_GetTypeInfo(&This->css_style.dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLCurrentStyle3_GetIDsOfNames(IHTMLCurrentStyle3 *iface, REFIID riid,
|
||||
LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
|
||||
{
|
||||
HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle3(iface);
|
||||
return IDispatchEx_GetIDsOfNames(&This->dispex.IDispatchEx_iface, riid, rgszNames, cNames,
|
||||
return IDispatchEx_GetIDsOfNames(&This->css_style.dispex.IDispatchEx_iface, riid, rgszNames, cNames,
|
||||
lcid, rgDispId);
|
||||
}
|
||||
|
||||
|
@ -1176,7 +1152,7 @@ static HRESULT WINAPI HTMLCurrentStyle3_Invoke(IHTMLCurrentStyle3 *iface, DISPID
|
|||
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
|
||||
{
|
||||
HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle3(iface);
|
||||
return IDispatchEx_Invoke(&This->dispex.IDispatchEx_iface, dispIdMember, riid, lcid,
|
||||
return IDispatchEx_Invoke(&This->css_style.dispex.IDispatchEx_iface, dispIdMember, riid, lcid,
|
||||
wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
|
||||
}
|
||||
|
||||
|
@ -1248,21 +1224,21 @@ static ULONG WINAPI HTMLCurrentStyle4_Release(IHTMLCurrentStyle4 *iface)
|
|||
static HRESULT WINAPI HTMLCurrentStyle4_GetTypeInfoCount(IHTMLCurrentStyle4 *iface, UINT *pctinfo)
|
||||
{
|
||||
HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle4(iface);
|
||||
return IDispatchEx_GetTypeInfoCount(&This->dispex.IDispatchEx_iface, pctinfo);
|
||||
return IDispatchEx_GetTypeInfoCount(&This->css_style.dispex.IDispatchEx_iface, pctinfo);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLCurrentStyle4_GetTypeInfo(IHTMLCurrentStyle4 *iface, UINT iTInfo,
|
||||
LCID lcid, ITypeInfo **ppTInfo)
|
||||
{
|
||||
HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle4(iface);
|
||||
return IDispatchEx_GetTypeInfo(&This->dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo);
|
||||
return IDispatchEx_GetTypeInfo(&This->css_style.dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLCurrentStyle4_GetIDsOfNames(IHTMLCurrentStyle4 *iface, REFIID riid,
|
||||
LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
|
||||
{
|
||||
HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle4(iface);
|
||||
return IDispatchEx_GetIDsOfNames(&This->dispex.IDispatchEx_iface, riid, rgszNames, cNames,
|
||||
return IDispatchEx_GetIDsOfNames(&This->css_style.dispex.IDispatchEx_iface, riid, rgszNames, cNames,
|
||||
lcid, rgDispId);
|
||||
}
|
||||
|
||||
|
@ -1271,7 +1247,7 @@ static HRESULT WINAPI HTMLCurrentStyle4_Invoke(IHTMLCurrentStyle4 *iface, DISPID
|
|||
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
|
||||
{
|
||||
HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle4(iface);
|
||||
return IDispatchEx_Invoke(&This->dispex.IDispatchEx_iface, dispIdMember, riid, lcid,
|
||||
return IDispatchEx_Invoke(&This->css_style.dispex.IDispatchEx_iface, dispIdMember, riid, lcid,
|
||||
wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
|
||||
}
|
||||
|
||||
|
@ -1378,10 +1354,10 @@ HRESULT HTMLCurrentStyle_Create(HTMLElement *elem, IHTMLCurrentStyle **p)
|
|||
ret->IHTMLCurrentStyle2_iface.lpVtbl = &HTMLCurrentStyle2Vtbl;
|
||||
ret->IHTMLCurrentStyle3_iface.lpVtbl = &HTMLCurrentStyle3Vtbl;
|
||||
ret->IHTMLCurrentStyle4_iface.lpVtbl = &HTMLCurrentStyle4Vtbl;
|
||||
ret->ref = 1;
|
||||
ret->nsstyle = nsstyle;
|
||||
|
||||
init_dispex(&ret->dispex, (IUnknown*)&ret->IHTMLCurrentStyle_iface, &HTMLCurrentStyle_dispex);
|
||||
init_css_style(&ret->css_style, nsstyle, HTMLCurrentStyle_QI, &HTMLCurrentStyle_dispex,
|
||||
dispex_compat_mode(&elem->node.event_target.dispex));
|
||||
nsIDOMCSSStyleDeclaration_Release(nsstyle);
|
||||
|
||||
IHTMLElement_AddRef(&elem->IHTMLElement_iface);
|
||||
ret->elem = elem;
|
||||
|
|
|
@ -10199,7 +10199,7 @@ static HRESULT get_style_from_elem(HTMLElement *elem, nsIDOMCSSStyleDeclaration
|
|||
return S_OK;
|
||||
}
|
||||
|
||||
static void init_css_style(CSSStyle *style, nsIDOMCSSStyleDeclaration *nsstyle, style_qi_t qi,
|
||||
void init_css_style(CSSStyle *style, nsIDOMCSSStyleDeclaration *nsstyle, style_qi_t qi,
|
||||
dispex_static_data_t *dispex_info, compat_mode_t compat_mode)
|
||||
{
|
||||
style->IHTMLCSSStyleDeclaration_iface.lpVtbl = &HTMLCSSStyleDeclarationVtbl;
|
||||
|
|
|
@ -137,6 +137,8 @@ typedef enum {
|
|||
} styleid_t;
|
||||
|
||||
HRESULT HTMLStyle_Create(HTMLElement*,HTMLStyle**) DECLSPEC_HIDDEN;
|
||||
void init_css_style(CSSStyle*,nsIDOMCSSStyleDeclaration*,style_qi_t,
|
||||
dispex_static_data_t*,compat_mode_t) DECLSPEC_HIDDEN;
|
||||
|
||||
HRESULT get_nsstyle_property(nsIDOMCSSStyleDeclaration*,styleid_t,compat_mode_t,BSTR*) DECLSPEC_HIDDEN;
|
||||
HRESULT get_nsstyle_property_var(nsIDOMCSSStyleDeclaration*,styleid_t,compat_mode_t,VARIANT*) DECLSPEC_HIDDEN;
|
||||
|
|
Loading…
Reference in New Issue