Commit 6d13dd69 authored by Jacek Caban's avatar Jacek Caban Committed by Alexandre Julliard

mshtml: Added IHTMLStyle6::outline property implementation.

parent 93f9d824
...@@ -135,6 +135,8 @@ static const WCHAR attrMarginTop[] = ...@@ -135,6 +135,8 @@ static const WCHAR attrMarginTop[] =
{'m','a','r','g','i','n','-','t','o','p',0}; {'m','a','r','g','i','n','-','t','o','p',0};
static const WCHAR attrMinHeight[] = static const WCHAR attrMinHeight[] =
{'m','i','n','-','h','e','i','g','h','t',0}; {'m','i','n','-','h','e','i','g','h','t',0};
static const WCHAR attrOutline[] =
{'o','u','t','l','i','n','e',0};
static const WCHAR attrOverflow[] = static const WCHAR attrOverflow[] =
{'o','v','e','r','f','l','o','w',0}; {'o','v','e','r','f','l','o','w',0};
static const WCHAR attrOverflowX[] = static const WCHAR attrOverflowX[] =
...@@ -241,6 +243,7 @@ static const style_tbl_entry_t style_tbl[] = { ...@@ -241,6 +243,7 @@ static const style_tbl_entry_t style_tbl[] = {
{attrMarginRight, DISPID_IHTMLSTYLE_MARGINRIGHT}, {attrMarginRight, DISPID_IHTMLSTYLE_MARGINRIGHT},
{attrMarginTop, DISPID_IHTMLSTYLE_MARGINTOP}, {attrMarginTop, DISPID_IHTMLSTYLE_MARGINTOP},
{attrMinHeight, DISPID_IHTMLSTYLE4_MINHEIGHT}, {attrMinHeight, DISPID_IHTMLSTYLE4_MINHEIGHT},
{attrOutline, DISPID_IHTMLSTYLE6_OUTLINE},
{attrOverflow, DISPID_IHTMLSTYLE_OVERFLOW}, {attrOverflow, DISPID_IHTMLSTYLE_OVERFLOW},
{attrOverflowX, DISPID_IHTMLSTYLE2_OVERFLOWX}, {attrOverflowX, DISPID_IHTMLSTYLE2_OVERFLOWX},
{attrOverflowY, DISPID_IHTMLSTYLE2_OVERFLOWY}, {attrOverflowY, DISPID_IHTMLSTYLE2_OVERFLOWY},
...@@ -464,7 +467,7 @@ static HRESULT nsstyle_to_bstr(const WCHAR *val, DWORD flags, BSTR *p) ...@@ -464,7 +467,7 @@ static HRESULT nsstyle_to_bstr(const WCHAR *val, DWORD flags, BSTR *p)
DWORD len; DWORD len;
if(!*val) { if(!*val) {
*p = NULL; *p = (flags & ATTR_NO_NULL) ? SysAllocStringLen(NULL, 0) : NULL;
return S_OK; return S_OK;
} }
......
...@@ -83,6 +83,7 @@ typedef enum { ...@@ -83,6 +83,7 @@ typedef enum {
STYLEID_MARGIN_RIGHT, STYLEID_MARGIN_RIGHT,
STYLEID_MARGIN_TOP, STYLEID_MARGIN_TOP,
STYLEID_MIN_HEIGHT, STYLEID_MIN_HEIGHT,
STYLEID_OUTLINE,
STYLEID_OVERFLOW, STYLEID_OVERFLOW,
STYLEID_OVERFLOW_X, STYLEID_OVERFLOW_X,
STYLEID_OVERFLOW_Y, STYLEID_OVERFLOW_Y,
...@@ -123,3 +124,4 @@ HRESULT get_nsstyle_attr_var(nsIDOMCSSStyleDeclaration *nsstyle, styleid_t sid, ...@@ -123,3 +124,4 @@ HRESULT get_nsstyle_attr_var(nsIDOMCSSStyleDeclaration *nsstyle, styleid_t sid,
#define ATTR_STR_TO_INT 0x0004 #define ATTR_STR_TO_INT 0x0004
#define ATTR_HEX_INT 0x0008 #define ATTR_HEX_INT 0x0008
#define ATTR_REMOVE_COMMA 0x0010 #define ATTR_REMOVE_COMMA 0x0010
#define ATTR_NO_NULL 0x0020
...@@ -702,15 +702,19 @@ static HRESULT WINAPI HTMLStyle6_get_counterReset(IHTMLStyle6 *iface, BSTR *p) ...@@ -702,15 +702,19 @@ static HRESULT WINAPI HTMLStyle6_get_counterReset(IHTMLStyle6 *iface, BSTR *p)
static HRESULT WINAPI HTMLStyle6_put_outline(IHTMLStyle6 *iface, BSTR v) static HRESULT WINAPI HTMLStyle6_put_outline(IHTMLStyle6 *iface, BSTR v)
{ {
HTMLStyle *This = impl_from_IHTMLStyle6(iface); HTMLStyle *This = impl_from_IHTMLStyle6(iface);
FIXME("(%p)->(%s)\n", This, debugstr_w(v));
return E_NOTIMPL; TRACE("(%p)->(%s)\n", This, debugstr_w(v));
return set_nsstyle_attr(This->nsstyle, STYLEID_OUTLINE, v, 0);
} }
static HRESULT WINAPI HTMLStyle6_get_outline(IHTMLStyle6 *iface, BSTR *p) static HRESULT WINAPI HTMLStyle6_get_outline(IHTMLStyle6 *iface, BSTR *p)
{ {
HTMLStyle *This = impl_from_IHTMLStyle6(iface); HTMLStyle *This = impl_from_IHTMLStyle6(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL; TRACE("(%p)->(%p)\n", This, p);
return get_nsstyle_attr(This->nsstyle, STYLEID_OUTLINE, p, ATTR_NO_NULL);
} }
static HRESULT WINAPI HTMLStyle6_put_outlineWidth(IHTMLStyle6 *iface, VARIANT v) static HRESULT WINAPI HTMLStyle6_put_outlineWidth(IHTMLStyle6 *iface, VARIANT v)
......
...@@ -37,6 +37,13 @@ static int strcmp_wa(LPCWSTR strw, const char *stra) ...@@ -37,6 +37,13 @@ static int strcmp_wa(LPCWSTR strw, const char *stra)
return lstrcmpA(stra, buf); return lstrcmpA(stra, buf);
} }
static BOOL wstr_contains(const WCHAR *strw, const char *stra)
{
CHAR buf[512];
WideCharToMultiByte(CP_ACP, 0, strw, -1, buf, sizeof(buf), NULL, NULL);
return strstr(buf, stra) != NULL;
}
static BSTR a2bstr(const char *str) static BSTR a2bstr(const char *str)
{ {
BSTR ret; BSTR ret;
...@@ -464,11 +471,35 @@ static void test_style4(IHTMLStyle4 *style4) ...@@ -464,11 +471,35 @@ static void test_style4(IHTMLStyle4 *style4)
VariantClear(&vdefault); VariantClear(&vdefault);
} }
static void test_style6(IHTMLStyle6 *style)
{
BSTR str;
HRESULT hres;
str = (void*)0xdeadbeef;
hres = IHTMLStyle6_get_outline(style, &str);
ok(hres == S_OK, "get_outline failed: %08x\n", hres);
ok(str && !*str, "outline = %s\n", wine_dbgstr_w(str));
SysFreeString(str);
str = a2bstr("1px");
hres = IHTMLStyle6_put_outline(style, str);
ok(hres == S_OK, "put_outline failed: %08x\n", hres);
SysFreeString(str);
str = (void*)0xdeadbeef;
hres = IHTMLStyle6_get_outline(style, &str);
ok(hres == S_OK, "get_outline failed: %08x\n", hres);
ok(wstr_contains(str, "1px"), "outline = %s\n", wine_dbgstr_w(str));
SysFreeString(str);
}
static void test_body_style(IHTMLStyle *style) static void test_body_style(IHTMLStyle *style)
{ {
IHTMLStyle2 *style2; IHTMLStyle2 *style2;
IHTMLStyle3 *style3; IHTMLStyle3 *style3;
IHTMLStyle4 *style4; IHTMLStyle4 *style4;
IHTMLStyle6 *style6;
VARIANT_BOOL b; VARIANT_BOOL b;
VARIANT v; VARIANT v;
BSTR str; BSTR str;
...@@ -2064,6 +2095,14 @@ static void test_body_style(IHTMLStyle *style) ...@@ -2064,6 +2095,14 @@ static void test_body_style(IHTMLStyle *style)
test_style4(style4); test_style4(style4);
IHTMLStyle4_Release(style4); IHTMLStyle4_Release(style4);
} }
hres = IHTMLStyle_QueryInterface(style, &IID_IHTMLStyle6, (void**)&style6);
if(SUCCEEDED(hres)) {
test_style6(style6);
IHTMLStyle6_Release(style6);
}else {
win_skip("IHTMLStyle6 not available\n");
}
} }
#define test_style_filter(a,b) _test_style_filter(__LINE__,a,b) #define test_style_filter(a,b) _test_style_filter(__LINE__,a,b)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment