mshtml: Reimplement IHTMLStyle::put_backgroundPositionX using background-position property.

Current implementation can't work because backgroundPositionX is IE 
extension, not handled by Gecko.
This commit is contained in:
Jacek Caban 2011-02-25 14:11:52 +01:00 committed by Alexandre Julliard
parent fa946c09ce
commit be29542f29
1 changed files with 48 additions and 1 deletions

View File

@ -986,8 +986,55 @@ static HRESULT WINAPI HTMLStyle_get_backgroundPosition(IHTMLStyle *iface, BSTR *
static HRESULT WINAPI HTMLStyle_put_backgroundPositionX(IHTMLStyle *iface, VARIANT v)
{
HTMLStyle *This = impl_from_IHTMLStyle(iface);
WCHAR buf[14], *pos_val;
nsAString pos_str;
const WCHAR *val;
DWORD val_len;
HRESULT hres;
TRACE("(%p)->(v%d)\n", This, V_VT(&v));
return set_nsstyle_attr_var(This->nsstyle, STYLEID_BACKGROUND_POSITION_X, &v, 0);
hres = var_to_styleval(&v, buf, ATTR_FIX_PX, &val);
if(FAILED(hres))
return hres;
val_len = val ? strlenW(val) : 0;
nsAString_Init(&pos_str, NULL);
hres = get_nsstyle_attr_nsval(This->nsstyle, STYLEID_BACKGROUND_POSITION, &pos_str);
if(SUCCEEDED(hres)) {
const PRUnichar *pos, *posy;
DWORD posy_len;
nsAString_GetData(&pos_str, &pos);
posy = strchrW(pos, ' ');
if(!posy) {
static const WCHAR zero_pxW[] = {' ','0','p','x',0};
TRACE("no space in %s\n", debugstr_w(pos));
posy = zero_pxW;
}
posy_len = strlenW(posy);
pos_val = heap_alloc((val_len+posy_len+1)*sizeof(WCHAR));
if(pos_val) {
if(val_len)
memcpy(pos_val, val, val_len*sizeof(WCHAR));
if(posy_len)
memcpy(pos_val+val_len, posy, posy_len*sizeof(WCHAR));
pos_val[val_len+posy_len] = 0;
}else {
hres = E_OUTOFMEMORY;
}
}
nsAString_Finish(&pos_str);
if(FAILED(hres))
return hres;
TRACE("setting position to %s\n", debugstr_w(pos_val));
hres = set_nsstyle_attr(This->nsstyle, STYLEID_BACKGROUND_POSITION, pos_val, ATTR_FIX_PX);
heap_free(pos_val);
return hres;
}
static HRESULT WINAPI HTMLStyle_get_backgroundPositionX(IHTMLStyle *iface, VARIANT *p)