winehq.org
Sign In
Sign Up
Sign In
Sign Up
Manage this list
×
Keyboard Shortcuts
Thread View
j
: Next unread message
k
: Previous unread message
j a
: Jump to all threads
j l
: Jump to MailingList overview
2025
February
January
2024
December
November
October
September
August
July
June
May
April
March
February
January
2023
December
November
October
September
August
July
June
May
April
March
February
January
2022
December
November
October
September
August
July
June
May
April
March
February
January
2021
December
November
October
September
August
July
June
May
April
March
February
January
2020
December
November
October
September
August
July
June
May
April
March
February
January
2019
December
November
October
September
August
July
June
May
April
March
February
January
2018
December
November
October
September
August
July
June
May
April
March
February
January
2017
December
November
October
September
August
July
June
May
April
March
February
January
2016
December
November
October
September
August
July
June
May
April
March
February
January
2015
December
November
October
September
August
July
June
May
April
March
February
January
2014
December
November
October
September
August
July
June
May
April
March
February
January
2013
December
November
October
September
August
July
June
May
April
March
February
January
2012
December
November
October
September
August
July
June
May
April
March
February
January
2011
December
November
October
September
August
July
June
May
April
March
February
January
2010
December
November
October
September
August
July
June
May
April
March
February
January
2009
December
November
October
September
August
July
June
May
April
March
February
January
2008
December
November
October
September
August
July
June
May
April
March
February
January
2007
December
November
October
September
August
July
June
May
April
March
February
January
2006
December
November
October
September
August
July
June
May
April
March
February
January
2005
December
November
October
September
August
July
June
May
April
March
February
January
2004
December
November
October
September
August
July
June
May
April
March
February
January
2003
December
November
October
September
August
July
June
May
April
March
February
January
2002
December
November
October
September
August
July
June
May
April
March
February
January
2001
December
November
October
September
August
July
June
May
April
March
February
List overview
wine-commits
June 2012
----- 2025 -----
February 2025
January 2025
----- 2024 -----
December 2024
November 2024
October 2024
September 2024
August 2024
July 2024
June 2024
May 2024
April 2024
March 2024
February 2024
January 2024
----- 2023 -----
December 2023
November 2023
October 2023
September 2023
August 2023
July 2023
June 2023
May 2023
April 2023
March 2023
February 2023
January 2023
----- 2022 -----
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
----- 2021 -----
December 2021
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
May 2021
April 2021
March 2021
February 2021
January 2021
----- 2020 -----
December 2020
November 2020
October 2020
September 2020
August 2020
July 2020
June 2020
May 2020
April 2020
March 2020
February 2020
January 2020
----- 2019 -----
December 2019
November 2019
October 2019
September 2019
August 2019
July 2019
June 2019
May 2019
April 2019
March 2019
February 2019
January 2019
----- 2018 -----
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
May 2018
April 2018
March 2018
February 2018
January 2018
----- 2017 -----
December 2017
November 2017
October 2017
September 2017
August 2017
July 2017
June 2017
May 2017
April 2017
March 2017
February 2017
January 2017
----- 2016 -----
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
----- 2015 -----
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
----- 2014 -----
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
----- 2013 -----
December 2013
November 2013
October 2013
September 2013
August 2013
July 2013
June 2013
May 2013
April 2013
March 2013
February 2013
January 2013
----- 2012 -----
December 2012
November 2012
October 2012
September 2012
August 2012
July 2012
June 2012
May 2012
April 2012
March 2012
February 2012
January 2012
----- 2011 -----
December 2011
November 2011
October 2011
September 2011
August 2011
July 2011
June 2011
May 2011
April 2011
March 2011
February 2011
January 2011
----- 2010 -----
December 2010
November 2010
October 2010
September 2010
August 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
----- 2009 -----
December 2009
November 2009
October 2009
September 2009
August 2009
July 2009
June 2009
May 2009
April 2009
March 2009
February 2009
January 2009
----- 2008 -----
December 2008
November 2008
October 2008
September 2008
August 2008
July 2008
June 2008
May 2008
April 2008
March 2008
February 2008
January 2008
----- 2007 -----
December 2007
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
February 2007
January 2007
----- 2006 -----
December 2006
November 2006
October 2006
September 2006
August 2006
July 2006
June 2006
May 2006
April 2006
March 2006
February 2006
January 2006
----- 2005 -----
December 2005
November 2005
October 2005
September 2005
August 2005
July 2005
June 2005
May 2005
April 2005
March 2005
February 2005
January 2005
----- 2004 -----
December 2004
November 2004
October 2004
September 2004
August 2004
July 2004
June 2004
May 2004
April 2004
March 2004
February 2004
January 2004
----- 2003 -----
December 2003
November 2003
October 2003
September 2003
August 2003
July 2003
June 2003
May 2003
April 2003
March 2003
February 2003
January 2003
----- 2002 -----
December 2002
November 2002
October 2002
September 2002
August 2002
July 2002
June 2002
May 2002
April 2002
March 2002
February 2002
January 2002
----- 2001 -----
December 2001
November 2001
October 2001
September 2001
August 2001
July 2001
June 2001
May 2001
April 2001
March 2001
February 2001
wine-commits@winehq.org
3 participants
827 discussions
Start a n
N
ew thread
Jacek Caban : jscript: Use num_set_int where possible.
by Alexandre Julliard
20 Jun '12
20 Jun '12
Module: wine Branch: master Commit: 1532037bcd2ee318a7f0e90aa55c85cf5cd29a1d URL:
http://source.winehq.org/git/wine.git/?a=commit;h=1532037bcd2ee318a7f0e90aa…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Wed Jun 20 11:18:59 2012 +0200 jscript: Use num_set_int where possible. --- dlls/jscript/engine.c | 6 ++---- dlls/jscript/error.c | 3 +-- dlls/jscript/function.c | 9 +++------ dlls/jscript/global.c | 18 ++++++------------ dlls/jscript/number.c | 6 ++---- dlls/jscript/regexp.c | 13 +++++-------- dlls/jscript/string.c | 42 ++++++++++++++---------------------------- 7 files changed, 33 insertions(+), 64 deletions(-) diff --git a/dlls/jscript/engine.c b/dlls/jscript/engine.c index 0b97fdd..8117cb5 100644 --- a/dlls/jscript/engine.c +++ b/dlls/jscript/engine.c @@ -2030,16 +2030,14 @@ static HRESULT equal_values(script_ctx_t *ctx, VARIANT *lval, VARIANT *rval, jse if(V_VT(rval) == VT_BOOL) { VARIANT v; - V_VT(&v) = VT_I4; - V_I4(&v) = V_BOOL(rval) ? 1 : 0; + num_set_int(&v, V_BOOL(rval) ? 1 : 0); return equal_values(ctx, lval, &v, ei, ret); } if(V_VT(lval) == VT_BOOL) { VARIANT v; - V_VT(&v) = VT_I4; - V_I4(&v) = V_BOOL(lval) ? 1 : 0; + num_set_int(&v, V_BOOL(lval) ? 1 : 0); return equal_values(ctx, &v, rval, ei, ret); } diff --git a/dlls/jscript/error.c b/dlls/jscript/error.c index 00560db..3111714 100644 --- a/dlls/jscript/error.c +++ b/dlls/jscript/error.c @@ -199,8 +199,7 @@ static HRESULT create_error(script_ctx_t *ctx, jsdisp_t *constr, if(FAILED(hres)) return hres; - V_VT(&v) = VT_I4; - V_I4(&v) = number; + num_set_int(&v, number); hres = jsdisp_propput_name(err, numberW, &v, NULL/*FIXME*/); if(FAILED(hres)) { jsdisp_release(err); diff --git a/dlls/jscript/function.c b/dlls/jscript/function.c index 31d3be3..cfd57a7 100644 --- a/dlls/jscript/function.c +++ b/dlls/jscript/function.c @@ -133,8 +133,7 @@ static HRESULT create_arguments(script_ctx_t *ctx, IDispatch *calee, DISPPARAMS } if(SUCCEEDED(hres)) { - V_VT(&var) = VT_I4; - V_I4(&var) = arg_cnt(dp); + num_set_int(&var, arg_cnt(dp)); hres = jsdisp_propput_name(args, lengthW, &var, ei); if(SUCCEEDED(hres)) { @@ -315,8 +314,7 @@ static HRESULT Function_length(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, D switch(flags) { case DISPATCH_PROPERTYGET: - V_VT(retv) = VT_I4; - V_I4(retv) = This->length; + num_set_int(retv, This->length); break; default: FIXME("unimplemented flags %x\n", flags); @@ -635,8 +633,7 @@ HRESULT create_builtin_function(script_ctx_t *ctx, builtin_invoke_t value_proc, if(builtin_info) { VARIANT var; - V_VT(&var) = VT_I4; - V_I4(&var) = function->length; + num_set_int(&var, function->length); hres = jsdisp_propput_const(&function->dispex, lengthW, &var); } diff --git a/dlls/jscript/global.c b/dlls/jscript/global.c index 3732b65..c01b082 100644 --- a/dlls/jscript/global.c +++ b/dlls/jscript/global.c @@ -745,10 +745,8 @@ static HRESULT JSGlobal_ScriptEngineMajorVersion(script_ctx_t *ctx, vdisp_t *jst { TRACE("\n"); - if(retv) { - V_VT(retv) = VT_I4; - V_I4(retv) = JSCRIPT_MAJOR_VERSION; - } + if(retv) + num_set_int(retv, JSCRIPT_MAJOR_VERSION); return S_OK; } @@ -757,10 +755,8 @@ static HRESULT JSGlobal_ScriptEngineMinorVersion(script_ctx_t *ctx, vdisp_t *jst { TRACE("\n"); - if(retv) { - V_VT(retv) = VT_I4; - V_I4(retv) = JSCRIPT_MINOR_VERSION; - } + if(retv) + num_set_int(retv, JSCRIPT_MINOR_VERSION); return S_OK; } @@ -769,10 +765,8 @@ static HRESULT JSGlobal_ScriptEngineBuildVersion(script_ctx_t *ctx, vdisp_t *jst { TRACE("\n"); - if(retv) { - V_VT(retv) = VT_I4; - V_I4(retv) = JSCRIPT_BUILD_VERSION; - } + if(retv) + num_set_int(retv, JSCRIPT_BUILD_VERSION); return S_OK; } diff --git a/dlls/jscript/number.c b/dlls/jscript/number.c index 8f6eeab..3d2283a 100644 --- a/dlls/jscript/number.c +++ b/dlls/jscript/number.c @@ -554,10 +554,8 @@ static HRESULT NumberConstr_value(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags switch(flags) { case INVOKE_FUNC: if(!arg_cnt(dp)) { - if(retv) { - V_VT(retv) = VT_I4; - V_I4(retv) = 0; - } + if(retv) + num_set_int(retv, 0); return S_OK; } diff --git a/dlls/jscript/regexp.c b/dlls/jscript/regexp.c index f5a987e..399635e 100644 --- a/dlls/jscript/regexp.c +++ b/dlls/jscript/regexp.c @@ -3606,13 +3606,12 @@ static HRESULT create_match_array(script_ctx_t *ctx, BSTR input, const match_res } while(SUCCEEDED(hres)) { - V_VT(&var) = VT_I4; - V_I4(&var) = result->str-input; + num_set_int(&var, result->str-input); hres = jsdisp_propput_name(array, indexW, &var, ei); if(FAILED(hres)) break; - V_I4(&var) = result->str-input+result->len; + num_set_int(&var, result->str-input+result->len); hres = jsdisp_propput_name(array, lastIndexW, &var, ei); if(FAILED(hres)) break; @@ -3862,8 +3861,7 @@ HRESULT create_regexp(script_ctx_t *ctx, const WCHAR *exp, int len, DWORD flags, return E_FAIL; } - V_VT(®exp->last_index_var) = VT_I4; - V_I4(®exp->last_index_var) = 0; + num_set_int(®exp->last_index_var, 0); *ret = ®exp->dispex; return S_OK; @@ -3990,13 +3988,12 @@ HRESULT regexp_string_match(script_ctx_t *ctx, jsdisp_t *re, BSTR str, } while(SUCCEEDED(hres)) { - V_VT(&var) = VT_I4; - V_I4(&var) = match_result[match_cnt-1].str-str; + num_set_int(&var, match_result[match_cnt-1].str-str); hres = jsdisp_propput_name(array, indexW, &var, ei); if(FAILED(hres)) break; - V_I4(&var) = match_result[match_cnt-1].str-str+match_result[match_cnt-1].len; + num_set_int(&var, match_result[match_cnt-1].str-str+match_result[match_cnt-1].len); hres = jsdisp_propput_name(array, lastIndexW, &var, ei); if(FAILED(hres)) break; diff --git a/dlls/jscript/string.c b/dlls/jscript/string.c index d1142ff..2adc605 100644 --- a/dlls/jscript/string.c +++ b/dlls/jscript/string.c @@ -111,8 +111,7 @@ static HRESULT String_length(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, DIS case DISPATCH_PROPERTYGET: { StringInstance *string = string_from_vdisp(jsthis); - V_VT(retv) = VT_I4; - V_I4(retv) = string->length; + num_set_int(retv, string->length); break; } default: @@ -368,10 +367,8 @@ static HRESULT String_charCodeAt(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, idx = d; } - if(retv) { - V_VT(retv) = VT_I4; - V_I4(retv) = str[idx]; - } + if(retv) + num_set_int(retv, str[idx]); SysFreeString(val_str); return S_OK; @@ -476,10 +473,8 @@ static HRESULT String_indexOf(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, DI return hres; if(!arg_cnt(dp)) { - if(retv) { - V_VT(retv) = VT_I4; - V_I4(retv) = -1; - } + if(retv) + num_set_int(retv, -1); SysFreeString(val_str); return S_OK; } @@ -513,10 +508,8 @@ static HRESULT String_indexOf(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, DI if(FAILED(hres)) return hres; - if(retv) { - V_VT(retv) = VT_I4; - V_I4(retv) = ret; - } + if(retv) + num_set_int(retv, ret); return S_OK; } @@ -544,10 +537,8 @@ static HRESULT String_lastIndexOf(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags return hres; if(!arg_cnt(dp)) { - if(retv) { - V_VT(retv) = VT_I4; - V_I4(retv) = -1; - } + if(retv) + num_set_int(retv, -1); SysFreeString(val_str); return S_OK; } @@ -586,10 +577,8 @@ static HRESULT String_lastIndexOf(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags if(FAILED(hres)) return hres; - if(retv) { - V_VT(retv) = VT_I4; - V_I4(retv) = ret; - } + if(retv) + num_set_int(retv, ret); return S_OK; } @@ -729,8 +718,7 @@ static HRESULT rep_call(script_ctx_t *ctx, jsdisp_t *func, const WCHAR *str, mat if(SUCCEEDED(hres)) { arg = get_arg(&dp,parens_cnt+1); - V_VT(arg) = VT_I4; - V_I4(arg) = match->str - str; + num_set_int(arg, match->str - str); arg = get_arg(&dp,parens_cnt+2); V_VT(arg) = VT_BSTR; @@ -1046,10 +1034,8 @@ static HRESULT String_search(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, DIS if(FAILED(hres)) return hres; - if(retv) { - V_VT(retv) = VT_I4; - V_I4(retv) = hres == S_OK ? match.str-str : -1; - } + if(retv) + num_set_int(retv, hres == S_OK ? match.str-str : -1); return S_OK; }
1
0
0
0
Jacek Caban : jscript: Use num_set_int in array.c.
by Alexandre Julliard
20 Jun '12
20 Jun '12
Module: wine Branch: master Commit: 7118e6fbbbdd58c2270c45a3a0ba5c323713ef8a URL:
http://source.winehq.org/git/wine.git/?a=commit;h=7118e6fbbbdd58c2270c45a3a…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Wed Jun 20 11:18:42 2012 +0200 jscript: Use num_set_int in array.c. --- dlls/jscript/array.c | 27 +++++++++------------------ 1 files changed, 9 insertions(+), 18 deletions(-) diff --git a/dlls/jscript/array.c b/dlls/jscript/array.c index 5ff6344..91a7b82 100644 --- a/dlls/jscript/array.c +++ b/dlls/jscript/array.c @@ -97,8 +97,7 @@ static HRESULT set_length(jsdisp_t *obj, jsexcept_t *ei, DWORD length) return S_OK; } - V_VT(&var) = VT_I4; - V_I4(&var) = length; + num_set_int(&var, length); return jsdisp_propput_name(obj, lengthW, &var, ei); } @@ -126,8 +125,7 @@ static HRESULT Array_length(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, DISP switch(flags) { case DISPATCH_PROPERTYGET: - V_VT(retv) = VT_I4; - V_I4(retv) = This->length; + num_set_int(retv, This->length); break; case DISPATCH_PROPERTYPUT: { DOUBLE len = -1; @@ -448,10 +446,8 @@ static HRESULT Array_push(script_ctx_t *ctx, vdisp_t *vthis, WORD flags, DISPPAR if(FAILED(hres)) return hres; - if(retv) { - V_VT(retv) = VT_I4; - V_I4(retv) = length+n; - } + if(retv) + num_set_int(retv, length+n); return S_OK; } @@ -909,9 +905,7 @@ static HRESULT Array_splice(script_ctx_t *ctx, vdisp_t *vthis, WORD flags, DISPP } if(SUCCEEDED(hres)) { - V_VT(&v) = VT_I4; - V_I4(&v) = delete_cnt; - + num_set_int(&v, delete_cnt); hres = jsdisp_propput_name(ret_array, lengthW, &v, ei); } } @@ -941,8 +935,7 @@ static HRESULT Array_splice(script_ctx_t *ctx, vdisp_t *vthis, WORD flags, DISPP hres = jsdisp_propput_idx(jsthis, start+i, get_arg(dp,i+2), ei); if(SUCCEEDED(hres)) { - V_VT(&v) = VT_I4; - V_I4(&v) = length-delete_cnt+add_args; + num_set_int(&v, length-delete_cnt+add_args); hres = jsdisp_propput_name(jsthis, lengthW, &v, ei); } @@ -1036,12 +1029,10 @@ static HRESULT Array_unshift(script_ctx_t *ctx, vdisp_t *vthis, WORD flags, DISP } if(retv) { - if(ctx->version < 2) { + if(ctx->version < 2) V_VT(retv) = VT_EMPTY; - }else { - V_VT(retv) = VT_I4; - V_I4(retv) = length; - } + else + num_set_int(retv, length); } return S_OK; }
1
0
0
0
Jacek Caban : jscript: Always store numeric literals as double.
by Alexandre Julliard
20 Jun '12
20 Jun '12
Module: wine Branch: master Commit: 4cfab07748f4187ea71941ddebd40f890b798dea URL:
http://source.winehq.org/git/wine.git/?a=commit;h=4cfab07748f4187ea71941dde…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Wed Jun 20 11:18:22 2012 +0200 jscript: Always store numeric literals as double. --- dlls/jscript/compile.c | 5 --- dlls/jscript/engine.c | 5 +-- dlls/jscript/engine.h | 2 - dlls/jscript/lex.c | 73 +++++++++++------------------------------------ 4 files changed, 18 insertions(+), 67 deletions(-) diff --git a/dlls/jscript/compile.c b/dlls/jscript/compile.c index d3deccd..f3c1df1 100644 --- a/dlls/jscript/compile.c +++ b/dlls/jscript/compile.c @@ -712,8 +712,6 @@ static HRESULT compile_literal(compiler_ctx_t *ctx, literal_t *literal) return push_instr_int(ctx, OP_bool, literal->u.bval); case LT_DOUBLE: return push_instr_double(ctx, OP_double, literal->u.dval); - case LT_INT: - return push_instr_int(ctx, OP_int, literal->u.lval); case LT_NULL: return push_instr(ctx, OP_null) ? S_OK : E_OUTOFMEMORY; case LT_STRING: @@ -748,9 +746,6 @@ static HRESULT literal_as_bstr(compiler_ctx_t *ctx, literal_t *literal, BSTR *st case LT_STRING: *str = compiler_alloc_bstr(ctx, literal->u.wstr); break; - case LT_INT: - *str = int_to_bstr(literal->u.lval); - break; case LT_DOUBLE: return double_to_bstr(literal->u.dval, str); default: diff --git a/dlls/jscript/engine.c b/dlls/jscript/engine.c index 1ed1c97..0b97fdd 100644 --- a/dlls/jscript/engine.c +++ b/dlls/jscript/engine.c @@ -1185,13 +1185,10 @@ static HRESULT interp_int(exec_ctx_t *ctx) static HRESULT interp_double(exec_ctx_t *ctx) { const double arg = get_op_double(ctx); - VARIANT v; TRACE("%lf\n", arg); - V_VT(&v) = VT_R8; - V_R8(&v) = arg; - return stack_push(ctx, &v); + return stack_push_number(ctx, arg); } /* ECMA-262 3rd Edition 7.8.4 */ diff --git a/dlls/jscript/engine.h b/dlls/jscript/engine.h index fabf840..d0dec0d 100644 --- a/dlls/jscript/engine.h +++ b/dlls/jscript/engine.h @@ -248,7 +248,6 @@ HRESULT exec_source(exec_ctx_t*,bytecode_t*,function_code_t*,BOOL,jsexcept_t*,VA HRESULT create_source_function(script_ctx_t*,bytecode_t*,function_code_t*,scope_chain_t*,jsdisp_t**) DECLSPEC_HIDDEN; typedef enum { - LT_INT, LT_DOUBLE, LT_STRING, LT_BOOL, @@ -259,7 +258,6 @@ typedef enum { typedef struct { literal_type_t type; union { - LONG lval; double dval; const WCHAR *wstr; VARIANT_BOOL bval; diff --git a/dlls/jscript/lex.c b/dlls/jscript/lex.c index 06d0b89..d2b87ac 100644 --- a/dlls/jscript/lex.c +++ b/dlls/jscript/lex.c @@ -376,16 +376,6 @@ static int parse_string_literal(parser_ctx_t *ctx, const WCHAR **ret, WCHAR endc return tStringLiteral; } -static literal_t *new_int_literal(parser_ctx_t *ctx, LONG l) -{ - literal_t *ret = parser_alloc(ctx, sizeof(literal_t)); - - ret->type = LT_INT; - ret->u.lval = l; - - return ret; -} - static literal_t *new_double_literal(parser_ctx_t *ctx, DOUBLE d) { literal_t *ret = parser_alloc(ctx, sizeof(literal_t)); @@ -410,12 +400,6 @@ static int parse_double_literal(parser_ctx_t *ctx, LONG int_part, literal_t **li LONGLONG d, hlp; int exp = 0; - if(ctx->ptr == ctx->end || (!isdigitW(*ctx->ptr) && - *ctx->ptr!='.' && *ctx->ptr!='e' && *ctx->ptr!='E')) { - ERR("Illegal character\n"); - return 0; - } - d = int_part; while(ctx->ptr < ctx->end && isdigitW(*ctx->ptr)) { hlp = d*10 + *(ctx->ptr++) - '0'; @@ -431,18 +415,20 @@ static int parse_double_literal(parser_ctx_t *ctx, LONG int_part, literal_t **li ctx->ptr++; } - if(*ctx->ptr == '.') ctx->ptr++; + if(*ctx->ptr == '.') { + ctx->ptr++; - while(ctx->ptr < ctx->end && isdigitW(*ctx->ptr)) { - hlp = d*10 + *(ctx->ptr++) - '0'; - if(d>LONGLONG_MAX/10 || hlp<0) - break; + while(ctx->ptr < ctx->end && isdigitW(*ctx->ptr)) { + hlp = d*10 + *(ctx->ptr++) - '0'; + if(d>LONGLONG_MAX/10 || hlp<0) + break; - d = hlp; - exp--; + d = hlp; + exp--; + } + while(ctx->ptr < ctx->end && isdigitW(*ctx->ptr)) + ctx->ptr++; } - while(ctx->ptr < ctx->end && isdigitW(*ctx->ptr)) - ctx->ptr++; if(ctx->ptr < ctx->end && (*ctx->ptr == 'e' || *ctx->ptr == 'E')) { int sign = 1, e = 0; @@ -485,11 +471,6 @@ static int parse_numeric_literal(parser_ctx_t *ctx, literal_t **literal) LONG l, d; l = *ctx->ptr++ - '0'; - if(ctx->ptr == ctx->end) { - *literal = new_int_literal(ctx, l); - return tNumericLiteral; - } - if(!l) { if(*ctx->ptr == 'x' || *ctx->ptr == 'X') { if(++ctx->ptr == ctx->end) { @@ -507,42 +488,22 @@ static int parse_numeric_literal(parser_ctx_t *ctx, literal_t **literal) return lex_error(ctx, E_FAIL); } - *literal = new_int_literal(ctx, l); + *literal = new_double_literal(ctx, l); return tNumericLiteral; } - if(isdigitW(*ctx->ptr) || is_identifier_char(*ctx->ptr)) { + if(is_identifier_char(*ctx->ptr)) { WARN("wrong char after zero\n"); return lex_error(ctx, E_FAIL); } - *literal = new_int_literal(ctx, 0); - } - - while(ctx->ptr < ctx->end && isdigitW(*ctx->ptr)) - { - d = l*10 + *(ctx->ptr)-'0'; - - /* Check for integer overflow */ - if (l > INT_MAX/10 || d < 0) - return parse_double_literal(ctx, l, literal); - - l = d; - ctx->ptr++; - } - - if(ctx->ptr < ctx->end) { - if(*ctx->ptr == '.' || *ctx->ptr == 'e' || *ctx->ptr == 'E') - return parse_double_literal(ctx, l, literal); - - if(is_identifier_char(*ctx->ptr)) { - WARN("unexpected identifier char\n"); - return lex_error(ctx, E_FAIL); + if(isdigitW(*ctx->ptr)) { + FIXME("octal literals not implemented\n"); + return lex_error(ctx, E_NOTIMPL); } } - *literal = new_int_literal(ctx, l); - return tNumericLiteral; + return parse_double_literal(ctx, l, literal); } static int next_token(parser_ctx_t *ctx, void *lval)
1
0
0
0
Dmitry Timoshkov : windowscodecs: Implement MetadataHandler_GetValueByIndex .
by Alexandre Julliard
20 Jun '12
20 Jun '12
Module: wine Branch: master Commit: 0e55fb682f4f4085e516ef03002fecbe09114e65 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=0e55fb682f4f4085e516ef030…
Author: Dmitry Timoshkov <dmitry(a)baikal.ru> Date: Wed Jun 20 14:00:25 2012 +0900 windowscodecs: Implement MetadataHandler_GetValueByIndex. --- dlls/windowscodecs/metadatahandler.c | 28 +++++++++++++++++++++++++--- dlls/windowscodecs/tests/metadata.c | 6 ------ 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/dlls/windowscodecs/metadatahandler.c b/dlls/windowscodecs/metadatahandler.c index f8b8fcb..9f36d65 100644 --- a/dlls/windowscodecs/metadatahandler.c +++ b/dlls/windowscodecs/metadatahandler.c @@ -185,10 +185,32 @@ static HRESULT WINAPI MetadataHandler_GetCount(IWICMetadataWriter *iface, } static HRESULT WINAPI MetadataHandler_GetValueByIndex(IWICMetadataWriter *iface, - UINT nIndex, PROPVARIANT *pvarSchema, PROPVARIANT *pvarId, PROPVARIANT *pvarValue) + UINT index, PROPVARIANT *schema, PROPVARIANT *id, PROPVARIANT *value) { - FIXME("(%p,%u,%p,%p,%p): stub\n", iface, nIndex, pvarSchema, pvarId, pvarValue); - return E_NOTIMPL; + HRESULT hr = S_OK; + MetadataHandler *This = impl_from_IWICMetadataWriter(iface); + + TRACE("%p,%u,%p,%p,%p\n", iface, index, schema, id, value); + + EnterCriticalSection(&This->lock); + + if (index >= This->item_count) + { + LeaveCriticalSection(&This->lock); + return E_INVALIDARG; + } + + if (schema) + hr = PropVariantCopy(schema, &This->items[index].schema); + + if (SUCCEEDED(hr) && id) + hr = PropVariantCopy(id, &This->items[index].id); + + if (SUCCEEDED(hr) && value) + hr = PropVariantCopy(value, &This->items[index].value); + + LeaveCriticalSection(&This->lock); + return hr; } static HRESULT WINAPI MetadataHandler_GetValue(IWICMetadataWriter *iface, diff --git a/dlls/windowscodecs/tests/metadata.c b/dlls/windowscodecs/tests/metadata.c index e746c89..3c433bd 100644 --- a/dlls/windowscodecs/tests/metadata.c +++ b/dlls/windowscodecs/tests/metadata.c @@ -425,13 +425,7 @@ static void test_metadata_IFD(void) ok(hr == E_INVALIDARG, "GetMetadataFormat should fail\n"); hr = IWICMetadataReader_GetValueByIndex(reader, 0, NULL, NULL, NULL); -todo_wine ok(hr == S_OK, "GetValueByIndex error %#x\n", hr); - if (FAILED(hr)) - { - IWICMetadataReader_Release(reader); - return; - } hr = IWICMetadataReader_GetValueByIndex(reader, count - 1, NULL, NULL, NULL); ok(hr == S_OK, "GetValueByIndex error %#x\n", hr);
1
0
0
0
Dmitry Timoshkov : windowscodecs: Implement MetadataHandler_GetMetadataFormat.
by Alexandre Julliard
20 Jun '12
20 Jun '12
Module: wine Branch: master Commit: 75a88146338d409489682bbc88cfc54224a93812 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=75a88146338d409489682bbc8…
Author: Dmitry Timoshkov <dmitry(a)baikal.ru> Date: Wed Jun 20 14:00:17 2012 +0900 windowscodecs: Implement MetadataHandler_GetMetadataFormat. --- dlls/windowscodecs/metadatahandler.c | 28 +++++++++++++++++++--------- dlls/windowscodecs/tests/metadata.c | 2 -- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/dlls/windowscodecs/metadatahandler.c b/dlls/windowscodecs/metadatahandler.c index 80fd32d..f8b8fcb 100644 --- a/dlls/windowscodecs/metadatahandler.c +++ b/dlls/windowscodecs/metadatahandler.c @@ -133,15 +133,6 @@ static ULONG WINAPI MetadataHandler_Release(IWICMetadataWriter *iface) return ref; } -static HRESULT WINAPI MetadataHandler_GetMetadataFormat(IWICMetadataWriter *iface, - GUID *pguidMetadataFormat) -{ - if (!pguidMetadataFormat) return E_INVALIDARG; - - FIXME("(%p,%s): stub\n", iface, debugstr_guid(pguidMetadataFormat)); - return E_NOTIMPL; -} - static HRESULT WINAPI MetadataHandler_GetMetadataHandlerInfo(IWICMetadataWriter *iface, IWICMetadataHandlerInfo **ppIHandler) { @@ -161,6 +152,25 @@ static HRESULT WINAPI MetadataHandler_GetMetadataHandlerInfo(IWICMetadataWriter return hr; } +static HRESULT WINAPI MetadataHandler_GetMetadataFormat(IWICMetadataWriter *iface, + GUID *pguidMetadataFormat) +{ + HRESULT hr; + IWICMetadataHandlerInfo *metadata_info; + + TRACE("%p,%p\n", iface, pguidMetadataFormat); + + if (!pguidMetadataFormat) return E_INVALIDARG; + + hr = MetadataHandler_GetMetadataHandlerInfo(iface, &metadata_info); + if (FAILED(hr)) return hr; + + hr = IWICMetadataHandlerInfo_GetMetadataFormat(metadata_info, pguidMetadataFormat); + IWICMetadataHandlerInfo_Release(metadata_info); + + return hr; +} + static HRESULT WINAPI MetadataHandler_GetCount(IWICMetadataWriter *iface, UINT *pcCount) { diff --git a/dlls/windowscodecs/tests/metadata.c b/dlls/windowscodecs/tests/metadata.c index cf00f1f..e746c89 100644 --- a/dlls/windowscodecs/tests/metadata.c +++ b/dlls/windowscodecs/tests/metadata.c @@ -418,9 +418,7 @@ static void test_metadata_IFD(void) IWICEnumMetadataItem_Release(enumerator); hr = IWICMetadataReader_GetMetadataFormat(reader, &format); -todo_wine ok(hr == S_OK, "GetMetadataFormat error %#x\n", hr); -todo_wine ok(IsEqualGUID(&format, &GUID_MetadataFormatIfd), "unexpected format %s\n", debugstr_guid(&format)); hr = IWICMetadataReader_GetMetadataFormat(reader, NULL);
1
0
0
0
Dmitry Timoshkov : windowscodecs: Implement MetadataHandler_GetMetadataHandlerInfo.
by Alexandre Julliard
20 Jun '12
20 Jun '12
Module: wine Branch: master Commit: 27743c81a9ef2fe80c677891dba25e51cb0527d1 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=27743c81a9ef2fe80c677891d…
Author: Dmitry Timoshkov <dmitry(a)baikal.ru> Date: Wed Jun 20 14:00:08 2012 +0900 windowscodecs: Implement MetadataHandler_GetMetadataHandlerInfo. --- dlls/windowscodecs/info.c | 3 +++ dlls/windowscodecs/metadatahandler.c | 16 ++++++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/dlls/windowscodecs/info.c b/dlls/windowscodecs/info.c index 47cbc85..a2cc1a7 100644 --- a/dlls/windowscodecs/info.c +++ b/dlls/windowscodecs/info.c @@ -1618,7 +1618,10 @@ HRESULT CreateComponentInfo(REFCLSID clsid, IWICComponentInfo **ppIInfo) hr = HRESULT_FROM_WIN32(res); } else + { + FIXME("%s is not supported\n", wine_dbgstr_guid(clsid)); hr = E_FAIL; + } RegCloseKey(clsidkey); diff --git a/dlls/windowscodecs/metadatahandler.c b/dlls/windowscodecs/metadatahandler.c index 6433136..80fd32d 100644 --- a/dlls/windowscodecs/metadatahandler.c +++ b/dlls/windowscodecs/metadatahandler.c @@ -145,8 +145,20 @@ static HRESULT WINAPI MetadataHandler_GetMetadataFormat(IWICMetadataWriter *ifac static HRESULT WINAPI MetadataHandler_GetMetadataHandlerInfo(IWICMetadataWriter *iface, IWICMetadataHandlerInfo **ppIHandler) { - FIXME("(%p,%p): stub\n", iface, ppIHandler); - return E_NOTIMPL; + HRESULT hr; + IWICComponentInfo *component_info; + MetadataHandler *This = impl_from_IWICMetadataWriter(iface); + + TRACE("%p,%p\n", iface, ppIHandler); + + hr = CreateComponentInfo(This->vtable->clsid, &component_info); + if (FAILED(hr)) return hr; + + hr = IWICComponentInfo_QueryInterface(component_info, &IID_IWICMetadataHandlerInfo, + (void **)ppIHandler); + + IWICComponentInfo_Release(component_info); + return hr; } static HRESULT WINAPI MetadataHandler_GetCount(IWICMetadataWriter *iface,
1
0
0
0
Dmitry Timoshkov : windowscodecs: Add MetadataReaderInfo implementation.
by Alexandre Julliard
20 Jun '12
20 Jun '12
Module: wine Branch: master Commit: 8802a9a84cacc381507c752822ae33d5bfd0dcf1 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=8802a9a84cacc381507c75282…
Author: Dmitry Timoshkov <dmitry(a)baikal.ru> Date: Wed Jun 20 13:59:56 2012 +0900 windowscodecs: Add MetadataReaderInfo implementation. --- dlls/windowscodecs/info.c | 258 +++++++++++++++++++++++++++++++++++++++ dlls/windowscodecs/tests/info.c | 18 ++- 2 files changed, 269 insertions(+), 7 deletions(-) Diff:
http://source.winehq.org/git/wine.git/?a=commitdiff;h=8802a9a84cacc381507c7…
1
0
0
0
Dmitry Timoshkov : gdiplus: Implement GdipImageSelectActiveFrame.
by Alexandre Julliard
20 Jun '12
20 Jun '12
Module: wine Branch: master Commit: 755c19f3e710147f998a6278d369cc1d15f7d5a5 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=755c19f3e710147f998a6278d…
Author: Dmitry Timoshkov <dmitry(a)baikal.ru> Date: Wed Jun 20 13:45:39 2012 +0900 gdiplus: Implement GdipImageSelectActiveFrame. --- dlls/gdiplus/image.c | 114 ++++++++++++++++++++++++++++++++++++------- dlls/gdiplus/tests/image.c | 4 +- 2 files changed, 97 insertions(+), 21 deletions(-) diff --git a/dlls/gdiplus/image.c b/dlls/gdiplus/image.c index 7da052f..52b3750 100644 --- a/dlls/gdiplus/image.c +++ b/dlls/gdiplus/image.c @@ -1995,10 +1995,8 @@ static void move_bitmap(GpBitmap *dst, GpBitmap *src, BOOL clobber_palette) GdipFree(src); } -GpStatus WINGDIPAPI GdipDisposeImage(GpImage *image) +static GpStatus free_image_data(GpImage *image) { - TRACE("%p\n", image); - if(!image) return InvalidParameter; @@ -2033,6 +2031,18 @@ GpStatus WINGDIPAPI GdipDisposeImage(GpImage *image) if (image->stream) IStream_Release(image->stream); GdipFree(image->palette_entries); + + return Ok; +} + +GpStatus WINGDIPAPI GdipDisposeImage(GpImage *image) +{ + GpStatus status; + + TRACE("%p\n", image); + + status = free_image_data(image); + if (status != Ok) return status; image->type = ~0; GdipFree(image); @@ -2522,22 +2532,6 @@ GpStatus WINGDIPAPI GdipImageGetFrameDimensionsList(GpImage* image, return Ok; } -GpStatus WINGDIPAPI GdipImageSelectActiveFrame(GpImage *image, - GDIPCONST GUID* dimensionID, UINT frameidx) -{ - static int calls; - - TRACE("(%p, %s, %u)\n", image, debugstr_guid(dimensionID), frameidx); - - if(!image || !dimensionID) - return InvalidParameter; - - if(!(calls++)) - FIXME("not implemented\n"); - - return Ok; -} - GpStatus WINGDIPAPI GdipLoadImageFromFile(GDIPCONST WCHAR* filename, GpImage **image) { @@ -2862,6 +2856,88 @@ static GpStatus get_decoder_info(IStream* stream, const struct image_codec **res return GenericError; } +GpStatus WINGDIPAPI GdipImageSelectActiveFrame(GpImage *image, GDIPCONST GUID *dimensionID, + UINT frame) +{ + GpStatus stat; + LARGE_INTEGER seek; + HRESULT hr; + const struct image_codec *codec = NULL; + IStream *stream; + GpImage *new_image; + + TRACE("(%p,%s,%u)\n", image, debugstr_guid(dimensionID), frame); + + if (!image || !dimensionID) + return InvalidParameter; + + if (frame >= image->frame_count) + return InvalidParameter; + + if (image->type != ImageTypeBitmap && image->type != ImageTypeMetafile) + { + WARN("invalid image type %d\n", image->type); + return InvalidParameter; + } + + if (image->current_frame == frame) + return Ok; + + if (!image->stream) + { + TRACE("image doesn't have an associated stream\n"); + return Ok; + } + + hr = IStream_Clone(image->stream, &stream); + if (FAILED(hr)) + { + STATSTG statstg; + + hr = IStream_Stat(image->stream, &statstg, STATFLAG_NOOPEN); + if (FAILED(hr)) return hresult_to_status(hr); + + stat = GdipCreateStreamOnFile(statstg.pwcsName, GENERIC_READ, &stream); + if (stat != Ok) return stat; + } + + /* choose an appropriate image decoder */ + stat = get_decoder_info(stream, &codec); + if (stat != Ok) + { + IStream_Release(stream); + return stat; + } + + /* seek to the start of the stream */ + seek.QuadPart = 0; + hr = IStream_Seek(stream, seek, STREAM_SEEK_SET, NULL); + if (FAILED(hr)) + { + IStream_Release(stream); + return hresult_to_status(hr); + } + + /* call on the image decoder to do the real work */ + stat = codec->decode_func(stream, &codec->info.Clsid, frame, &new_image); + + if (stat == Ok) + { + memcpy(&new_image->format, &codec->info.FormatID, sizeof(GUID)); + free_image_data(image); + if (image->type == ImageTypeBitmap) + *(GpBitmap *)image = *(GpBitmap *)new_image; + else if (image->type == ImageTypeMetafile) + *(GpMetafile *)image = *(GpMetafile *)new_image; + new_image->type = ~0; + GdipFree(new_image); + return Ok; + } + + IStream_Release(stream); + return stat; +} + GpStatus WINGDIPAPI GdipLoadImageFromStream(IStream *source, GpImage **image) { GpStatus stat; diff --git a/dlls/gdiplus/tests/image.c b/dlls/gdiplus/tests/image.c index 635b633..84baaa3 100644 --- a/dlls/gdiplus/tests/image.c +++ b/dlls/gdiplus/tests/image.c @@ -2307,7 +2307,7 @@ static void test_multiframegif(void) color = 0xdeadbeef; GdipBitmapGetPixel(bmp, 0, 0, &color); expect(Ok, stat); - todo_wine expect(0xff000000, color); + expect(0xff000000, color); stat = GdipImageSelectActiveFrame((GpImage*)bmp, &dimension, 0); expect(Ok, stat); @@ -2338,7 +2338,7 @@ static void test_multiframegif(void) stat = GdipBitmapGetPixel(bmp, 0, 0, &color); expect(Ok, stat); - todo_wine expect(0xffffffff, color); + expect(0xffffffff, color); GdipDisposeImage((GpImage*)bmp); IStream_Release(stream);
1
0
0
0
Dan Kegel : gdi32: Add test for SelectClipRgn in metafiles, make it pass.
by Alexandre Julliard
20 Jun '12
20 Jun '12
Module: wine Branch: master Commit: b85270e3a57df29c49974cbc3616cef7bf62a62a URL:
http://source.winehq.org/git/wine.git/?a=commit;h=b85270e3a57df29c49974cbc3…
Author: Dan Kegel <dank(a)kegel.com> Date: Tue Jun 19 18:08:07 2012 -0700 gdi32: Add test for SelectClipRgn in metafiles, make it pass. --- dlls/gdi32/mfdrv/graphics.c | 6 +- dlls/gdi32/tests/metafile.c | 125 +++++++++++++++++++++++++++++++++++++++++- 2 files changed, 125 insertions(+), 6 deletions(-) diff --git a/dlls/gdi32/mfdrv/graphics.c b/dlls/gdi32/mfdrv/graphics.c index 439fca5..e26076f 100644 --- a/dlls/gdi32/mfdrv/graphics.c +++ b/dlls/gdi32/mfdrv/graphics.c @@ -321,9 +321,9 @@ static INT16 MFDRV_CreateRegion(PHYSDEV dev, HRGN hrgn) mr->rdParm[0] = 0; mr->rdParm[1] = 6; - mr->rdParm[2] = 0x1234; + mr->rdParm[2] = 0x2f6; mr->rdParm[3] = 0; - mr->rdParm[4] = (Param - mr->rdParm) * sizeof(WORD); + mr->rdParm[4] = (Param - &mr->rdFunction) * sizeof(WORD); mr->rdParm[5] = Bands; mr->rdParm[6] = MaxBands; mr->rdParm[7] = rgndata->rdh.rcBound.left; @@ -413,7 +413,7 @@ INT MFDRV_ExtSelectClipRgn( PHYSDEV dev, HRGN hrgn, INT mode ) if (!hrgn) return NULLREGION; iRgn = MFDRV_CreateRegion( dev, hrgn ); if(iRgn == -1) return ERROR; - ret = MFDRV_MetaParam1( dev, META_SELECTCLIPREGION, iRgn ) ? NULLREGION : ERROR; + ret = MFDRV_MetaParam1( dev, META_SELECTOBJECT, iRgn ) ? NULLREGION : ERROR; MFDRV_MetaParam1( dev, META_DELETEOBJECT, iRgn ); MFDRV_RemoveHandle( dev, iRgn ); return ret; diff --git a/dlls/gdi32/tests/metafile.c b/dlls/gdi32/tests/metafile.c index df263c3..e6bab5d 100644 --- a/dlls/gdi32/tests/metafile.c +++ b/dlls/gdi32/tests/metafile.c @@ -2492,6 +2492,124 @@ todo_wine DeleteDC(hdc); } +static const unsigned char MF_CLIP_BITS[] = { + /* METAHEADER */ + 0x01, 0x00, /* mtType */ + 0x09, 0x00, /* mtHeaderSize */ + 0x00, 0x03, /* mtVersion */ + 0x32, 0x00, 0x00, 0x00, /* mtSize */ + 0x01, 0x00, /* mtNoObjects */ + 0x14, 0x00, 0x00, 0x00, /* mtMaxRecord (size in words of longest record) */ + 0x00, 0x00, /* reserved */ + + /* METARECORD for CreateRectRgn(0x11, 0x22, 0x33, 0x44) */ + 0x14, 0x00, 0x00, 0x00, /* rdSize in words */ + 0xff, 0x06, /* META_CREATEREGION */ + 0x00, 0x00, 0x06, 0x00, 0xf6, 0x02, 0x00, 0x00, + 0x24, 0x00, 0x01, 0x00, 0x02, 0x00, 0x11, 0x00, + 0x22, 0x00, 0x33, 0x00, 0x44, 0x00, 0x02, 0x00, + 0x22, 0x00, 0x44, 0x00, 0x11, 0x00, 0x33, 0x00, + 0x02, 0x00, + + /* METARECORD for SelectObject */ + 0x04, 0x00, 0x00, 0x00, + 0x2d, 0x01, /* META_SELECTOBJECT (not META_SELECTCLIPREGION?!) */ + 0x00, 0x00, + + /* METARECORD */ + 0x04, 0x00, 0x00, 0x00, + 0xf0, 0x01, /* META_DELETEOBJECT */ + 0x00, 0x00, + + /* METARECORD for MoveTo(1,0x30) */ + 0x05, 0x00, 0x00, 0x00, /* rdSize in words */ + 0x14, 0x02, /* META_MOVETO */ + 0x30, 0x00, /* y */ + 0x01, 0x00, /* x */ + + /* METARECORD for LineTo(0x20, 0x30) */ + 0x05, 0x00, 0x00, 0x00, /* rdSize in words */ + 0x13, 0x02, /* META_LINETO */ + 0x30, 0x00, /* y */ + 0x20, 0x00, /* x */ + + /* EOF */ + 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00 +}; + +static int clip_mf_enum_proc_seen_selectclipregion; +static int clip_mf_enum_proc_seen_selectobject; + +static int CALLBACK clip_mf_enum_proc(HDC hdc, HANDLETABLE *handle_table, + METARECORD *mr, int n_objs, LPARAM param) +{ + switch (mr->rdFunction) { + case META_SELECTCLIPREGION: + clip_mf_enum_proc_seen_selectclipregion++; + break; + case META_SELECTOBJECT: + clip_mf_enum_proc_seen_selectobject++; + break; + } + return 1; +} + +static void test_mf_clipping(void) +{ + /* left top right bottom */ + static RECT rc_clip = { 0x11, 0x22, 0x33, 0x44 }; + HWND hwnd; + HDC hdc; + HMETAFILE hmf; + HRGN hrgn; + INT ret; + + SetLastError(0xdeadbeef); + hdc = CreateMetaFileA(NULL); + ok(hdc != 0, "CreateMetaFileA error %d\n", GetLastError()); + + hrgn = CreateRectRgn(rc_clip.left, rc_clip.top, rc_clip.right, rc_clip.bottom); + ret = SelectClipRgn(hdc, hrgn); + /* Seems like it should be SIMPLEREGION, but windows returns NULLREGION? */ + ok(ret == NULLREGION, "expected NULLREGION, got %d\n", ret); + + /* Draw a line that starts off left of the clip region and ends inside it */ + MoveToEx(hdc, 0x1, 0x30, NULL); + LineTo(hdc, 0x20, 0x30); + + SetLastError(0xdeadbeef); + hmf = CloseMetaFile(hdc); + ok(hmf != 0, "CloseMetaFile error %d\n", GetLastError()); + + if (compare_mf_bits(hmf, MF_CLIP_BITS, sizeof(MF_CLIP_BITS), + "mf_clipping") != 0) + { + dump_mf_bits(hmf, "mf_clipping"); + } + + DeleteObject(hrgn); + + hwnd = CreateWindowExA(0, "static", NULL, WS_POPUP | WS_VISIBLE, + 0, 0, 200, 200, 0, 0, 0, NULL); + ok(hwnd != 0, "CreateWindowExA error %d\n", GetLastError()); + + hdc = GetDC(hwnd); + + ret = EnumMetaFile(hdc, hmf, clip_mf_enum_proc, (LPARAM)&rc_clip); + ok(ret, "EnumMetaFile error %d\n", GetLastError()); + + /* Oddly, windows doesn't seem to use META_SELECTCLIPREGION */ + ok(clip_mf_enum_proc_seen_selectclipregion == 0, + "expected 0 selectclipregion, saw %d\n", clip_mf_enum_proc_seen_selectclipregion); + ok(clip_mf_enum_proc_seen_selectobject == 1, + "expected 1 selectobject, saw %d\n", clip_mf_enum_proc_seen_selectobject); + + DeleteMetaFile(hmf); + ReleaseDC(hwnd, hdc); + DestroyWindow(hwnd); +} + static INT CALLBACK EmfEnumProc(HDC hdc, HANDLETABLE *lpHTable, const ENHMETARECORD *lpEMFR, INT nObj, LPARAM lpData) { LPMETAFILEPICT lpMFP = (LPMETAFILEPICT)lpData; @@ -3205,6 +3323,9 @@ START_TEST(metafile) test_SaveDC(); test_emf_BitBlt(); test_emf_DCBrush(); + test_emf_ExtTextOut_on_path(); + test_emf_clipping(); + test_emf_polybezier(); /* For win-format metafiles (mfdrv) */ test_mf_SaveDC(); @@ -3215,9 +3336,7 @@ START_TEST(metafile) test_CopyMetaFile(); test_SetMetaFileBits(); test_mf_ExtTextOut_on_path(); - test_emf_ExtTextOut_on_path(); - test_emf_clipping(); - test_emf_polybezier(); + test_mf_clipping(); /* For metafile conversions */ test_mf_conversions();
1
0
0
0
Damjan Jovanovic : include/shlobj.h: Add some missing APIs.
by Alexandre Julliard
20 Jun '12
20 Jun '12
Module: wine Branch: master Commit: cc373eef2b4872c3873c1d2359dc770ed0056409 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=cc373eef2b4872c3873c1d235…
Author: Damjan Jovanovic <damjan.jov(a)gmail.com> Date: Wed Jun 20 09:07:48 2012 +0200 include/shlobj.h: Add some missing APIs. --- include/shlobj.h | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-) diff --git a/include/shlobj.h b/include/shlobj.h index 00b3422..103a1cf 100644 --- a/include/shlobj.h +++ b/include/shlobj.h @@ -74,6 +74,7 @@ HRESULT WINAPI SHPathPrepareForWriteW(HWND,IUnknown*,LPCWSTR,DWORD); #define SHPathPrepareForWrite WINELIB_NAME_AW(SHPathPrepareForWrite); UINT WINAPI SHReplaceFromPropSheetExtArray(HPSXA,UINT,LPFNADDPROPSHEETPAGE,LPARAM); LPITEMIDLIST WINAPI SHSimpleIDListFromPath(LPCWSTR); +BOOL WINAPI SHRunControlPanel(LPCWSTR, HWND); int WINAPI SHMapPIDLToSystemImageListIndex(IShellFolder*,LPCITEMIDLIST,int*); HRESULT WINAPI SHStartNetConnectionDialog(HWND,LPCSTR,DWORD); VOID WINAPI SHUpdateImageA(LPCSTR,INT,UINT,INT); @@ -81,9 +82,11 @@ VOID WINAPI SHUpdateImageW(LPCWSTR,INT,UINT,INT); #define SHUpdateImage WINELIB_NAME_AW(SHUpdateImage) int WINAPI RestartDialog(HWND,LPCWSTR,DWORD); int WINAPI RestartDialogEx(HWND,LPCWSTR,DWORD,DWORD); +int WINAPI DriveType(int); BOOL WINAPI IsUserAnAdmin(void); UINT WINAPI Shell_MergeMenus(HMENU,HMENU,UINT,UINT,UINT,ULONG); BOOL WINAPI Shell_GetImageLists(HIMAGELIST*,HIMAGELIST*); +BOOL WINAPI SignalFileOpen(PCIDLIST_ABSOLUTE); BOOL WINAPI ImportPrivacySettings(LPCWSTR, BOOL*, BOOL*); #define KF_FLAG_SIMPLE_IDLIST 0x00000100
1
0
0
0
← Newer
1
...
34
35
36
37
38
39
40
...
83
Older →
Jump to page:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
Results per page:
10
25
50
100
200