2 * Copyright 2006 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
30 #include "mshtml_private.h"
31 #include "htmlstyle.h"
33 #include "wine/debug.h"
34 #include "wine/unicode.h"
36 WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
38 static const WCHAR attrBackground[] =
39 {'b','a','c','k','g','r','o','u','n','d',0};
40 static const WCHAR attrBackgroundColor[] =
41 {'b','a','c','k','g','r','o','u','n','d','-','c','o','l','o','r',0};
42 static const WCHAR attrBackgroundImage[] =
43 {'b','a','c','k','g','r','o','u','n','d','-','i','m','a','g','e',0};
44 static const WCHAR attrBackgroundPositionX[] =
45 {'b','a','c','k','g','r','o','u','n','d','-','p','o','s','i','t','i','o','n','-','x',0};
46 static const WCHAR attrBackgroundPositionY[] =
47 {'b','a','c','k','g','r','o','u','n','d','-','p','o','s','i','t','i','o','n','-','y',0};
48 static const WCHAR attrBackgroundRepeat[] =
49 {'b','a','c','k','g','r','o','u','n','d','-','r','e','p','e','a','t',0};
50 static const WCHAR attrBorder[] =
51 {'b','o','r','d','e','r',0};
52 static const WCHAR attrBorderBottom[] =
53 {'b','o','r','d','e','r','-','b','o','t','t','o','m',0};
54 static const WCHAR attrBorderBottomColor[] =
55 {'b','o','r','d','e','r','-','b','o','t','t','o','m','-','c','o','l','o','r',0};
56 static const WCHAR attrBorderBottomStyle[] =
57 {'b','o','r','d','e','r','-','b','o','t','t','o','m','-','s','t','y','l','e',0};
58 static const WCHAR attrBorderBottomWidth[] =
59 {'b','o','r','d','e','r','-','b','o','t','t','o','m','-','w','i','d','t','h',0};
60 static const WCHAR attrBorderColor[] =
61 {'b','o','r','d','e','r','-','c','o','l','o','r',0};
62 static const WCHAR attrBorderLeft[] =
63 {'b','o','r','d','e','r','-','l','e','f','t',0};
64 static const WCHAR attrBorderLeftColor[] =
65 {'b','o','r','d','e','r','-','l','e','f','t','-','c','o','l','o','r',0};
66 static const WCHAR attrBorderLeftStyle[] =
67 {'b','o','r','d','e','r','-','l','e','f','t','-','s','t','y','l','e',0};
68 static const WCHAR attrBorderLeftWidth[] =
69 {'b','o','r','d','e','r','-','l','e','f','t','-','w','i','d','t','h',0};
70 static const WCHAR attrBorderRight[] =
71 {'b','o','r','d','e','r','-','r','i','g','h','t',0};
72 static const WCHAR attrBorderRightColor[] =
73 {'b','o','r','d','e','r','-','r','i','g','h','t','-','c','o','l','o','r',0};
74 static const WCHAR attrBorderRightStyle[] =
75 {'b','o','r','d','e','r','-','r','i','g','h','t','-','s','t','y','l','e',0};
76 static const WCHAR attrBorderRightWidth[] =
77 {'b','o','r','d','e','r','-','r','i','g','h','t','-','w','i','d','t','h',0};
78 static const WCHAR attrBorderTop[] =
79 {'b','o','r','d','e','r','-','t','o','p',0};
80 static const WCHAR attrBorderTopColor[] =
81 {'b','o','r','d','e','r','-','t','o','p','-','c','o','l','o','r',0};
82 static const WCHAR attrBorderStyle[] =
83 {'b','o','r','d','e','r','-','s','t','y','l','e',0};
84 static const WCHAR attrBorderTopStyle[] =
85 {'b','o','r','d','e','r','-','t','o','p','-','s','t','y','l','e',0};
86 static const WCHAR attrBorderTopWidth[] =
87 {'b','o','r','d','e','r','-','t','o','p','-','w','i','d','t','h',0};
88 static const WCHAR attrBorderWidth[] =
89 {'b','o','r','d','e','r','-','w','i','d','t','h',0};
90 static const WCHAR attrBottom[] =
91 {'b','o','t','t','o','m',0};
92 static const WCHAR attrColor[] =
93 {'c','o','l','o','r',0};
94 static const WCHAR attrCursor[] =
95 {'c','u','r','s','o','r',0};
96 static const WCHAR attrDisplay[] =
97 {'d','i','s','p','l','a','y',0};
98 static const WCHAR attrFilter[] =
99 {'f','i','l','e','t','e','r',0};
100 static const WCHAR attrFontFamily[] =
101 {'f','o','n','t','-','f','a','m','i','l','y',0};
102 static const WCHAR attrFontSize[] =
103 {'f','o','n','t','-','s','i','z','e',0};
104 static const WCHAR attrFontStyle[] =
105 {'f','o','n','t','-','s','t','y','l','e',0};
106 static const WCHAR attrFontVariant[] =
107 {'f','o','n','t','-','v','a','r','i','a','n','t',0};
108 static const WCHAR attrFontWeight[] =
109 {'f','o','n','t','-','w','e','i','g','h','t',0};
110 static const WCHAR attrHeight[] =
111 {'h','e','i','g','h','t',0};
112 static const WCHAR attrLeft[] =
114 static const WCHAR attrLetterSpacing[] =
115 {'l','e','t','t','e','r','-','s','p','a','c','i','n','g',0};
116 static const WCHAR attrLineHeight[] =
117 {'l','i','n','e','-','h','e','i','g','h','t',0};
118 static const WCHAR attrMargin[] =
119 {'m','a','r','g','i','n',0};
120 static const WCHAR attrMarginBottom[] =
121 {'m','a','r','g','i','n','-','b','o','t','t','o','m',0};
122 static const WCHAR attrMarginLeft[] =
123 {'m','a','r','g','i','n','-','l','e','f','t',0};
124 static const WCHAR attrMarginRight[] =
125 {'m','a','r','g','i','n','-','r','i','g','h','t',0};
126 static const WCHAR attrMarginTop[] =
127 {'m','a','r','g','i','n','-','t','o','p',0};
128 static const WCHAR attrMinHeight[] =
129 {'m','i','n','-','h','e','i','g','h','t',0};
130 static const WCHAR attrOverflow[] =
131 {'o','v','e','r','f','l','o','w',0};
132 static const WCHAR attrPadding[] =
133 {'p','a','d','d','i','n','g',0};
134 static const WCHAR attrPaddingBottom[] =
135 {'p','a','d','d','i','n','g','-','b','o','t','t','o','m',0};
136 static const WCHAR attrPaddingLeft[] =
137 {'p','a','d','d','i','n','g','-','l','e','f','t',0};
138 static const WCHAR attrPaddingRight[] =
139 {'p','a','d','d','i','n','g','-','r','i','g','h','t',0};
140 static const WCHAR attrPaddingTop[] =
141 {'p','a','d','d','i','n','g','-','t','o','p',0};
142 static const WCHAR attrPosition[] =
143 {'p','o','s','i','t','i','o','n',0};
144 static const WCHAR attrRight[] =
145 {'r','i','g','h','t',0};
146 static const WCHAR attrTextAlign[] =
147 {'t','e','x','t','-','a','l','i','g','n',0};
148 static const WCHAR attrTextDecoration[] =
149 {'t','e','x','t','-','d','e','c','o','r','a','t','i','o','n',0};
150 static const WCHAR attrTextIndent[] =
151 {'t','e','x','t','-','i','n','d','e','n','t',0};
152 static const WCHAR attrTop[] =
154 static const WCHAR attrVerticalAlign[] =
155 {'v','e','r','t','i','c','a','l','-','a','l','i','g','n',0};
156 static const WCHAR attrVisibility[] =
157 {'v','i','s','i','b','i','l','i','t','y',0};
158 static const WCHAR attrWidth[] =
159 {'w','i','d','t','h',0};
160 static const WCHAR attrWordSpacing[] =
161 {'w','o','r','d','-','s','p','a','c','i','n','g',0};
162 static const WCHAR attrWordWrap[] =
163 {'w','o','r','d','-','w','r','a','p',0};
164 static const WCHAR attrZIndex[] =
165 {'z','-','i','n','d','e','x',0};
171 {attrBackground, DISPID_IHTMLSTYLE_BACKGROUND},
172 {attrBackgroundColor, DISPID_IHTMLSTYLE_BACKGROUNDCOLOR},
173 {attrBackgroundImage, DISPID_IHTMLSTYLE_BACKGROUNDIMAGE},
174 {attrBackgroundPositionX, DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONX},
175 {attrBackgroundPositionY, DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONY},
176 {attrBackgroundRepeat, DISPID_IHTMLSTYLE_BACKGROUNDREPEAT},
177 {attrBorder, DISPID_IHTMLSTYLE_BORDER},
178 {attrBorderBottom, DISPID_IHTMLSTYLE_BORDERBOTTOM},
179 {attrBorderBottomColor, DISPID_IHTMLSTYLE_BORDERBOTTOMCOLOR},
180 {attrBorderBottomStyle, DISPID_IHTMLSTYLE_BORDERBOTTOMSTYLE},
181 {attrBorderBottomWidth, DISPID_IHTMLSTYLE_BORDERBOTTOMWIDTH},
182 {attrBorderColor, DISPID_IHTMLSTYLE_BORDERCOLOR},
183 {attrBorderLeft, DISPID_IHTMLSTYLE_BORDERLEFT},
184 {attrBorderLeftColor, DISPID_IHTMLSTYLE_BORDERLEFTCOLOR},
185 {attrBorderLeftStyle, DISPID_IHTMLSTYLE_BORDERLEFTSTYLE},
186 {attrBorderLeftWidth, DISPID_IHTMLSTYLE_BORDERLEFTWIDTH},
187 {attrBorderRight, DISPID_IHTMLSTYLE_BORDERRIGHT},
188 {attrBorderRightColor, DISPID_IHTMLSTYLE_BORDERRIGHTCOLOR},
189 {attrBorderRightStyle, DISPID_IHTMLSTYLE_BORDERRIGHTSTYLE},
190 {attrBorderRightWidth, DISPID_IHTMLSTYLE_BORDERRIGHTWIDTH},
191 {attrBorderStyle, DISPID_IHTMLSTYLE_BORDERSTYLE},
192 {attrBorderTop, DISPID_IHTMLSTYLE_BORDERTOP},
193 {attrBorderTopColor, DISPID_IHTMLSTYLE_BORDERTOPCOLOR},
194 {attrBorderTopStyle, DISPID_IHTMLSTYLE_BORDERTOPSTYLE},
195 {attrBorderTopWidth, DISPID_IHTMLSTYLE_BORDERTOPWIDTH},
196 {attrBorderWidth, DISPID_IHTMLSTYLE_BORDERWIDTH},
197 {attrBottom, DISPID_IHTMLSTYLE2_BOTTOM},
198 {attrColor, DISPID_IHTMLSTYLE_COLOR},
199 {attrCursor, DISPID_IHTMLSTYLE_CURSOR},
200 {attrDisplay, DISPID_IHTMLSTYLE_DISPLAY},
201 {attrFilter, DISPID_IHTMLSTYLE_FILTER},
202 {attrFontFamily, DISPID_IHTMLSTYLE_FONTFAMILY},
203 {attrFontSize, DISPID_IHTMLSTYLE_FONTSIZE},
204 {attrFontStyle, DISPID_IHTMLSTYLE_FONTSTYLE},
205 {attrFontVariant, DISPID_IHTMLSTYLE_FONTVARIANT},
206 {attrFontWeight, DISPID_IHTMLSTYLE_FONTWEIGHT},
207 {attrHeight, DISPID_IHTMLSTYLE_HEIGHT},
208 {attrLeft, DISPID_IHTMLSTYLE_LEFT},
209 {attrLetterSpacing, DISPID_IHTMLSTYLE_LETTERSPACING},
210 {attrLineHeight, DISPID_IHTMLSTYLE_LINEHEIGHT},
211 {attrMargin, DISPID_IHTMLSTYLE_MARGIN},
212 {attrMarginBottom, DISPID_IHTMLSTYLE_MARGINBOTTOM},
213 {attrMarginLeft, DISPID_IHTMLSTYLE_MARGINLEFT},
214 {attrMarginRight, DISPID_IHTMLSTYLE_MARGINRIGHT},
215 {attrMarginTop, DISPID_IHTMLSTYLE_MARGINTOP},
216 {attrMinHeight, DISPID_IHTMLSTYLE4_MINHEIGHT},
217 {attrOverflow, DISPID_IHTMLSTYLE_OVERFLOW},
218 {attrPadding, DISPID_IHTMLSTYLE_PADDING},
219 {attrPaddingBottom, DISPID_IHTMLSTYLE_PADDINGBOTTOM},
220 {attrPaddingLeft, DISPID_IHTMLSTYLE_PADDINGLEFT},
221 {attrPaddingRight, DISPID_IHTMLSTYLE_PADDINGRIGHT},
222 {attrPaddingTop, DISPID_IHTMLSTYLE_PADDINGTOP},
223 {attrPosition, DISPID_IHTMLSTYLE2_POSITION},
224 {attrRight, DISPID_IHTMLSTYLE2_RIGHT},
225 {attrTextAlign, DISPID_IHTMLSTYLE_TEXTALIGN},
226 {attrTextDecoration, DISPID_IHTMLSTYLE_TEXTDECORATION},
227 {attrTextIndent, DISPID_IHTMLSTYLE_TEXTINDENT},
228 {attrTop, DISPID_IHTMLSTYLE_TOP},
229 {attrVerticalAlign, DISPID_IHTMLSTYLE_VERTICALALIGN},
230 {attrVisibility, DISPID_IHTMLSTYLE_VISIBILITY},
231 {attrWidth, DISPID_IHTMLSTYLE_WIDTH},
232 {attrWordSpacing, DISPID_IHTMLSTYLE_WORDSPACING},
233 {attrWordWrap, DISPID_IHTMLSTYLE3_WORDWRAP},
234 {attrZIndex, DISPID_IHTMLSTYLE_ZINDEX}
237 static const WCHAR valLineThrough[] =
238 {'l','i','n','e','-','t','h','r','o','u','g','h',0};
239 static const WCHAR valUnderline[] =
240 {'u','n','d','e','r','l','i','n','e',0};
241 static const WCHAR szNormal[] =
242 {'n','o','r','m','a','l',0};
243 static const WCHAR styleNone[] =
245 static const WCHAR valOverline[] =
246 {'o','v','e','r','l','i','n','e',0};
247 static const WCHAR valBlink[] =
248 {'b','l','i','n','k',0};
250 static const WCHAR px_formatW[] = {'%','d','p','x',0};
251 static const WCHAR emptyW[] = {0};
253 static LPWSTR fix_px_value(LPCWSTR val)
258 while(*ptr && isspaceW(*ptr))
263 while(*ptr && isdigitW(*ptr))
266 if(!*ptr || isspaceW(*ptr)) {
268 int len = strlenW(val)+1;
270 ret = heap_alloc((len+2)*sizeof(WCHAR));
271 memcpy(ret, val, (ptr-val)*sizeof(WCHAR));
277 TRACE("fixed %s -> %s\n", debugstr_w(val), debugstr_w(ret));
282 while(*ptr && !isspaceW(*ptr))
289 static LPWSTR fix_url_value(LPCWSTR val)
293 static const WCHAR urlW[] = {'u','r','l','('};
295 if(strncmpW(val, urlW, sizeof(urlW)/sizeof(WCHAR)) || !strchrW(val, '\\'))
298 ret = heap_strdupW(val);
300 for(ptr = ret; *ptr; ptr++) {
308 HRESULT set_nsstyle_attr(nsIDOMCSSStyleDeclaration *nsstyle, styleid_t sid, LPCWSTR value, DWORD flags)
310 nsAString str_name, str_value, str_empty;
314 static const PRUnichar wszEmpty[] = {0};
316 if(flags & ATTR_FIX_PX)
317 val = fix_px_value(value);
318 if(flags & ATTR_FIX_URL)
319 val = fix_url_value(value);
321 nsAString_InitDepend(&str_name, style_tbl[sid].name);
322 nsAString_InitDepend(&str_value, val ? val : value);
323 nsAString_InitDepend(&str_empty, wszEmpty);
326 nsres = nsIDOMCSSStyleDeclaration_SetProperty(nsstyle, &str_name, &str_value, &str_empty);
328 ERR("SetProperty failed: %08x\n", nsres);
330 nsAString_Finish(&str_name);
331 nsAString_Finish(&str_value);
332 nsAString_Finish(&str_empty);
337 HRESULT set_nsstyle_attr_var(nsIDOMCSSStyleDeclaration *nsstyle, styleid_t sid, VARIANT *value, DWORD flags)
339 switch(V_VT(value)) {
341 return set_nsstyle_attr(nsstyle, sid, emptyW, flags);
344 return set_nsstyle_attr(nsstyle, sid, V_BSTR(value), flags);
346 case VT_BSTR|VT_BYREF:
347 return set_nsstyle_attr(nsstyle, sid, *V_BSTRREF(value), flags);
352 static const WCHAR format[] = {'%','d',0};
353 static const WCHAR px_format[] = {'%','d','p','x',0};
355 wsprintfW(str, flags&ATTR_FIX_PX ? px_format : format, V_I4(value));
356 return set_nsstyle_attr(nsstyle, sid, str, flags & ~ATTR_FIX_PX);
359 FIXME("not implemented vt %d\n", V_VT(value));
367 static inline HRESULT set_style_attr(HTMLStyle *This, styleid_t sid, LPCWSTR value, DWORD flags)
369 return set_nsstyle_attr(This->nsstyle, sid, value, flags);
372 static HRESULT get_nsstyle_attr_nsval(nsIDOMCSSStyleDeclaration *nsstyle, styleid_t sid, nsAString *value)
377 nsAString_InitDepend(&str_name, style_tbl[sid].name);
379 nsres = nsIDOMCSSStyleDeclaration_GetPropertyValue(nsstyle, &str_name, value);
380 if(NS_FAILED(nsres)) {
381 ERR("SetProperty failed: %08x\n", nsres);
385 nsAString_Finish(&str_name);
390 HRESULT get_nsstyle_attr(nsIDOMCSSStyleDeclaration *nsstyle, styleid_t sid, BSTR *p)
393 const PRUnichar *value;
395 nsAString_Init(&str_value, NULL);
397 get_nsstyle_attr_nsval(nsstyle, sid, &str_value);
399 nsAString_GetData(&str_value, &value);
400 *p = *value ? SysAllocString(value) : NULL;
402 nsAString_Finish(&str_value);
404 TRACE("%s -> %s\n", debugstr_w(style_tbl[sid].name), debugstr_w(*p));
408 HRESULT get_nsstyle_attr_var(nsIDOMCSSStyleDeclaration *nsstyle, styleid_t sid, VARIANT *p, DWORD flags)
411 const PRUnichar *value;
414 nsAString_Init(&str_value, NULL);
416 get_nsstyle_attr_nsval(nsstyle, sid, &str_value);
418 nsAString_GetData(&str_value, &value);
420 if(flags & ATTR_STR_TO_INT) {
421 const PRUnichar *ptr = value;
430 while(isdigitW(*ptr))
431 i = i*10 + (*ptr++ - '0');
435 V_I4(p) = neg ? -i : i;
444 str = SysAllocString(value);
446 return E_OUTOFMEMORY;
453 nsAString_Finish(&str_value);
455 TRACE("%s -> %s\n", debugstr_w(style_tbl[sid].name), debugstr_variant(p));
459 static inline HRESULT get_style_attr(HTMLStyle *This, styleid_t sid, BSTR *p)
461 return get_nsstyle_attr(This->nsstyle, sid, p);
464 static HRESULT check_style_attr_value(HTMLStyle *This, styleid_t sid, LPCWSTR exval, VARIANT_BOOL *p)
467 const PRUnichar *value;
469 nsAString_Init(&str_value, NULL);
471 get_nsstyle_attr_nsval(This->nsstyle, sid, &str_value);
473 nsAString_GetData(&str_value, &value);
474 *p = strcmpW(value, exval) ? VARIANT_FALSE : VARIANT_TRUE;
475 nsAString_Finish(&str_value);
477 TRACE("%s -> %x\n", debugstr_w(style_tbl[sid].name), *p);
481 static inline HRESULT set_style_pos(HTMLStyle *This, styleid_t sid, float value)
484 WCHAR szFormat[] = {'%','.','0','f','p','x',0};
486 value = floor(value);
488 sprintfW(szValue, szFormat, value);
490 return set_style_attr(This, sid, szValue, 0);
493 static HRESULT get_nsstyle_pos(HTMLStyle *This, styleid_t sid, float *p)
497 WCHAR pxW[] = {'p','x',0};
499 TRACE("%p %d %p\n", This, sid, p);
503 nsAString_Init(&str_value, NULL);
505 hres = get_nsstyle_attr_nsval(This->nsstyle, sid, &str_value);
509 const PRUnichar *value;
511 nsAString_GetData(&str_value, &value);
514 *p = strtolW(value, &ptr, 10);
516 if(*ptr && strcmpW(ptr, pxW))
518 nsAString_Finish(&str_value);
519 FIXME("only px values are currently supported\n");
525 TRACE("ret %f\n", *p);
527 nsAString_Finish(&str_value);
532 static BOOL is_valid_border_style(BSTR v)
534 static const WCHAR styleDotted[] = {'d','o','t','t','e','d',0};
535 static const WCHAR styleDashed[] = {'d','a','s','h','e','d',0};
536 static const WCHAR styleSolid[] = {'s','o','l','i','d',0};
537 static const WCHAR styleDouble[] = {'d','o','u','b','l','e',0};
538 static const WCHAR styleGroove[] = {'g','r','o','o','v','e',0};
539 static const WCHAR styleRidge[] = {'r','i','d','g','e',0};
540 static const WCHAR styleInset[] = {'i','n','s','e','t',0};
541 static const WCHAR styleOutset[] = {'o','u','t','s','e','t',0};
543 TRACE("%s\n", debugstr_w(v));
545 if(!v || strcmpiW(v, styleNone) == 0 || strcmpiW(v, styleDotted) == 0 ||
546 strcmpiW(v, styleDashed) == 0 || strcmpiW(v, styleSolid) == 0 ||
547 strcmpiW(v, styleDouble) == 0 || strcmpiW(v, styleGroove) == 0 ||
548 strcmpiW(v, styleRidge) == 0 || strcmpiW(v, styleInset) == 0 ||
549 strcmpiW(v, styleOutset) == 0 )
557 static inline HTMLStyle *impl_from_IHTMLStyle(IHTMLStyle *iface)
559 return CONTAINING_RECORD(iface, HTMLStyle, IHTMLStyle_iface);
562 static HRESULT WINAPI HTMLStyle_QueryInterface(IHTMLStyle *iface, REFIID riid, void **ppv)
564 HTMLStyle *This = impl_from_IHTMLStyle(iface);
568 if(IsEqualGUID(&IID_IUnknown, riid)) {
569 TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
570 *ppv = &This->IHTMLStyle_iface;
571 }else if(IsEqualGUID(&IID_IHTMLStyle, riid)) {
572 TRACE("(%p)->(IID_IHTMLStyle %p)\n", This, ppv);
573 *ppv = &This->IHTMLStyle_iface;
574 }else if(IsEqualGUID(&IID_IHTMLStyle2, riid)) {
575 TRACE("(%p)->(IID_IHTMLStyle2 %p)\n", This, ppv);
576 *ppv = &This->IHTMLStyle2_iface;
577 }else if(IsEqualGUID(&IID_IHTMLStyle3, riid)) {
578 TRACE("(%p)->(IID_IHTMLStyle3 %p)\n", This, ppv);
579 *ppv = &This->IHTMLStyle3_iface;
580 }else if(IsEqualGUID(&IID_IHTMLStyle4, riid)) {
581 TRACE("(%p)->(IID_IHTMLStyle4 %p)\n", This, ppv);
582 *ppv = &This->IHTMLStyle4_iface;
583 }else if(dispex_query_interface(&This->dispex, riid, ppv)) {
584 return *ppv ? S_OK : E_NOINTERFACE;
588 IUnknown_AddRef((IUnknown*)*ppv);
592 WARN("unsupported %s\n", debugstr_guid(riid));
593 return E_NOINTERFACE;
596 static ULONG WINAPI HTMLStyle_AddRef(IHTMLStyle *iface)
598 HTMLStyle *This = impl_from_IHTMLStyle(iface);
599 LONG ref = InterlockedIncrement(&This->ref);
601 TRACE("(%p) ref=%d\n", This, ref);
606 static ULONG WINAPI HTMLStyle_Release(IHTMLStyle *iface)
608 HTMLStyle *This = impl_from_IHTMLStyle(iface);
609 LONG ref = InterlockedDecrement(&This->ref);
611 TRACE("(%p) ref=%d\n", This, ref);
615 nsIDOMCSSStyleDeclaration_Release(This->nsstyle);
616 release_dispex(&This->dispex);
623 static HRESULT WINAPI HTMLStyle_GetTypeInfoCount(IHTMLStyle *iface, UINT *pctinfo)
625 HTMLStyle *This = impl_from_IHTMLStyle(iface);
626 return IDispatchEx_GetTypeInfoCount(&This->dispex.IDispatchEx_iface, pctinfo);
629 static HRESULT WINAPI HTMLStyle_GetTypeInfo(IHTMLStyle *iface, UINT iTInfo,
630 LCID lcid, ITypeInfo **ppTInfo)
632 HTMLStyle *This = impl_from_IHTMLStyle(iface);
633 return IDispatchEx_GetTypeInfo(&This->dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo);
636 static HRESULT WINAPI HTMLStyle_GetIDsOfNames(IHTMLStyle *iface, REFIID riid,
637 LPOLESTR *rgszNames, UINT cNames,
638 LCID lcid, DISPID *rgDispId)
640 HTMLStyle *This = impl_from_IHTMLStyle(iface);
641 return IDispatchEx_GetIDsOfNames(&This->dispex.IDispatchEx_iface, riid, rgszNames, cNames,
645 static HRESULT WINAPI HTMLStyle_Invoke(IHTMLStyle *iface, DISPID dispIdMember,
646 REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
647 VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
649 HTMLStyle *This = impl_from_IHTMLStyle(iface);
650 return IDispatchEx_Invoke(&This->dispex.IDispatchEx_iface, dispIdMember, riid, lcid,
651 wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
654 static HRESULT WINAPI HTMLStyle_put_fontFamily(IHTMLStyle *iface, BSTR v)
656 HTMLStyle *This = impl_from_IHTMLStyle(iface);
658 TRACE("(%p)->(%s)\n", This, debugstr_w(v));
660 return set_style_attr(This, STYLEID_FONT_FAMILY, v, 0);
663 static HRESULT WINAPI HTMLStyle_get_fontFamily(IHTMLStyle *iface, BSTR *p)
665 HTMLStyle *This = impl_from_IHTMLStyle(iface);
667 TRACE("(%p)->(%p)\n", This, p);
669 return get_style_attr(This, STYLEID_FONT_FAMILY, p);
672 static HRESULT WINAPI HTMLStyle_put_fontStyle(IHTMLStyle *iface, BSTR v)
674 HTMLStyle *This = impl_from_IHTMLStyle(iface);
675 static const WCHAR szItalic[] = {'i','t','a','l','i','c',0};
676 static const WCHAR szOblique[] = {'o','b','l','i','q','u','e',0};
678 TRACE("(%p)->(%s)\n", This, debugstr_w(v));
680 /* fontStyle can only be one of the follow values. */
681 if(!v || strcmpiW(szNormal, v) == 0 || strcmpiW(szItalic, v) == 0 ||
682 strcmpiW(szOblique, v) == 0)
684 return set_nsstyle_attr(This->nsstyle, STYLEID_FONT_STYLE, v, 0);
690 static HRESULT WINAPI HTMLStyle_get_fontStyle(IHTMLStyle *iface, BSTR *p)
692 HTMLStyle *This = impl_from_IHTMLStyle(iface);
694 TRACE("(%p)->(%p)\n", This, p);
696 return get_style_attr(This, STYLEID_FONT_STYLE, p);
699 static HRESULT WINAPI HTMLStyle_put_fontVariant(IHTMLStyle *iface, BSTR v)
701 HTMLStyle *This = impl_from_IHTMLStyle(iface);
702 static const WCHAR szCaps[] = {'s','m','a','l','l','-','c','a','p','s',0};
704 TRACE("(%p)->(%s)\n", This, debugstr_w(v));
706 /* fontVariant can only be one of the follow values. */
707 if(!v || strcmpiW(szNormal, v) == 0 || strcmpiW(szCaps, v) == 0)
709 return set_nsstyle_attr(This->nsstyle, STYLEID_FONT_VARIANT, v, 0);
715 static HRESULT WINAPI HTMLStyle_get_fontVariant(IHTMLStyle *iface, BSTR *p)
717 HTMLStyle *This = impl_from_IHTMLStyle(iface);
718 TRACE("(%p)->(%p)\n", This, p);
723 return get_style_attr(This, STYLEID_FONT_VARIANT, p);
726 static HRESULT WINAPI HTMLStyle_put_fontWeight(IHTMLStyle *iface, BSTR v)
728 HTMLStyle *This = impl_from_IHTMLStyle(iface);
729 static const WCHAR styleBold[] = {'b','o','l','d',0};
730 static const WCHAR styleBolder[] = {'b','o','l','d','e','r',0};
731 static const WCHAR styleLighter[] = {'l','i','g','h','t','e','r',0};
732 static const WCHAR style100[] = {'1','0','0',0};
733 static const WCHAR style200[] = {'2','0','0',0};
734 static const WCHAR style300[] = {'3','0','0',0};
735 static const WCHAR style400[] = {'4','0','0',0};
736 static const WCHAR style500[] = {'5','0','0',0};
737 static const WCHAR style600[] = {'6','0','0',0};
738 static const WCHAR style700[] = {'7','0','0',0};
739 static const WCHAR style800[] = {'8','0','0',0};
740 static const WCHAR style900[] = {'9','0','0',0};
742 TRACE("(%p)->(%s)\n", This, debugstr_w(v));
744 /* fontWeight can only be one of the following */
745 if(!v || strcmpiW(szNormal, v) == 0 || strcmpiW(styleBold, v) == 0 ||
746 strcmpiW(styleBolder, v) == 0 || strcmpiW(styleLighter, v) == 0 ||
747 strcmpiW(style100, v) == 0 || strcmpiW(style200, v) == 0 ||
748 strcmpiW(style300, v) == 0 || strcmpiW(style400, v) == 0 ||
749 strcmpiW(style500, v) == 0 || strcmpiW(style600, v) == 0 ||
750 strcmpiW(style700, v) == 0 || strcmpiW(style800, v) == 0 ||
751 strcmpiW(style900, v) == 0
754 return set_nsstyle_attr(This->nsstyle, STYLEID_FONT_WEIGHT, v, 0);
760 static HRESULT WINAPI HTMLStyle_get_fontWeight(IHTMLStyle *iface, BSTR *p)
762 HTMLStyle *This = impl_from_IHTMLStyle(iface);
764 TRACE("(%p)->(%p)\n", This, p);
766 return get_style_attr(This, STYLEID_FONT_WEIGHT, p);
769 static HRESULT WINAPI HTMLStyle_put_fontSize(IHTMLStyle *iface, VARIANT v)
771 HTMLStyle *This = impl_from_IHTMLStyle(iface);
773 TRACE("(%p)->(v%d)\n", This, V_VT(&v));
777 return set_style_attr(This, STYLEID_FONT_SIZE, V_BSTR(&v), 0);
779 FIXME("not supported vt %d\n", V_VT(&v));
785 static HRESULT WINAPI HTMLStyle_get_fontSize(IHTMLStyle *iface, VARIANT *p)
787 HTMLStyle *This = impl_from_IHTMLStyle(iface);
789 TRACE("(%p)->(%p)\n", This, p);
792 return get_style_attr(This, STYLEID_FONT_SIZE, &V_BSTR(p));
795 static HRESULT WINAPI HTMLStyle_put_font(IHTMLStyle *iface, BSTR v)
797 HTMLStyle *This = impl_from_IHTMLStyle(iface);
798 FIXME("(%p)->(%s)\n", This, debugstr_w(v));
802 static HRESULT WINAPI HTMLStyle_get_font(IHTMLStyle *iface, BSTR *p)
804 HTMLStyle *This = impl_from_IHTMLStyle(iface);
805 FIXME("(%p)->(%p)\n", This, p);
809 static HRESULT WINAPI HTMLStyle_put_color(IHTMLStyle *iface, VARIANT v)
811 HTMLStyle *This = impl_from_IHTMLStyle(iface);
813 TRACE("(%p)->(v%d)\n", This, V_VT(&v));
817 TRACE("%s\n", debugstr_w(V_BSTR(&v)));
818 return set_style_attr(This, STYLEID_COLOR, V_BSTR(&v), 0);
821 FIXME("unsupported vt=%d\n", V_VT(&v));
827 static HRESULT WINAPI HTMLStyle_get_color(IHTMLStyle *iface, VARIANT *p)
829 HTMLStyle *This = impl_from_IHTMLStyle(iface);
831 TRACE("(%p)->(%p)\n", This, p);
834 return get_style_attr(This, STYLEID_COLOR, &V_BSTR(p));
837 static HRESULT WINAPI HTMLStyle_put_background(IHTMLStyle *iface, BSTR v)
839 HTMLStyle *This = impl_from_IHTMLStyle(iface);
841 TRACE("(%p)->(%s)\n", This, debugstr_w(v));
843 return set_style_attr(This, STYLEID_BACKGROUND, v, 0);
846 static HRESULT WINAPI HTMLStyle_get_background(IHTMLStyle *iface, BSTR *p)
848 HTMLStyle *This = impl_from_IHTMLStyle(iface);
850 TRACE("(%p)->(%p)\n", This, p);
852 return get_style_attr(This, STYLEID_BACKGROUND, p);
855 static HRESULT WINAPI HTMLStyle_put_backgroundColor(IHTMLStyle *iface, VARIANT v)
857 HTMLStyle *This = impl_from_IHTMLStyle(iface);
859 TRACE("(%p)->(v%d)\n", This, V_VT(&v));
863 return set_style_attr(This, STYLEID_BACKGROUND_COLOR, V_BSTR(&v), 0);
866 static const WCHAR format[] = {'#','%','0','6','x',0};
868 wsprintfW(value, format, V_I4(&v));
869 return set_style_attr(This, STYLEID_BACKGROUND_COLOR, value, 0);
872 FIXME("unsupported vt %d\n", V_VT(&v));
878 static HRESULT WINAPI HTMLStyle_get_backgroundColor(IHTMLStyle *iface, VARIANT *p)
880 HTMLStyle *This = impl_from_IHTMLStyle(iface);
881 TRACE("(%p)->(%p)\n", This, p);
884 return get_style_attr(This, STYLEID_BACKGROUND_COLOR, &V_BSTR(p));
887 static HRESULT WINAPI HTMLStyle_put_backgroundImage(IHTMLStyle *iface, BSTR v)
889 HTMLStyle *This = impl_from_IHTMLStyle(iface);
891 TRACE("(%p)->(%s)\n", This, debugstr_w(v));
893 return set_style_attr(This, STYLEID_BACKGROUND_IMAGE, v, ATTR_FIX_URL);
896 static HRESULT WINAPI HTMLStyle_get_backgroundImage(IHTMLStyle *iface, BSTR *p)
898 HTMLStyle *This = impl_from_IHTMLStyle(iface);
900 TRACE("(%p)->(%p)\n", This, p);
902 return get_style_attr(This, STYLEID_BACKGROUND_IMAGE, p);
905 static HRESULT WINAPI HTMLStyle_put_backgroundRepeat(IHTMLStyle *iface, BSTR v)
907 HTMLStyle *This = impl_from_IHTMLStyle(iface);
908 static const WCHAR styleRepeat[] = {'r','e','p','e','a','t',0};
909 static const WCHAR styleNoRepeat[] = {'n','o','-','r','e','p','e','a','t',0};
910 static const WCHAR styleRepeatX[] = {'r','e','p','e','a','t','-','x',0};
911 static const WCHAR styleRepeatY[] = {'r','e','p','e','a','t','-','y',0};
913 TRACE("(%p)->(%s)\n", This, debugstr_w(v));
915 /* fontWeight can only be one of the following */
916 if(!v || strcmpiW(styleRepeat, v) == 0 || strcmpiW(styleNoRepeat, v) == 0 ||
917 strcmpiW(styleRepeatX, v) == 0 || strcmpiW(styleRepeatY, v) == 0 )
919 return set_style_attr(This, STYLEID_BACKGROUND_REPEAT , v, 0);
925 static HRESULT WINAPI HTMLStyle_get_backgroundRepeat(IHTMLStyle *iface, BSTR *p)
927 HTMLStyle *This = impl_from_IHTMLStyle(iface);
929 TRACE("(%p)->(%p)\n", This, p);
931 return get_style_attr(This, STYLEID_BACKGROUND_REPEAT, p);
934 static HRESULT WINAPI HTMLStyle_put_backgroundAttachment(IHTMLStyle *iface, BSTR v)
936 HTMLStyle *This = impl_from_IHTMLStyle(iface);
937 FIXME("(%p)->(%s)\n", This, debugstr_w(v));
941 static HRESULT WINAPI HTMLStyle_get_backgroundAttachment(IHTMLStyle *iface, BSTR *p)
943 HTMLStyle *This = impl_from_IHTMLStyle(iface);
944 FIXME("(%p)->(%p)\n", This, p);
948 static HRESULT WINAPI HTMLStyle_put_backgroundPosition(IHTMLStyle *iface, BSTR v)
950 HTMLStyle *This = impl_from_IHTMLStyle(iface);
951 FIXME("(%p)->(%s)\n", This, debugstr_w(v));
955 static HRESULT WINAPI HTMLStyle_get_backgroundPosition(IHTMLStyle *iface, BSTR *p)
957 HTMLStyle *This = impl_from_IHTMLStyle(iface);
958 FIXME("(%p)->(%p)\n", This, p);
962 static HRESULT WINAPI HTMLStyle_put_backgroundPositionX(IHTMLStyle *iface, VARIANT v)
964 HTMLStyle *This = impl_from_IHTMLStyle(iface);
965 TRACE("(%p)->(v%d)\n", This, V_VT(&v));
966 return set_nsstyle_attr_var(This->nsstyle, STYLEID_BACKGROUND_POSITION_X, &v, 0);
969 static HRESULT WINAPI HTMLStyle_get_backgroundPositionX(IHTMLStyle *iface, VARIANT *p)
971 HTMLStyle *This = impl_from_IHTMLStyle(iface);
972 TRACE("(%p)->(%p)\n", This, p);
973 return get_nsstyle_attr_var(This->nsstyle, STYLEID_BACKGROUND_POSITION_X, p, 0);
976 static HRESULT WINAPI HTMLStyle_put_backgroundPositionY(IHTMLStyle *iface, VARIANT v)
978 HTMLStyle *This = impl_from_IHTMLStyle(iface);
979 TRACE("(%p)->(v%d)\n", This, V_VT(&v));
980 return set_nsstyle_attr_var(This->nsstyle, STYLEID_BACKGROUND_POSITION_Y, &v, 0);
983 static HRESULT WINAPI HTMLStyle_get_backgroundPositionY(IHTMLStyle *iface, VARIANT *p)
985 HTMLStyle *This = impl_from_IHTMLStyle(iface);
986 TRACE("(%p)->(%p)\n", This, p);
987 return get_nsstyle_attr_var(This->nsstyle, STYLEID_BACKGROUND_POSITION_Y, p, 0);
990 static HRESULT WINAPI HTMLStyle_put_wordSpacing(IHTMLStyle *iface, VARIANT v)
992 HTMLStyle *This = impl_from_IHTMLStyle(iface);
993 TRACE("(%p)->(v%d)\n", This, V_VT(&v));
994 return set_nsstyle_attr_var(This->nsstyle, STYLEID_WORD_SPACING, &v, 0);
997 static HRESULT WINAPI HTMLStyle_get_wordSpacing(IHTMLStyle *iface, VARIANT *p)
999 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1000 TRACE("(%p)->(%p)\n", This, p);
1001 return get_nsstyle_attr_var(This->nsstyle, STYLEID_WORD_SPACING, p, 0);
1004 static HRESULT WINAPI HTMLStyle_put_letterSpacing(IHTMLStyle *iface, VARIANT v)
1006 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1007 TRACE("(%p)->(v%d)\n", This, V_VT(&v));
1008 return set_nsstyle_attr_var(This->nsstyle, STYLEID_LETTER_SPACING, &v, 0);
1011 static HRESULT WINAPI HTMLStyle_get_letterSpacing(IHTMLStyle *iface, VARIANT *p)
1013 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1014 TRACE("(%p)->(%p)\n", This, p);
1015 return get_nsstyle_attr_var(This->nsstyle, STYLEID_LETTER_SPACING, p, 0);
1018 static HRESULT WINAPI HTMLStyle_put_textDecoration(IHTMLStyle *iface, BSTR v)
1020 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1022 TRACE("(%p)->(%s)\n", This, debugstr_w(v));
1024 /* textDecoration can only be one of the following */
1025 if(!v || strcmpiW(styleNone, v) == 0 || strcmpiW(valUnderline, v) == 0 ||
1026 strcmpiW(valOverline, v) == 0 || strcmpiW(valLineThrough, v) == 0 ||
1027 strcmpiW(valBlink, v) == 0)
1029 return set_style_attr(This, STYLEID_TEXT_DECORATION , v, 0);
1032 return E_INVALIDARG;
1035 static HRESULT WINAPI HTMLStyle_get_textDecoration(IHTMLStyle *iface, BSTR *p)
1037 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1039 TRACE("(%p)->(%p)\n", This, p);
1041 return get_style_attr(This, STYLEID_TEXT_DECORATION, p);
1044 static HRESULT WINAPI HTMLStyle_put_textDecorationNone(IHTMLStyle *iface, VARIANT_BOOL v)
1046 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1048 TRACE("(%p)->(%x)\n", This, v);
1050 return set_style_attr(This, STYLEID_TEXT_DECORATION, v ? styleNone : emptyW, 0);
1053 static HRESULT WINAPI HTMLStyle_get_textDecorationNone(IHTMLStyle *iface, VARIANT_BOOL *p)
1055 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1057 TRACE("(%p)->(%p)\n", This, p);
1059 return check_style_attr_value(This, STYLEID_TEXT_DECORATION, styleNone, p);
1062 static HRESULT WINAPI HTMLStyle_put_textDecorationUnderline(IHTMLStyle *iface, VARIANT_BOOL v)
1064 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1066 TRACE("(%p)->(%x)\n", This, v);
1068 return set_style_attr(This, STYLEID_TEXT_DECORATION, v ? valUnderline : emptyW, 0);
1071 static HRESULT WINAPI HTMLStyle_get_textDecorationUnderline(IHTMLStyle *iface, VARIANT_BOOL *p)
1073 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1075 TRACE("(%p)->(%p)\n", This, p);
1077 return check_style_attr_value(This, STYLEID_TEXT_DECORATION, valUnderline, p);
1080 static HRESULT WINAPI HTMLStyle_put_textDecorationOverline(IHTMLStyle *iface, VARIANT_BOOL v)
1082 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1084 TRACE("(%p)->(%x)\n", This, v);
1086 return set_style_attr(This, STYLEID_TEXT_DECORATION, v ? valOverline : emptyW, 0);
1089 static HRESULT WINAPI HTMLStyle_get_textDecorationOverline(IHTMLStyle *iface, VARIANT_BOOL *p)
1091 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1093 TRACE("(%p)->(%p)\n", This, p);
1095 return check_style_attr_value(This, STYLEID_TEXT_DECORATION, valOverline, p);
1098 static HRESULT WINAPI HTMLStyle_put_textDecorationLineThrough(IHTMLStyle *iface, VARIANT_BOOL v)
1100 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1102 TRACE("(%p)->(%x)\n", This, v);
1104 return set_style_attr(This, STYLEID_TEXT_DECORATION, v ? valLineThrough : emptyW, 0);
1107 static HRESULT WINAPI HTMLStyle_get_textDecorationLineThrough(IHTMLStyle *iface, VARIANT_BOOL *p)
1109 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1111 TRACE("(%p)->(%p)\n", This, p);
1113 return check_style_attr_value(This, STYLEID_TEXT_DECORATION, valLineThrough, p);
1116 static HRESULT WINAPI HTMLStyle_put_textDecorationBlink(IHTMLStyle *iface, VARIANT_BOOL v)
1118 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1120 TRACE("(%p)->(%x)\n", This, v);
1122 return set_style_attr(This, STYLEID_TEXT_DECORATION, v ? valBlink : emptyW, 0);
1125 static HRESULT WINAPI HTMLStyle_get_textDecorationBlink(IHTMLStyle *iface, VARIANT_BOOL *p)
1127 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1129 TRACE("(%p)->(%p)\n", This, p);
1131 return check_style_attr_value(This, STYLEID_TEXT_DECORATION, valBlink, p);
1134 static HRESULT WINAPI HTMLStyle_put_verticalAlign(IHTMLStyle *iface, VARIANT v)
1136 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1138 TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
1142 return set_style_attr(This, STYLEID_VERTICAL_ALIGN, V_BSTR(&v), 0);
1144 FIXME("not implemented vt %d\n", V_VT(&v));
1151 static HRESULT WINAPI HTMLStyle_get_verticalAlign(IHTMLStyle *iface, VARIANT *p)
1153 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1157 TRACE("(%p)->(%p)\n", This, p);
1159 hres = get_style_attr(This, STYLEID_VERTICAL_ALIGN, &ret);
1168 static HRESULT WINAPI HTMLStyle_put_textTransform(IHTMLStyle *iface, BSTR v)
1170 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1171 FIXME("(%p)->(%s)\n", This, debugstr_w(v));
1175 static HRESULT WINAPI HTMLStyle_get_textTransform(IHTMLStyle *iface, BSTR *p)
1177 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1178 FIXME("(%p)->(%p)\n", This, p);
1182 static HRESULT WINAPI HTMLStyle_put_textAlign(IHTMLStyle *iface, BSTR v)
1184 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1186 TRACE("(%p)->(%s)\n", This, debugstr_w(v));
1188 return set_style_attr(This, STYLEID_TEXT_ALIGN, v, 0);
1191 static HRESULT WINAPI HTMLStyle_get_textAlign(IHTMLStyle *iface, BSTR *p)
1193 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1195 TRACE("(%p)->(%p)\n", This, p);
1197 return get_style_attr(This, STYLEID_TEXT_ALIGN, p);
1200 static HRESULT WINAPI HTMLStyle_put_textIndent(IHTMLStyle *iface, VARIANT v)
1202 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1203 FIXME("(%p)->(v%d)\n", This, V_VT(&v));
1207 static HRESULT WINAPI HTMLStyle_get_textIndent(IHTMLStyle *iface, VARIANT *p)
1209 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1210 FIXME("(%p)->(%p)\n", This, p);
1214 static HRESULT WINAPI HTMLStyle_put_lineHeight(IHTMLStyle *iface, VARIANT v)
1216 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1217 FIXME("(%p)->(v%d)\n", This, V_VT(&v));
1221 static HRESULT WINAPI HTMLStyle_get_lineHeight(IHTMLStyle *iface, VARIANT *p)
1223 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1224 FIXME("(%p)->(%p)\n", This, p);
1228 static HRESULT WINAPI HTMLStyle_put_marginTop(IHTMLStyle *iface, VARIANT v)
1230 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1232 TRACE("(%p)->(v%d)\n", This, V_VT(&v));
1234 return set_nsstyle_attr_var(This->nsstyle, STYLEID_MARGIN_TOP, &v, 0);
1237 static HRESULT WINAPI HTMLStyle_get_marginTop(IHTMLStyle *iface, VARIANT *p)
1239 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1241 TRACE("(%p)->(%p)\n", This, p);
1243 return get_nsstyle_attr_var(This->nsstyle, STYLEID_MARGIN_TOP, p, 0);
1246 static HRESULT WINAPI HTMLStyle_put_marginRight(IHTMLStyle *iface, VARIANT v)
1248 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1250 TRACE("(%p)->(v(%d))\n", This, V_VT(&v));
1254 return set_style_attr(This, STYLEID_MARGIN_RIGHT, emptyW, 0);
1258 wsprintfW(buf, px_formatW, V_I4(&v));
1259 return set_style_attr(This, STYLEID_MARGIN_RIGHT, buf, 0);
1262 return set_style_attr(This, STYLEID_MARGIN_RIGHT, V_BSTR(&v), 0);
1264 FIXME("Unsupported vt=%d\n", V_VT(&v));
1270 static HRESULT WINAPI HTMLStyle_get_marginRight(IHTMLStyle *iface, VARIANT *p)
1272 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1273 TRACE("(%p)->(%p)\n", This, p);
1274 return get_nsstyle_attr_var(This->nsstyle, STYLEID_MARGIN_RIGHT, p, 0);
1277 static HRESULT WINAPI HTMLStyle_put_marginBottom(IHTMLStyle *iface, VARIANT v)
1279 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1280 FIXME("(%p)->(v%d)\n", This, V_VT(&v));
1284 static HRESULT WINAPI HTMLStyle_get_marginBottom(IHTMLStyle *iface, VARIANT *p)
1286 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1287 FIXME("(%p)->(%p)\n", This, p);
1291 static HRESULT WINAPI HTMLStyle_put_marginLeft(IHTMLStyle *iface, VARIANT v)
1293 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1297 TRACE("(%p)->(NULL)\n", This);
1298 return set_style_attr(This, STYLEID_MARGIN_LEFT, emptyW, 0);
1302 TRACE("(%p)->(%d)\n", This, V_I4(&v));
1304 wsprintfW(buf, px_formatW, V_I4(&v));
1305 return set_style_attr(This, STYLEID_MARGIN_LEFT, buf, 0);
1308 TRACE("(%p)->(%s)\n", This, debugstr_w(V_BSTR(&v)));
1309 return set_style_attr(This, STYLEID_MARGIN_LEFT, V_BSTR(&v), 0);
1311 FIXME("Unsupported vt=%d\n", V_VT(&v));
1317 static HRESULT WINAPI HTMLStyle_put_margin(IHTMLStyle *iface, BSTR v)
1319 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1321 TRACE("(%p)->(%s)\n", This, debugstr_w(v));
1323 return set_style_attr(This, STYLEID_MARGIN, v, 0);
1326 static HRESULT WINAPI HTMLStyle_get_margin(IHTMLStyle *iface, BSTR *p)
1328 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1330 TRACE("(%p)->(%p)\n", This, p);
1332 return get_style_attr(This, STYLEID_MARGIN, p);
1335 static HRESULT WINAPI HTMLStyle_get_marginLeft(IHTMLStyle *iface, VARIANT *p)
1337 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1338 TRACE("(%p)->(%p)\n", This, p);
1339 return get_nsstyle_attr_var(This->nsstyle, STYLEID_MARGIN_LEFT, p, 0);
1342 static HRESULT WINAPI HTMLStyle_put_paddingTop(IHTMLStyle *iface, VARIANT v)
1344 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1345 FIXME("(%p)->(v%d)\n", This, V_VT(&v));
1349 static HRESULT WINAPI HTMLStyle_get_paddingTop(IHTMLStyle *iface, VARIANT *p)
1351 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1352 FIXME("(%p)->(%p)\n", This, p);
1356 static HRESULT WINAPI HTMLStyle_put_paddingRight(IHTMLStyle *iface, VARIANT v)
1358 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1359 FIXME("(%p)->(v%d)\n", This, V_VT(&v));
1363 static HRESULT WINAPI HTMLStyle_get_paddingRight(IHTMLStyle *iface, VARIANT *p)
1365 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1366 FIXME("(%p)->(%p)\n", This, p);
1370 static HRESULT WINAPI HTMLStyle_put_paddingBottom(IHTMLStyle *iface, VARIANT v)
1372 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1373 FIXME("(%p)->(v%d)\n", This, V_VT(&v));
1377 static HRESULT WINAPI HTMLStyle_get_paddingBottom(IHTMLStyle *iface, VARIANT *p)
1379 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1380 FIXME("(%p)->(%p)\n", This, p);
1384 static HRESULT WINAPI HTMLStyle_put_paddingLeft(IHTMLStyle *iface, VARIANT v)
1386 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1388 TRACE("(%p)->(vt=%d)\n", This, V_VT(&v));
1394 wsprintfW(buf, px_formatW, V_I4(&v));
1395 return set_style_attr(This, STYLEID_PADDING_LEFT, buf, 0);
1398 return set_style_attr(This, STYLEID_PADDING_LEFT, V_BSTR(&v), 0);
1400 FIXME("unsupported vt=%d\n", V_VT(&v));
1406 static HRESULT WINAPI HTMLStyle_get_paddingLeft(IHTMLStyle *iface, VARIANT *p)
1408 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1412 TRACE("(%p)->(%p)\n", This, p);
1414 hres = get_style_attr(This, STYLEID_PADDING_LEFT, &ret);
1423 static HRESULT WINAPI HTMLStyle_put_padding(IHTMLStyle *iface, BSTR v)
1425 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1427 TRACE("(%p)->(%s)\n", This, debugstr_w(v));
1429 return set_style_attr(This, STYLEID_PADDING, v, 0);
1432 static HRESULT WINAPI HTMLStyle_get_padding(IHTMLStyle *iface, BSTR *p)
1434 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1436 TRACE("(%p)->(%p)\n", This, p);
1438 return get_style_attr(This, STYLEID_PADDING, p);
1441 static HRESULT WINAPI HTMLStyle_put_border(IHTMLStyle *iface, BSTR v)
1443 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1445 TRACE("(%p)->(%s)\n", This, debugstr_w(v));
1447 return set_style_attr(This, STYLEID_BORDER, v, 0);
1450 static HRESULT WINAPI HTMLStyle_get_border(IHTMLStyle *iface, BSTR *p)
1452 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1454 TRACE("(%p)->(%p)\n", This, p);
1456 return get_style_attr(This, STYLEID_BORDER, p);
1459 static HRESULT WINAPI HTMLStyle_put_borderTop(IHTMLStyle *iface, BSTR v)
1461 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1462 TRACE("(%p)->(%s)\n", This, debugstr_w(v));
1463 return set_style_attr(This, STYLEID_BORDER_TOP, v, ATTR_FIX_PX);
1466 static HRESULT WINAPI HTMLStyle_get_borderTop(IHTMLStyle *iface, BSTR *p)
1468 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1469 TRACE("(%p)->(%p)\n", This, p);
1470 return get_style_attr(This, STYLEID_BORDER_TOP, p);
1473 static HRESULT WINAPI HTMLStyle_put_borderRight(IHTMLStyle *iface, BSTR v)
1475 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1476 TRACE("(%p)->(%s)\n", This, debugstr_w(v));
1477 return set_style_attr(This, STYLEID_BORDER_RIGHT, v, ATTR_FIX_PX);
1480 static HRESULT WINAPI HTMLStyle_get_borderRight(IHTMLStyle *iface, BSTR *p)
1482 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1483 TRACE("(%p)->(%p)\n", This, p);
1484 return get_style_attr(This, STYLEID_BORDER_RIGHT, p);
1487 static HRESULT WINAPI HTMLStyle_put_borderBottom(IHTMLStyle *iface, BSTR v)
1489 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1490 TRACE("(%p)->(%s)\n", This, debugstr_w(v));
1491 return set_style_attr(This, STYLEID_BORDER_BOTTOM, v, ATTR_FIX_PX);
1494 static HRESULT WINAPI HTMLStyle_get_borderBottom(IHTMLStyle *iface, BSTR *p)
1496 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1497 TRACE("(%p)->(%p)\n", This, p);
1498 return get_style_attr(This, STYLEID_BORDER_BOTTOM, p);
1501 static HRESULT WINAPI HTMLStyle_put_borderLeft(IHTMLStyle *iface, BSTR v)
1503 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1505 TRACE("(%p)->(%s)\n", This, debugstr_w(v));
1507 return set_style_attr(This, STYLEID_BORDER_LEFT, v, ATTR_FIX_PX);
1510 static HRESULT WINAPI HTMLStyle_get_borderLeft(IHTMLStyle *iface, BSTR *p)
1512 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1514 TRACE("(%p)->(%p)\n", This, p);
1516 return get_style_attr(This, STYLEID_BORDER_LEFT, p);
1519 static HRESULT WINAPI HTMLStyle_put_borderColor(IHTMLStyle *iface, BSTR v)
1521 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1523 TRACE("(%p)->(%s)\n", This, debugstr_w(v));
1525 return set_style_attr(This, STYLEID_BORDER_COLOR, v, 0);
1528 static HRESULT WINAPI HTMLStyle_get_borderColor(IHTMLStyle *iface, BSTR *p)
1530 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1532 TRACE("(%p)->(%p)\n", This, p);
1534 return get_style_attr(This, STYLEID_BORDER_COLOR, p);
1537 static HRESULT WINAPI HTMLStyle_put_borderTopColor(IHTMLStyle *iface, VARIANT v)
1539 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1540 FIXME("(%p)->(v%d)\n", This, V_VT(&v));
1544 static HRESULT WINAPI HTMLStyle_get_borderTopColor(IHTMLStyle *iface, VARIANT *p)
1546 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1548 TRACE("(%p)->(%p)\n", This, p);
1550 return get_nsstyle_attr_var(This->nsstyle, STYLEID_BORDER_TOP_COLOR, p, 0);
1553 static HRESULT WINAPI HTMLStyle_put_borderRightColor(IHTMLStyle *iface, VARIANT v)
1555 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1556 FIXME("(%p)->(v%d)\n", This, V_VT(&v));
1560 static HRESULT WINAPI HTMLStyle_get_borderRightColor(IHTMLStyle *iface, VARIANT *p)
1562 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1564 TRACE("(%p)->(%p)\n", This, p);
1566 return get_nsstyle_attr_var(This->nsstyle, STYLEID_BORDER_RIGHT_COLOR, p, 0);
1569 static HRESULT WINAPI HTMLStyle_put_borderBottomColor(IHTMLStyle *iface, VARIANT v)
1571 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1572 FIXME("(%p)->(v%d)\n", This, V_VT(&v));
1576 static HRESULT WINAPI HTMLStyle_get_borderBottomColor(IHTMLStyle *iface, VARIANT *p)
1578 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1580 TRACE("(%p)->(%p)\n", This, p);
1582 return get_nsstyle_attr_var(This->nsstyle, STYLEID_BORDER_BOTTOM_COLOR, p, 0);
1585 static HRESULT WINAPI HTMLStyle_put_borderLeftColor(IHTMLStyle *iface, VARIANT v)
1587 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1588 FIXME("(%p)->(v%d)\n", This, V_VT(&v));
1592 static HRESULT WINAPI HTMLStyle_get_borderLeftColor(IHTMLStyle *iface, VARIANT *p)
1594 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1596 TRACE("(%p)->(%p)\n", This, p);
1598 return get_nsstyle_attr_var(This->nsstyle, STYLEID_BORDER_LEFT_COLOR, p, 0);
1601 static HRESULT WINAPI HTMLStyle_put_borderWidth(IHTMLStyle *iface, BSTR v)
1603 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1604 TRACE("(%p)->(%s)\n", This, debugstr_w(v));
1605 return set_style_attr(This, STYLEID_BORDER_WIDTH, v, ATTR_FIX_PX);
1608 static HRESULT WINAPI HTMLStyle_get_borderWidth(IHTMLStyle *iface, BSTR *p)
1610 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1611 TRACE("(%p)->(%p)\n", This, p);
1612 return get_style_attr(This, STYLEID_BORDER_WIDTH, p);
1615 static HRESULT WINAPI HTMLStyle_put_borderTopWidth(IHTMLStyle *iface, VARIANT v)
1617 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1618 TRACE("(%p)->(v%d)\n", This, V_VT(&v));
1619 return set_nsstyle_attr_var(This->nsstyle, STYLEID_BORDER_TOP_WIDTH, &v, 0);
1622 static HRESULT WINAPI HTMLStyle_get_borderTopWidth(IHTMLStyle *iface, VARIANT *p)
1624 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1626 TRACE("(%p)->(%p)\n", This, p);
1628 return get_nsstyle_attr_var(This->nsstyle, STYLEID_BORDER_TOP_WIDTH, p, 0);
1631 static HRESULT WINAPI HTMLStyle_put_borderRightWidth(IHTMLStyle *iface, VARIANT v)
1633 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1634 TRACE("(%p)->(v%d)\n", This, V_VT(&v));
1635 return set_nsstyle_attr_var(This->nsstyle, STYLEID_BORDER_RIGHT_WIDTH, &v, 0);
1638 static HRESULT WINAPI HTMLStyle_get_borderRightWidth(IHTMLStyle *iface, VARIANT *p)
1640 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1641 TRACE("(%p)->(%p)\n", This, p);
1642 return get_nsstyle_attr_var(This->nsstyle, STYLEID_BORDER_RIGHT_WIDTH, p, 0);
1645 static HRESULT WINAPI HTMLStyle_put_borderBottomWidth(IHTMLStyle *iface, VARIANT v)
1647 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1649 TRACE("(%p)->(v%d)\n", This, V_VT(&v));
1650 return set_nsstyle_attr_var(This->nsstyle, STYLEID_BORDER_BOTTOM_WIDTH, &v, 0);
1653 static HRESULT WINAPI HTMLStyle_get_borderBottomWidth(IHTMLStyle *iface, VARIANT *p)
1655 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1656 TRACE("(%p)->(%p)\n", This, p);
1657 return get_nsstyle_attr_var(This->nsstyle, STYLEID_BORDER_BOTTOM_WIDTH, p, 0);
1660 static HRESULT WINAPI HTMLStyle_put_borderLeftWidth(IHTMLStyle *iface, VARIANT v)
1662 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1663 TRACE("(%p)->(v%d)\n", This, V_VT(&v));
1664 return set_nsstyle_attr_var(This->nsstyle, STYLEID_BORDER_LEFT_WIDTH, &v, 0);
1667 static HRESULT WINAPI HTMLStyle_get_borderLeftWidth(IHTMLStyle *iface, VARIANT *p)
1669 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1670 TRACE("(%p)->(%p)\n", This, p);
1671 return get_nsstyle_attr_var(This->nsstyle, STYLEID_BORDER_LEFT_WIDTH, p, 0);
1674 static HRESULT WINAPI HTMLStyle_put_borderStyle(IHTMLStyle *iface, BSTR v)
1676 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1677 static const WCHAR styleWindowInset[] = {'w','i','n','d','o','w','-','i','n','s','e','t',0};
1678 HRESULT hres = S_OK;
1683 TRACE("(%p)->(%s)\n", This, debugstr_w(v));
1685 while(v[i] && hres == S_OK)
1687 if(v[i] == (WCHAR)' ')
1689 pstyle = SysAllocStringLen(&v[last], (i-last));
1690 if( !(is_valid_border_style(pstyle) || strcmpiW(styleWindowInset, pstyle) == 0))
1692 TRACE("1. Invalid style (%s)\n", debugstr_w(pstyle));
1693 hres = E_INVALIDARG;
1695 SysFreeString(pstyle);
1703 pstyle = SysAllocStringLen(&v[last], i-last);
1704 if( !(is_valid_border_style(pstyle) || strcmpiW(styleWindowInset, pstyle) == 0))
1706 TRACE("2. Invalid style (%s)\n", debugstr_w(pstyle));
1707 hres = E_INVALIDARG;
1709 SysFreeString(pstyle);
1713 hres = set_nsstyle_attr(This->nsstyle, STYLEID_BORDER_STYLE, v, 0);
1718 static HRESULT WINAPI HTMLStyle_get_borderStyle(IHTMLStyle *iface, BSTR *p)
1720 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1721 TRACE("(%p)->(%p)\n", This, p);
1722 return get_style_attr(This, STYLEID_BORDER_STYLE, p);
1725 static HRESULT WINAPI HTMLStyle_put_borderTopStyle(IHTMLStyle *iface, BSTR v)
1727 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1728 TRACE("(%p)->(%s)\n", This, debugstr_w(v));
1730 if(!is_valid_border_style(v))
1731 return E_INVALIDARG;
1733 return set_style_attr(This, STYLEID_BORDER_TOP_STYLE, v, 0);
1736 static HRESULT WINAPI HTMLStyle_get_borderTopStyle(IHTMLStyle *iface, BSTR *p)
1738 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1739 TRACE("(%p)->(%p)\n", This, p);
1740 return get_style_attr(This, STYLEID_BORDER_TOP_STYLE, p);
1743 static HRESULT WINAPI HTMLStyle_put_borderRightStyle(IHTMLStyle *iface, BSTR v)
1745 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1746 TRACE("(%p)->(%s)\n", This, debugstr_w(v));
1748 if(!is_valid_border_style(v))
1749 return E_INVALIDARG;
1751 return set_style_attr(This, STYLEID_BORDER_RIGHT_STYLE, v, 0);
1754 static HRESULT WINAPI HTMLStyle_get_borderRightStyle(IHTMLStyle *iface, BSTR *p)
1756 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1757 TRACE("(%p)->(%p)\n", This, p);
1758 return get_style_attr(This, STYLEID_BORDER_RIGHT_STYLE, p);
1761 static HRESULT WINAPI HTMLStyle_put_borderBottomStyle(IHTMLStyle *iface, BSTR v)
1763 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1764 TRACE("(%p)->(%s)\n", This, debugstr_w(v));
1766 if(!is_valid_border_style(v))
1767 return E_INVALIDARG;
1769 return set_style_attr(This, STYLEID_BORDER_BOTTOM_STYLE, v, 0);
1772 static HRESULT WINAPI HTMLStyle_get_borderBottomStyle(IHTMLStyle *iface, BSTR *p)
1774 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1775 TRACE("(%p)->(%p)\n", This, p);
1776 return get_style_attr(This, STYLEID_BORDER_BOTTOM_STYLE, p);
1779 static HRESULT WINAPI HTMLStyle_put_borderLeftStyle(IHTMLStyle *iface, BSTR v)
1781 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1782 TRACE("(%p)->(%s)\n", This, debugstr_w(v));
1784 if(!is_valid_border_style(v))
1785 return E_INVALIDARG;
1787 return set_style_attr(This, STYLEID_BORDER_LEFT_STYLE, v, 0);
1790 static HRESULT WINAPI HTMLStyle_get_borderLeftStyle(IHTMLStyle *iface, BSTR *p)
1792 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1793 TRACE("(%p)->(%p)\n", This, p);
1794 return get_style_attr(This, STYLEID_BORDER_LEFT_STYLE, p);
1797 static HRESULT WINAPI HTMLStyle_put_width(IHTMLStyle *iface, VARIANT v)
1799 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1801 TRACE("(%p)->(v%d)\n", This, V_VT(&v));
1803 return set_nsstyle_attr_var(This->nsstyle, STYLEID_WIDTH, &v, ATTR_FIX_PX);
1806 static HRESULT WINAPI HTMLStyle_get_width(IHTMLStyle *iface, VARIANT *p)
1808 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1810 TRACE("(%p)->(%p)\n", This, p);
1813 return get_style_attr(This, STYLEID_WIDTH, &V_BSTR(p));
1816 static HRESULT WINAPI HTMLStyle_put_height(IHTMLStyle *iface, VARIANT v)
1818 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1820 TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
1824 return set_style_attr(This, STYLEID_HEIGHT, V_BSTR(&v), 0);
1826 FIXME("unimplemented vt %d\n", V_VT(&v));
1833 static HRESULT WINAPI HTMLStyle_get_height(IHTMLStyle *iface, VARIANT *p)
1835 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1839 TRACE("(%p)->(%p)\n", This, p);
1841 hres = get_style_attr(This, STYLEID_HEIGHT, &ret);
1850 static HRESULT WINAPI HTMLStyle_put_styleFloat(IHTMLStyle *iface, BSTR v)
1852 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1853 FIXME("(%p)->(%s)\n", This, debugstr_w(v));
1857 static HRESULT WINAPI HTMLStyle_get_styleFloat(IHTMLStyle *iface, BSTR *p)
1859 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1860 FIXME("(%p)->(%p)\n", This, p);
1864 static HRESULT WINAPI HTMLStyle_put_clear(IHTMLStyle *iface, BSTR v)
1866 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1867 FIXME("(%p)->(%s)\n", This, debugstr_w(v));
1871 static HRESULT WINAPI HTMLStyle_get_clear(IHTMLStyle *iface, BSTR *p)
1873 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1874 FIXME("(%p)->(%p)\n", This, p);
1878 static HRESULT WINAPI HTMLStyle_put_display(IHTMLStyle *iface, BSTR v)
1880 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1882 TRACE("(%p)->(%s)\n", This, debugstr_w(v));
1884 return set_style_attr(This, STYLEID_DISPLAY, v, 0);
1887 static HRESULT WINAPI HTMLStyle_get_display(IHTMLStyle *iface, BSTR *p)
1889 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1891 TRACE("(%p)->(%p)\n", This, p);
1893 return get_style_attr(This, STYLEID_DISPLAY, p);
1896 static HRESULT WINAPI HTMLStyle_put_visibility(IHTMLStyle *iface, BSTR v)
1898 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1900 TRACE("(%p)->(%s)\n", This, debugstr_w(v));
1902 return set_style_attr(This, STYLEID_VISIBILITY, v, 0);
1905 static HRESULT WINAPI HTMLStyle_get_visibility(IHTMLStyle *iface, BSTR *p)
1907 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1909 TRACE("(%p)->(%p)\n", This, p);
1911 return get_style_attr(This, STYLEID_VISIBILITY, p);
1914 static HRESULT WINAPI HTMLStyle_put_listStyleType(IHTMLStyle *iface, BSTR v)
1916 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1917 FIXME("(%p)->(%s)\n", This, debugstr_w(v));
1921 static HRESULT WINAPI HTMLStyle_get_listStyleType(IHTMLStyle *iface, BSTR *p)
1923 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1924 FIXME("(%p)->(%p)\n", This, p);
1928 static HRESULT WINAPI HTMLStyle_put_listStylePosition(IHTMLStyle *iface, BSTR v)
1930 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1931 FIXME("(%p)->(%s)\n", This, debugstr_w(v));
1935 static HRESULT WINAPI HTMLStyle_get_listStylePosition(IHTMLStyle *iface, BSTR *p)
1937 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1938 FIXME("(%p)->(%p)\n", This, p);
1942 static HRESULT WINAPI HTMLStyle_put_listStyleImage(IHTMLStyle *iface, BSTR v)
1944 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1945 FIXME("(%p)->(%s)\n", This, debugstr_w(v));
1949 static HRESULT WINAPI HTMLStyle_get_listStyleImage(IHTMLStyle *iface, BSTR *p)
1951 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1952 FIXME("(%p)->(%p)\n", This, p);
1956 static HRESULT WINAPI HTMLStyle_put_listStyle(IHTMLStyle *iface, BSTR v)
1958 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1959 FIXME("(%p)->(%s)\n", This, debugstr_w(v));
1963 static HRESULT WINAPI HTMLStyle_get_listStyle(IHTMLStyle *iface, BSTR *p)
1965 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1966 FIXME("(%p)->(%p)\n", This, p);
1970 static HRESULT WINAPI HTMLStyle_put_whiteSpace(IHTMLStyle *iface, BSTR v)
1972 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1973 FIXME("(%p)->(%s)\n", This, debugstr_w(v));
1977 static HRESULT WINAPI HTMLStyle_get_whiteSpace(IHTMLStyle *iface, BSTR *p)
1979 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1980 FIXME("(%p)->(%p)\n", This, p);
1984 static HRESULT WINAPI HTMLStyle_put_top(IHTMLStyle *iface, VARIANT v)
1986 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1988 TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
1990 return set_nsstyle_attr_var(This->nsstyle, STYLEID_TOP, &v, 0);
1993 static HRESULT WINAPI HTMLStyle_get_top(IHTMLStyle *iface, VARIANT *p)
1995 HTMLStyle *This = impl_from_IHTMLStyle(iface);
1999 TRACE("(%p)->(%p)\n", This, p);
2001 hres = get_style_attr(This, STYLEID_TOP, &ret);
2010 static HRESULT WINAPI HTMLStyle_put_left(IHTMLStyle *iface, VARIANT v)
2012 HTMLStyle *This = impl_from_IHTMLStyle(iface);
2014 TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
2016 return set_nsstyle_attr_var(This->nsstyle, STYLEID_LEFT, &v, 0);
2019 static HRESULT WINAPI HTMLStyle_get_left(IHTMLStyle *iface, VARIANT *p)
2021 HTMLStyle *This = impl_from_IHTMLStyle(iface);
2025 TRACE("(%p)->(%p)\n", This, p);
2027 hres = get_style_attr(This, STYLEID_LEFT, &ret);
2036 static HRESULT WINAPI HTMLStyle_get_position(IHTMLStyle *iface, BSTR *p)
2038 HTMLStyle *This = impl_from_IHTMLStyle(iface);
2039 TRACE("(%p)->(%p)\n", This, p);
2040 return IHTMLStyle2_get_position(&This->IHTMLStyle2_iface, p);
2043 static HRESULT WINAPI HTMLStyle_put_zIndex(IHTMLStyle *iface, VARIANT v)
2045 HTMLStyle *This = impl_from_IHTMLStyle(iface);
2047 TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
2051 return set_style_attr(This, STYLEID_Z_INDEX, V_BSTR(&v), 0);
2054 static const WCHAR format[] = {'%','d',0};
2056 wsprintfW(value, format, V_I4(&v));
2057 return set_style_attr(This, STYLEID_Z_INDEX, value, 0);
2060 FIXME("unimplemented vt %d\n", V_VT(&v));
2067 static HRESULT WINAPI HTMLStyle_get_zIndex(IHTMLStyle *iface, VARIANT *p)
2069 HTMLStyle *This = impl_from_IHTMLStyle(iface);
2071 TRACE("(%p)->(%p)\n", This, p);
2073 return get_nsstyle_attr_var(This->nsstyle, STYLEID_Z_INDEX, p, ATTR_STR_TO_INT);
2076 static HRESULT WINAPI HTMLStyle_put_overflow(IHTMLStyle *iface, BSTR v)
2078 HTMLStyle *This = impl_from_IHTMLStyle(iface);
2079 static const WCHAR szVisible[] = {'v','i','s','i','b','l','e',0};
2080 static const WCHAR szScroll[] = {'s','c','r','o','l','l',0};
2081 static const WCHAR szHidden[] = {'h','i','d','d','e','n',0};
2082 static const WCHAR szAuto[] = {'a','u','t','o',0};
2084 TRACE("(%p)->(%s)\n", This, debugstr_w(v));
2086 /* overflow can only be one of the follow values. */
2087 if(!v || !*v || strcmpiW(szVisible, v) == 0 || strcmpiW(szScroll, v) == 0 ||
2088 strcmpiW(szHidden, v) == 0 || strcmpiW(szAuto, v) == 0)
2090 return set_nsstyle_attr(This->nsstyle, STYLEID_OVERFLOW, v, 0);
2093 return E_INVALIDARG;
2097 static HRESULT WINAPI HTMLStyle_get_overflow(IHTMLStyle *iface, BSTR *p)
2099 HTMLStyle *This = impl_from_IHTMLStyle(iface);
2101 TRACE("(%p)->(%p)\n", This, p);
2104 return E_INVALIDARG;
2106 return get_style_attr(This, STYLEID_OVERFLOW, p);
2109 static HRESULT WINAPI HTMLStyle_put_pageBreakBefore(IHTMLStyle *iface, BSTR v)
2111 HTMLStyle *This = impl_from_IHTMLStyle(iface);
2112 FIXME("(%p)->(%s)\n", This, debugstr_w(v));
2116 static HRESULT WINAPI HTMLStyle_get_pageBreakBefore(IHTMLStyle *iface, BSTR *p)
2118 HTMLStyle *This = impl_from_IHTMLStyle(iface);
2119 FIXME("(%p)->(%p)\n", This, p);
2123 static HRESULT WINAPI HTMLStyle_put_pageBreakAfter(IHTMLStyle *iface, BSTR v)
2125 HTMLStyle *This = impl_from_IHTMLStyle(iface);
2126 FIXME("(%p)->(%s)\n", This, debugstr_w(v));
2130 static HRESULT WINAPI HTMLStyle_get_pageBreakAfter(IHTMLStyle *iface, BSTR *p)
2132 HTMLStyle *This = impl_from_IHTMLStyle(iface);
2133 FIXME("(%p)->(%p)\n", This, p);
2137 static HRESULT WINAPI HTMLStyle_put_cssText(IHTMLStyle *iface, BSTR v)
2139 HTMLStyle *This = impl_from_IHTMLStyle(iface);
2143 TRACE("(%p)->(%s)\n", This, debugstr_w(v));
2145 nsAString_InitDepend(&text_str, v);
2146 nsres = nsIDOMCSSStyleDeclaration_SetCssText(This->nsstyle, &text_str);
2147 nsAString_Finish(&text_str);
2148 if(NS_FAILED(nsres)) {
2149 FIXME("SetCssStyle failed: %08x\n", nsres);
2156 static HRESULT WINAPI HTMLStyle_get_cssText(IHTMLStyle *iface, BSTR *p)
2158 HTMLStyle *This = impl_from_IHTMLStyle(iface);
2162 TRACE("(%p)->(%p)\n", This, p);
2164 /* FIXME: Gecko style formatting is different than IE (uppercase). */
2165 nsAString_Init(&text_str, NULL);
2166 nsres = nsIDOMCSSStyleDeclaration_GetCssText(This->nsstyle, &text_str);
2167 if(NS_SUCCEEDED(nsres)) {
2168 const PRUnichar *text;
2170 nsAString_GetData(&text_str, &text);
2171 *p = *text ? SysAllocString(text) : NULL;
2173 FIXME("GetCssStyle failed: %08x\n", nsres);
2177 nsAString_Finish(&text_str);
2181 static HRESULT WINAPI HTMLStyle_put_pixelTop(IHTMLStyle *iface, LONG v)
2183 HTMLStyle *This = impl_from_IHTMLStyle(iface);
2184 FIXME("(%p)->()\n", This);
2188 static HRESULT WINAPI HTMLStyle_get_pixelTop(IHTMLStyle *iface, LONG *p)
2190 HTMLStyle *This = impl_from_IHTMLStyle(iface);
2191 FIXME("(%p)->()\n", This);
2195 static HRESULT WINAPI HTMLStyle_put_pixelLeft(IHTMLStyle *iface, LONG v)
2197 HTMLStyle *This = impl_from_IHTMLStyle(iface);
2198 FIXME("(%p)->()\n", This);
2202 static HRESULT WINAPI HTMLStyle_get_pixelLeft(IHTMLStyle *iface, LONG *p)
2204 HTMLStyle *This = impl_from_IHTMLStyle(iface);
2205 FIXME("(%p)->()\n", This);
2209 static HRESULT WINAPI HTMLStyle_put_pixelWidth(IHTMLStyle *iface, LONG v)
2211 HTMLStyle *This = impl_from_IHTMLStyle(iface);
2212 FIXME("(%p)->()\n", This);
2216 static HRESULT WINAPI HTMLStyle_get_pixelWidth(IHTMLStyle *iface, LONG *p)
2218 HTMLStyle *This = impl_from_IHTMLStyle(iface);
2219 FIXME("(%p)->()\n", This);
2223 static HRESULT WINAPI HTMLStyle_put_pixelHeight(IHTMLStyle *iface, LONG v)
2225 HTMLStyle *This = impl_from_IHTMLStyle(iface);
2226 FIXME("(%p)->()\n", This);
2230 static HRESULT WINAPI HTMLStyle_get_pixelHeight(IHTMLStyle *iface, LONG *p)
2232 HTMLStyle *This = impl_from_IHTMLStyle(iface);
2233 FIXME("(%p)->()\n", This);
2237 static HRESULT WINAPI HTMLStyle_put_posTop(IHTMLStyle *iface, float v)
2239 HTMLStyle *This = impl_from_IHTMLStyle(iface);
2241 TRACE("(%p)->(%f)\n", This, v);
2243 return set_style_pos(This, STYLEID_TOP, v);
2246 static HRESULT WINAPI HTMLStyle_get_posTop(IHTMLStyle *iface, float *p)
2248 HTMLStyle *This = impl_from_IHTMLStyle(iface);
2250 TRACE("(%p)->(%p)\n", This, p);
2255 return get_nsstyle_pos(This, STYLEID_TOP, p);
2258 static HRESULT WINAPI HTMLStyle_put_posLeft(IHTMLStyle *iface, float v)
2260 HTMLStyle *This = impl_from_IHTMLStyle(iface);
2262 TRACE("(%p)->(%f)\n", This, v);
2264 return set_style_pos(This, STYLEID_LEFT, v);
2267 static HRESULT WINAPI HTMLStyle_get_posLeft(IHTMLStyle *iface, float *p)
2269 HTMLStyle *This = impl_from_IHTMLStyle(iface);
2271 TRACE("(%p)->(%p)\n", This, p);
2276 return get_nsstyle_pos(This, STYLEID_LEFT, p);
2279 static HRESULT WINAPI HTMLStyle_put_posWidth(IHTMLStyle *iface, float v)
2281 HTMLStyle *This = impl_from_IHTMLStyle(iface);
2283 TRACE("(%p)->(%f)\n", This, v);
2285 return set_style_pos(This, STYLEID_WIDTH, v);
2288 static HRESULT WINAPI HTMLStyle_get_posWidth(IHTMLStyle *iface, float *p)
2290 HTMLStyle *This = impl_from_IHTMLStyle(iface);
2292 TRACE("(%p)->(%p)\n", This, p);
2297 if(get_nsstyle_pos(This, STYLEID_WIDTH, p) != S_OK)
2303 static HRESULT WINAPI HTMLStyle_put_posHeight(IHTMLStyle *iface, float v)
2305 HTMLStyle *This = impl_from_IHTMLStyle(iface);
2307 TRACE("(%p)->(%f)\n", This, v);
2309 return set_style_pos(This, STYLEID_HEIGHT, v);
2312 static HRESULT WINAPI HTMLStyle_get_posHeight(IHTMLStyle *iface, float *p)
2314 HTMLStyle *This = impl_from_IHTMLStyle(iface);
2316 TRACE("(%p)->(%p)\n", This, p);
2321 if(get_nsstyle_pos(This, STYLEID_HEIGHT, p) != S_OK)
2327 static HRESULT WINAPI HTMLStyle_put_cursor(IHTMLStyle *iface, BSTR v)
2329 HTMLStyle *This = impl_from_IHTMLStyle(iface);
2331 TRACE("(%p)->(%s)\n", This, debugstr_w(v));
2333 return set_style_attr(This, STYLEID_CURSOR, v, 0);
2336 static HRESULT WINAPI HTMLStyle_get_cursor(IHTMLStyle *iface, BSTR *p)
2338 HTMLStyle *This = impl_from_IHTMLStyle(iface);
2340 TRACE("(%p)->(%p)\n", This, p);
2342 return get_style_attr(This, STYLEID_CURSOR, p);
2345 static HRESULT WINAPI HTMLStyle_put_clip(IHTMLStyle *iface, BSTR v)
2347 HTMLStyle *This = impl_from_IHTMLStyle(iface);
2348 FIXME("(%p)->(%s)\n", This, debugstr_w(v));
2352 static HRESULT WINAPI HTMLStyle_get_clip(IHTMLStyle *iface, BSTR *p)
2354 HTMLStyle *This = impl_from_IHTMLStyle(iface);
2355 FIXME("(%p)->(%p)\n", This, p);
2359 static HRESULT WINAPI HTMLStyle_put_filter(IHTMLStyle *iface, BSTR v)
2361 HTMLStyle *This = impl_from_IHTMLStyle(iface);
2363 WARN("(%p)->(%s)\n", This, debugstr_w(v));
2365 /* FIXME: Handle MS-style filters */
2366 return set_style_attr(This, STYLEID_FILTER, v, 0);
2369 static HRESULT WINAPI HTMLStyle_get_filter(IHTMLStyle *iface, BSTR *p)
2371 HTMLStyle *This = impl_from_IHTMLStyle(iface);
2373 WARN("(%p)->(%p)\n", This, p);
2375 /* FIXME: Handle MS-style filters */
2376 return get_style_attr(This, STYLEID_FILTER, p);
2379 static HRESULT WINAPI HTMLStyle_setAttribute(IHTMLStyle *iface, BSTR strAttributeName,
2380 VARIANT AttributeValue, LONG lFlags)
2382 HTMLStyle *This = impl_from_IHTMLStyle(iface);
2386 TRACE("(%p)->(%s v%d %08x)\n", This, debugstr_w(strAttributeName),
2387 V_VT(&AttributeValue), lFlags);
2389 if(!strAttributeName)
2390 return E_INVALIDARG;
2393 FIXME("Parameter lFlags ignored\n");
2395 hres = HTMLStyle_GetIDsOfNames(iface, &IID_NULL, &strAttributeName, 1,
2396 LOCALE_USER_DEFAULT, &dispid);
2400 DISPID dispidNamed = DISPID_PROPERTYPUT;
2404 params.rgvarg = &AttributeValue;
2405 params.cNamedArgs = 1;
2406 params.rgdispidNamedArgs = &dispidNamed;
2408 hres = HTMLStyle_Invoke(iface, dispid, &IID_NULL, LOCALE_SYSTEM_DEFAULT,
2409 DISPATCH_PROPERTYPUT, ¶ms, &ret, NULL, NULL);
2413 FIXME("Custom attributes not supported.\n");
2416 TRACE("ret: %08x\n", hres);
2421 static HRESULT WINAPI HTMLStyle_getAttribute(IHTMLStyle *iface, BSTR strAttributeName,
2422 LONG lFlags, VARIANT *AttributeValue)
2424 HTMLStyle *This = impl_from_IHTMLStyle(iface);
2428 TRACE("(%p)->(%s v%p %08x)\n", This, debugstr_w(strAttributeName),
2429 AttributeValue, lFlags);
2431 if(!AttributeValue || !strAttributeName)
2432 return E_INVALIDARG;
2435 FIXME("Parameter lFlags ignored\n");
2437 hres = HTMLStyle_GetIDsOfNames(iface, &IID_NULL, &strAttributeName, 1,
2438 LOCALE_USER_DEFAULT, &dispid);
2441 DISPPARAMS params = {NULL, NULL, 0, 0 };
2443 hres = HTMLStyle_Invoke(iface, dispid, &IID_NULL, LOCALE_SYSTEM_DEFAULT,
2444 DISPATCH_PROPERTYGET, ¶ms, AttributeValue, NULL, NULL);
2448 FIXME("Custom attributes not supported.\n");
2454 static HRESULT WINAPI HTMLStyle_removeAttribute(IHTMLStyle *iface, BSTR strAttributeName,
2455 LONG lFlags, VARIANT_BOOL *pfSuccess)
2457 HTMLStyle *This = impl_from_IHTMLStyle(iface);
2458 FIXME("(%p)->(%s %08x %p)\n", This, debugstr_w(strAttributeName),
2463 static HRESULT WINAPI HTMLStyle_toString(IHTMLStyle *iface, BSTR *String)
2465 HTMLStyle *This = impl_from_IHTMLStyle(iface);
2466 FIXME("(%p)->(%p)\n", This, String);
2470 static const IHTMLStyleVtbl HTMLStyleVtbl = {
2471 HTMLStyle_QueryInterface,
2474 HTMLStyle_GetTypeInfoCount,
2475 HTMLStyle_GetTypeInfo,
2476 HTMLStyle_GetIDsOfNames,
2478 HTMLStyle_put_fontFamily,
2479 HTMLStyle_get_fontFamily,
2480 HTMLStyle_put_fontStyle,
2481 HTMLStyle_get_fontStyle,
2482 HTMLStyle_put_fontVariant,
2483 HTMLStyle_get_fontVariant,
2484 HTMLStyle_put_fontWeight,
2485 HTMLStyle_get_fontWeight,
2486 HTMLStyle_put_fontSize,
2487 HTMLStyle_get_fontSize,
2490 HTMLStyle_put_color,
2491 HTMLStyle_get_color,
2492 HTMLStyle_put_background,
2493 HTMLStyle_get_background,
2494 HTMLStyle_put_backgroundColor,
2495 HTMLStyle_get_backgroundColor,
2496 HTMLStyle_put_backgroundImage,
2497 HTMLStyle_get_backgroundImage,
2498 HTMLStyle_put_backgroundRepeat,
2499 HTMLStyle_get_backgroundRepeat,
2500 HTMLStyle_put_backgroundAttachment,
2501 HTMLStyle_get_backgroundAttachment,
2502 HTMLStyle_put_backgroundPosition,
2503 HTMLStyle_get_backgroundPosition,
2504 HTMLStyle_put_backgroundPositionX,
2505 HTMLStyle_get_backgroundPositionX,
2506 HTMLStyle_put_backgroundPositionY,
2507 HTMLStyle_get_backgroundPositionY,
2508 HTMLStyle_put_wordSpacing,
2509 HTMLStyle_get_wordSpacing,
2510 HTMLStyle_put_letterSpacing,
2511 HTMLStyle_get_letterSpacing,
2512 HTMLStyle_put_textDecoration,
2513 HTMLStyle_get_textDecoration,
2514 HTMLStyle_put_textDecorationNone,
2515 HTMLStyle_get_textDecorationNone,
2516 HTMLStyle_put_textDecorationUnderline,
2517 HTMLStyle_get_textDecorationUnderline,
2518 HTMLStyle_put_textDecorationOverline,
2519 HTMLStyle_get_textDecorationOverline,
2520 HTMLStyle_put_textDecorationLineThrough,
2521 HTMLStyle_get_textDecorationLineThrough,
2522 HTMLStyle_put_textDecorationBlink,
2523 HTMLStyle_get_textDecorationBlink,
2524 HTMLStyle_put_verticalAlign,
2525 HTMLStyle_get_verticalAlign,
2526 HTMLStyle_put_textTransform,
2527 HTMLStyle_get_textTransform,
2528 HTMLStyle_put_textAlign,
2529 HTMLStyle_get_textAlign,
2530 HTMLStyle_put_textIndent,
2531 HTMLStyle_get_textIndent,
2532 HTMLStyle_put_lineHeight,
2533 HTMLStyle_get_lineHeight,
2534 HTMLStyle_put_marginTop,
2535 HTMLStyle_get_marginTop,
2536 HTMLStyle_put_marginRight,
2537 HTMLStyle_get_marginRight,
2538 HTMLStyle_put_marginBottom,
2539 HTMLStyle_get_marginBottom,
2540 HTMLStyle_put_marginLeft,
2541 HTMLStyle_get_marginLeft,
2542 HTMLStyle_put_margin,
2543 HTMLStyle_get_margin,
2544 HTMLStyle_put_paddingTop,
2545 HTMLStyle_get_paddingTop,
2546 HTMLStyle_put_paddingRight,
2547 HTMLStyle_get_paddingRight,
2548 HTMLStyle_put_paddingBottom,
2549 HTMLStyle_get_paddingBottom,
2550 HTMLStyle_put_paddingLeft,
2551 HTMLStyle_get_paddingLeft,
2552 HTMLStyle_put_padding,
2553 HTMLStyle_get_padding,
2554 HTMLStyle_put_border,
2555 HTMLStyle_get_border,
2556 HTMLStyle_put_borderTop,
2557 HTMLStyle_get_borderTop,
2558 HTMLStyle_put_borderRight,
2559 HTMLStyle_get_borderRight,
2560 HTMLStyle_put_borderBottom,
2561 HTMLStyle_get_borderBottom,
2562 HTMLStyle_put_borderLeft,
2563 HTMLStyle_get_borderLeft,
2564 HTMLStyle_put_borderColor,
2565 HTMLStyle_get_borderColor,
2566 HTMLStyle_put_borderTopColor,
2567 HTMLStyle_get_borderTopColor,
2568 HTMLStyle_put_borderRightColor,
2569 HTMLStyle_get_borderRightColor,
2570 HTMLStyle_put_borderBottomColor,
2571 HTMLStyle_get_borderBottomColor,
2572 HTMLStyle_put_borderLeftColor,
2573 HTMLStyle_get_borderLeftColor,
2574 HTMLStyle_put_borderWidth,
2575 HTMLStyle_get_borderWidth,
2576 HTMLStyle_put_borderTopWidth,
2577 HTMLStyle_get_borderTopWidth,
2578 HTMLStyle_put_borderRightWidth,
2579 HTMLStyle_get_borderRightWidth,
2580 HTMLStyle_put_borderBottomWidth,
2581 HTMLStyle_get_borderBottomWidth,
2582 HTMLStyle_put_borderLeftWidth,
2583 HTMLStyle_get_borderLeftWidth,
2584 HTMLStyle_put_borderStyle,
2585 HTMLStyle_get_borderStyle,
2586 HTMLStyle_put_borderTopStyle,
2587 HTMLStyle_get_borderTopStyle,
2588 HTMLStyle_put_borderRightStyle,
2589 HTMLStyle_get_borderRightStyle,
2590 HTMLStyle_put_borderBottomStyle,
2591 HTMLStyle_get_borderBottomStyle,
2592 HTMLStyle_put_borderLeftStyle,
2593 HTMLStyle_get_borderLeftStyle,
2594 HTMLStyle_put_width,
2595 HTMLStyle_get_width,
2596 HTMLStyle_put_height,
2597 HTMLStyle_get_height,
2598 HTMLStyle_put_styleFloat,
2599 HTMLStyle_get_styleFloat,
2600 HTMLStyle_put_clear,
2601 HTMLStyle_get_clear,
2602 HTMLStyle_put_display,
2603 HTMLStyle_get_display,
2604 HTMLStyle_put_visibility,
2605 HTMLStyle_get_visibility,
2606 HTMLStyle_put_listStyleType,
2607 HTMLStyle_get_listStyleType,
2608 HTMLStyle_put_listStylePosition,
2609 HTMLStyle_get_listStylePosition,
2610 HTMLStyle_put_listStyleImage,
2611 HTMLStyle_get_listStyleImage,
2612 HTMLStyle_put_listStyle,
2613 HTMLStyle_get_listStyle,
2614 HTMLStyle_put_whiteSpace,
2615 HTMLStyle_get_whiteSpace,
2620 HTMLStyle_get_position,
2621 HTMLStyle_put_zIndex,
2622 HTMLStyle_get_zIndex,
2623 HTMLStyle_put_overflow,
2624 HTMLStyle_get_overflow,
2625 HTMLStyle_put_pageBreakBefore,
2626 HTMLStyle_get_pageBreakBefore,
2627 HTMLStyle_put_pageBreakAfter,
2628 HTMLStyle_get_pageBreakAfter,
2629 HTMLStyle_put_cssText,
2630 HTMLStyle_get_cssText,
2631 HTMLStyle_put_pixelTop,
2632 HTMLStyle_get_pixelTop,
2633 HTMLStyle_put_pixelLeft,
2634 HTMLStyle_get_pixelLeft,
2635 HTMLStyle_put_pixelWidth,
2636 HTMLStyle_get_pixelWidth,
2637 HTMLStyle_put_pixelHeight,
2638 HTMLStyle_get_pixelHeight,
2639 HTMLStyle_put_posTop,
2640 HTMLStyle_get_posTop,
2641 HTMLStyle_put_posLeft,
2642 HTMLStyle_get_posLeft,
2643 HTMLStyle_put_posWidth,
2644 HTMLStyle_get_posWidth,
2645 HTMLStyle_put_posHeight,
2646 HTMLStyle_get_posHeight,
2647 HTMLStyle_put_cursor,
2648 HTMLStyle_get_cursor,
2651 HTMLStyle_put_filter,
2652 HTMLStyle_get_filter,
2653 HTMLStyle_setAttribute,
2654 HTMLStyle_getAttribute,
2655 HTMLStyle_removeAttribute,
2659 static HRESULT HTMLStyle_get_dispid(DispatchEx *dispex, BSTR name, DWORD flags, DISPID *dispid)
2661 int c, i, min=0, max = sizeof(style_tbl)/sizeof(*style_tbl)-1;
2666 c = strcmpW(style_tbl[i].name, name);
2668 *dispid = style_tbl[i].dispid;
2678 return DISP_E_UNKNOWNNAME;
2681 static const dispex_static_data_vtbl_t HTMLStyle_dispex_vtbl = {
2683 HTMLStyle_get_dispid,
2687 static const tid_t HTMLStyle_iface_tids[] = {
2694 static dispex_static_data_t HTMLStyle_dispex = {
2695 &HTMLStyle_dispex_vtbl,
2698 HTMLStyle_iface_tids
2701 IHTMLStyle *HTMLStyle_Create(nsIDOMCSSStyleDeclaration *nsstyle)
2703 HTMLStyle *ret = heap_alloc_zero(sizeof(HTMLStyle));
2705 ret->IHTMLStyle_iface.lpVtbl = &HTMLStyleVtbl;
2707 ret->nsstyle = nsstyle;
2708 HTMLStyle2_Init(ret);
2709 HTMLStyle3_Init(ret);
2711 nsIDOMCSSStyleDeclaration_AddRef(nsstyle);
2713 init_dispex(&ret->dispex, (IUnknown*)&ret->IHTMLStyle_iface, &HTMLStyle_dispex);
2715 return &ret->IHTMLStyle_iface;