diff --git a/dlls/mshtml/Makefile.in b/dlls/mshtml/Makefile.in index 19ff394ecc3..877ffdbea67 100644 --- a/dlls/mshtml/Makefile.in +++ b/dlls/mshtml/Makefile.in @@ -31,6 +31,7 @@ C_SRCS = \ htmlscript.c \ htmlselect.c \ htmlstyle.c \ + htmlstyle2.c \ htmlstylesheet.c \ htmltable.c \ htmltablerow.c \ diff --git a/dlls/mshtml/htmlstyle.c b/dlls/mshtml/htmlstyle.c index 669df72911a..ad6dc84956c 100644 --- a/dlls/mshtml/htmlstyle.c +++ b/dlls/mshtml/htmlstyle.c @@ -32,17 +32,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(mshtml); -typedef struct { - DispatchEx dispex; - const IHTMLStyleVtbl *lpHTMLStyleVtbl; - - LONG ref; - - nsIDOMCSSStyleDeclaration *nsstyle; -} HTMLStyle; - -#define HTMLSTYLE(x) ((IHTMLStyle*) &(x)->lpHTMLStyleVtbl) - static const WCHAR attrBackground[] = {'b','a','c','k','g','r','o','u','n','d',0}; static const WCHAR attrBackgroundColor[] = @@ -242,6 +231,9 @@ static HRESULT WINAPI HTMLStyle_QueryInterface(IHTMLStyle *iface, REFIID riid, v }else if(IsEqualGUID(&IID_IHTMLStyle, riid)) { TRACE("(%p)->(IID_IHTMLStyle %p)\n", This, ppv); *ppv = HTMLSTYLE(This); + }else if(IsEqualGUID(&IID_IHTMLStyle2, riid)) { + TRACE("(%p)->(IID_IHTMLStyle2 %p)\n", This, ppv); + *ppv = HTMLSTYLE2(This); }else if(dispex_query_interface(&This->dispex, riid, ppv)) { return *ppv ? S_OK : E_NOINTERFACE; } @@ -1909,11 +1901,12 @@ static dispex_static_data_t HTMLStyle_dispex = { IHTMLStyle *HTMLStyle_Create(nsIDOMCSSStyleDeclaration *nsstyle) { - HTMLStyle *ret = heap_alloc(sizeof(HTMLStyle)); + HTMLStyle *ret = heap_alloc_zero(sizeof(HTMLStyle)); ret->lpHTMLStyleVtbl = &HTMLStyleVtbl; ret->ref = 1; ret->nsstyle = nsstyle; + HTMLStyle2_Init(ret); nsIDOMCSSStyleDeclaration_AddRef(nsstyle); diff --git a/dlls/mshtml/htmlstyle2.c b/dlls/mshtml/htmlstyle2.c new file mode 100644 index 00000000000..c25ce62139e --- /dev/null +++ b/dlls/mshtml/htmlstyle2.c @@ -0,0 +1,605 @@ +/* + * Copyright 2008 Jacek Caban for CodeWeavers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include + +#define COBJMACROS + +#include "windef.h" +#include "winbase.h" +#include "winuser.h" +#include "ole2.h" + +#include "wine/debug.h" +#include "wine/unicode.h" + +#include "mshtml_private.h" + +WINE_DEFAULT_DEBUG_CHANNEL(mshtml); + +#define HTMLSTYLE2_THIS(iface) DEFINE_THIS(HTMLStyle, HTMLStyle2, iface) + +static HRESULT WINAPI HTMLStyle2_QueryInterface(IHTMLStyle2 *iface, REFIID riid, void **ppv) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + + return IHTMLStyle_QueryInterface(HTMLSTYLE(This), riid, ppv); +} + +static ULONG WINAPI HTMLStyle2_AddRef(IHTMLStyle2 *iface) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + + return IHTMLStyle_AddRef(HTMLSTYLE(This)); +} + +static ULONG WINAPI HTMLStyle2_Release(IHTMLStyle2 *iface) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + + return IHTMLStyle_Release(HTMLSTYLE(This)); +} + +static HRESULT WINAPI HTMLStyle2_GetTypeInfoCount(IHTMLStyle2 *iface, UINT *pctinfo) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + return IDispatchEx_GetTypeInfoCount(DISPATCHEX(&This->dispex), pctinfo); +} + +static HRESULT WINAPI HTMLStyle2_GetTypeInfo(IHTMLStyle2 *iface, UINT iTInfo, + LCID lcid, ITypeInfo **ppTInfo) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + return IDispatchEx_GetTypeInfo(DISPATCHEX(&This->dispex), iTInfo, lcid, ppTInfo); +} + +static HRESULT WINAPI HTMLStyle2_GetIDsOfNames(IHTMLStyle2 *iface, REFIID riid, + LPOLESTR *rgszNames, UINT cNames, + LCID lcid, DISPID *rgDispId) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + return IDispatchEx_GetIDsOfNames(DISPATCHEX(&This->dispex), riid, rgszNames, cNames, lcid, rgDispId); +} + +static HRESULT WINAPI HTMLStyle2_Invoke(IHTMLStyle2 *iface, DISPID dispIdMember, + REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, + VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + return IDispatchEx_Invoke(DISPATCHEX(&This->dispex), dispIdMember, riid, lcid, + wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); +} + +static HRESULT WINAPI HTMLStyle2_put_tableLayout(IHTMLStyle2 *iface, BSTR v) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%s)\n", This, debugstr_w(v)); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_get_tableLayout(IHTMLStyle2 *iface, BSTR *p) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_put_borderCollapse(IHTMLStyle2 *iface, BSTR v) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%s)\n", This, debugstr_w(v)); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_get_borderCollapse(IHTMLStyle2 *iface, BSTR *p) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_put_direction(IHTMLStyle2 *iface, BSTR v) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%s)\n", This, debugstr_w(v)); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_get_direction(IHTMLStyle2 *iface, BSTR *p) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_put_behavior(IHTMLStyle2 *iface, BSTR v) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%s)\n", This, debugstr_w(v)); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_get_behavior(IHTMLStyle2 *iface, BSTR *p) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_setExpression(IHTMLStyle2 *iface, BSTR propname, BSTR expression, BSTR language) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%s %s %s)\n", This, debugstr_w(propname), debugstr_w(expression), debugstr_w(language)); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_getExpression(IHTMLStyle2 *iface, BSTR propname, VARIANT *expression) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%s %p)\n", This, debugstr_w(propname), expression); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_removeExpression(IHTMLStyle2 *iface, BSTR propname, VARIANT_BOOL *pfSuccess) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%s %p)\n", This, debugstr_w(propname), pfSuccess); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_put_position(IHTMLStyle2 *iface, BSTR v) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%s)\n", This, debugstr_w(v)); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_get_position(IHTMLStyle2 *iface, BSTR *p) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_put_unicodeBidi(IHTMLStyle2 *iface, BSTR v) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%s)\n", This, debugstr_w(v)); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_get_unicodeBidi(IHTMLStyle2 *iface, BSTR *p) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_put_bottom(IHTMLStyle2 *iface, VARIANT v) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%s)\n", This, debugstr_variant(&v)); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_get_bottom(IHTMLStyle2 *iface, VARIANT *p) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_put_right(IHTMLStyle2 *iface, VARIANT v) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%s)\n", This, debugstr_variant(&v)); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_get_right(IHTMLStyle2 *iface, VARIANT *p) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_put_pixelBottom(IHTMLStyle2 *iface, long v) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%ld)\n", This, v); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_get_pixelBottom(IHTMLStyle2 *iface, long *p) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_put_pixelRight(IHTMLStyle2 *iface, long v) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%ld)\n", This, v); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_get_pixelRight(IHTMLStyle2 *iface, long *p) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_put_posBottom(IHTMLStyle2 *iface, float v) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%f)\n", This, v); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_get_posBottom(IHTMLStyle2 *iface, float *p) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_put_posRight(IHTMLStyle2 *iface, float v) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%f)\n", This, v); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_get_posRight(IHTMLStyle2 *iface, float *p) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_put_imeMode(IHTMLStyle2 *iface, BSTR v) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%s)\n", This, debugstr_w(v)); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_get_imeMode(IHTMLStyle2 *iface, BSTR *p) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_put_rubyAlign(IHTMLStyle2 *iface, BSTR v) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%s)\n", This, debugstr_w(v)); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_get_rubyAlign(IHTMLStyle2 *iface, BSTR *p) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_put_rubyPosition(IHTMLStyle2 *iface, BSTR v) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%s)\n", This, debugstr_w(v)); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_get_rubyPosition(IHTMLStyle2 *iface, BSTR *p) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_put_rubyOverhang(IHTMLStyle2 *iface, BSTR v) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%s)\n", This, debugstr_w(v)); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_get_rubyOverhang(IHTMLStyle2 *iface, BSTR *p) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_put_layoutGridChar(IHTMLStyle2 *iface, VARIANT v) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%s)\n", This, debugstr_variant(&v)); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_get_layoutGridChar(IHTMLStyle2 *iface, VARIANT *p) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_put_layoutGridLine(IHTMLStyle2 *iface, VARIANT v) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%s)\n", This, debugstr_variant(&v)); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_get_layoutGridLine(IHTMLStyle2 *iface, VARIANT *p) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_put_layoutGridMode(IHTMLStyle2 *iface, BSTR v) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%s)\n", This, debugstr_w(v)); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_get_layoutGridMode(IHTMLStyle2 *iface, BSTR *p) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_put_layoutGridType(IHTMLStyle2 *iface, BSTR v) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%s)\n", This, debugstr_w(v)); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_get_layoutGridType(IHTMLStyle2 *iface, BSTR *p) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_put_layoutGrid(IHTMLStyle2 *iface, BSTR v) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%s)\n", This, debugstr_w(v)); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_get_layoutGrid(IHTMLStyle2 *iface, BSTR *p) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_put_wordBreak(IHTMLStyle2 *iface, BSTR v) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%s)\n", This, debugstr_w(v)); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_get_wordBreak(IHTMLStyle2 *iface, BSTR *p) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_put_lineBreak(IHTMLStyle2 *iface, BSTR v) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%s)\n", This, debugstr_w(v)); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_get_lineBreak(IHTMLStyle2 *iface, BSTR *p) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_put_textJustify(IHTMLStyle2 *iface, BSTR v) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%s)\n", This, debugstr_w(v)); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_get_textJustify(IHTMLStyle2 *iface, BSTR *p) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_put_textJustifyTrim(IHTMLStyle2 *iface, BSTR v) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%s)\n", This, debugstr_w(v)); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_get_textJustifyTrim(IHTMLStyle2 *iface, BSTR *p) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_put_textKashida(IHTMLStyle2 *iface, VARIANT v) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%s)\n", This, debugstr_variant(&v)); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_get_textKashida(IHTMLStyle2 *iface, VARIANT *p) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_put_textAutospace(IHTMLStyle2 *iface, BSTR v) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%s)\n", This, debugstr_w(v)); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_get_textAutospace(IHTMLStyle2 *iface, BSTR *p) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_put_overflowX(IHTMLStyle2 *iface, BSTR v) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%s)\n", This, debugstr_w(v)); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_get_overflowX(IHTMLStyle2 *iface, BSTR *p) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_put_overflowY(IHTMLStyle2 *iface, BSTR v) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%s)\n", This, debugstr_w(v)); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_get_overflowY(IHTMLStyle2 *iface, BSTR *p) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_put_accelerator(IHTMLStyle2 *iface, BSTR v) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%s)\n", This, debugstr_w(v)); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLStyle2_get_accelerator(IHTMLStyle2 *iface, BSTR *p) +{ + HTMLStyle *This = HTMLSTYLE2_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static const IHTMLStyle2Vtbl HTMLStyle2Vtbl = { + HTMLStyle2_QueryInterface, + HTMLStyle2_AddRef, + HTMLStyle2_Release, + HTMLStyle2_GetTypeInfoCount, + HTMLStyle2_GetTypeInfo, + HTMLStyle2_GetIDsOfNames, + HTMLStyle2_Invoke, + HTMLStyle2_put_tableLayout, + HTMLStyle2_get_tableLayout, + HTMLStyle2_put_borderCollapse, + HTMLStyle2_get_borderCollapse, + HTMLStyle2_put_direction, + HTMLStyle2_get_direction, + HTMLStyle2_put_behavior, + HTMLStyle2_get_behavior, + HTMLStyle2_setExpression, + HTMLStyle2_getExpression, + HTMLStyle2_removeExpression, + HTMLStyle2_put_position, + HTMLStyle2_get_position, + HTMLStyle2_put_unicodeBidi, + HTMLStyle2_get_unicodeBidi, + HTMLStyle2_put_bottom, + HTMLStyle2_get_bottom, + HTMLStyle2_put_right, + HTMLStyle2_get_right, + HTMLStyle2_put_pixelBottom, + HTMLStyle2_get_pixelBottom, + HTMLStyle2_put_pixelRight, + HTMLStyle2_get_pixelRight, + HTMLStyle2_put_posBottom, + HTMLStyle2_get_posBottom, + HTMLStyle2_put_posRight, + HTMLStyle2_get_posRight, + HTMLStyle2_put_imeMode, + HTMLStyle2_get_imeMode, + HTMLStyle2_put_rubyAlign, + HTMLStyle2_get_rubyAlign, + HTMLStyle2_put_rubyPosition, + HTMLStyle2_get_rubyPosition, + HTMLStyle2_put_rubyOverhang, + HTMLStyle2_get_rubyOverhang, + HTMLStyle2_put_layoutGridChar, + HTMLStyle2_get_layoutGridChar, + HTMLStyle2_put_layoutGridLine, + HTMLStyle2_get_layoutGridLine, + HTMLStyle2_put_layoutGridMode, + HTMLStyle2_get_layoutGridMode, + HTMLStyle2_put_layoutGridType, + HTMLStyle2_get_layoutGridType, + HTMLStyle2_put_layoutGrid, + HTMLStyle2_get_layoutGrid, + HTMLStyle2_put_wordBreak, + HTMLStyle2_get_wordBreak, + HTMLStyle2_put_lineBreak, + HTMLStyle2_get_lineBreak, + HTMLStyle2_put_textJustify, + HTMLStyle2_get_textJustify, + HTMLStyle2_put_textJustifyTrim, + HTMLStyle2_get_textJustifyTrim, + HTMLStyle2_put_textKashida, + HTMLStyle2_get_textKashida, + HTMLStyle2_put_textAutospace, + HTMLStyle2_get_textAutospace, + HTMLStyle2_put_overflowX, + HTMLStyle2_get_overflowX, + HTMLStyle2_put_overflowY, + HTMLStyle2_get_overflowY, + HTMLStyle2_put_accelerator, + HTMLStyle2_get_accelerator +}; + +void HTMLStyle2_Init(HTMLStyle *This) +{ + This->lpHTMLStyle2Vtbl = &HTMLStyle2Vtbl; +} diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 247dfa8141d..9cd4ec5584b 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -390,6 +390,16 @@ typedef struct { ConnectionPoint cp; } HTMLTextContainer; +typedef struct { + DispatchEx dispex; + const IHTMLStyleVtbl *lpHTMLStyleVtbl; + const IHTMLStyle2Vtbl *lpHTMLStyle2Vtbl; + + LONG ref; + + nsIDOMCSSStyleDeclaration *nsstyle; +} HTMLStyle; + #define HTMLWINDOW2(x) ((IHTMLWindow2*) &(x)->lpHTMLWindow2Vtbl) #define HTMLWINDOW3(x) ((IHTMLWindow3*) &(x)->lpHTMLWindow3Vtbl) @@ -446,6 +456,9 @@ typedef struct { #define HTMLOPTFACTORY(x) ((IHTMLOptionElementFactory*) &(x)->lpHTMLOptionElementFactoryVtbl) #define HTMLLOCATION(x) ((IHTMLLocation*) &(x)->lpHTMLLocationVtbl) +#define HTMLSTYLE(x) ((IHTMLStyle*) &(x)->lpHTMLStyleVtbl) +#define HTMLSTYLE2(x) ((IHTMLStyle2*) &(x)->lpHTMLStyle2Vtbl) + #define DISPATCHEX(x) ((IDispatchEx*) &(x)->lpIDispatchExVtbl) #define DEFINE_THIS2(cls,ifc,iface) ((cls*)((BYTE*)(iface)-offsetof(cls,ifc))) @@ -471,6 +484,8 @@ void HTMLDocument_Window_Init(HTMLDocument*); void HTMLDocument_Service_Init(HTMLDocument*); void HTMLDocument_Hlink_Init(HTMLDocument*); +void HTMLStyle2_Init(HTMLStyle*); + void ConnectionPoint_Init(ConnectionPoint*,ConnectionPointContainer*,REFIID); void ConnectionPointContainer_Init(ConnectionPointContainer*,IUnknown*); void ConnectionPointContainer_Destroy(ConnectionPointContainer*); diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c index 199248b7f33..aa6996ce8d3 100644 --- a/dlls/mshtml/tests/dom.c +++ b/dlls/mshtml/tests/dom.c @@ -269,6 +269,15 @@ static const IID * const generic_iids[] = { NULL }; +static const IID * const style_iids[] = { + &IID_IUnknown, + &IID_IDispatch, + &IID_IDispatchEx, + &IID_IHTMLStyle, + &IID_IHTMLStyle2, + NULL +}; + typedef struct { const char *tag; REFIID *iids; @@ -1975,6 +1984,7 @@ static void test_default_style(IHTMLStyle *style) HRESULT hres; test_disp((IUnknown*)style, &DIID_DispHTMLStyle); + test_ifaces((IUnknown*)style, style_iids); str = (void*)0xdeadbeef; hres = IHTMLStyle_get_fontFamily(style, &str);