diff options
author | Dan Gudmundsson <[email protected]> | 2016-03-08 08:57:40 +0100 |
---|---|---|
committer | Dan Gudmundsson <[email protected]> | 2016-03-08 08:57:40 +0100 |
commit | 9bfbf4319a42be7572334b57c3e16864681c252c (patch) | |
tree | 24e81d691c2fe9e8d945415867239e2accc9e421 /lib/wx/api_gen/wx_gen_cpp.erl | |
parent | 2a44ac37f487001b551c0103ed0b4c5ab4579ff1 (diff) | |
parent | cd754f764825d71a5e5021c617a74d2dac211409 (diff) | |
download | otp-9bfbf4319a42be7572334b57c3e16864681c252c.tar.gz otp-9bfbf4319a42be7572334b57c3e16864681c252c.tar.bz2 otp-9bfbf4319a42be7572334b57c3e16864681c252c.zip |
Merge remote-tracking branch 'origin/dgud/wx/bugs' into maint
* origin/dgud/wx/bugs:
wx: Use wrapper classes where possible
wx: Wait before throwing away early callbacks to wx_objects
wx: Add wxWindow:SetTransparent and CanSetTransperant
wx: Add wxWindow SetDoubleBuffered and IsDoubleBuffered from wxWidgets 3.0
wx: Remove http_util usage
wx: Tiny optimization
wx: Fix a crash with sending two binaries to command queue
Diffstat (limited to 'lib/wx/api_gen/wx_gen_cpp.erl')
-rw-r--r-- | lib/wx/api_gen/wx_gen_cpp.erl | 36 |
1 files changed, 26 insertions, 10 deletions
diff --git a/lib/wx/api_gen/wx_gen_cpp.erl b/lib/wx/api_gen/wx_gen_cpp.erl index ed7b27f3bf..71b2038c56 100644 --- a/lib/wx/api_gen/wx_gen_cpp.erl +++ b/lib/wx/api_gen/wx_gen_cpp.erl @@ -116,8 +116,13 @@ taylormade_class(#class{name=CName, methods=Ms}) -> gen_constructors(#class{name=Class, methods=Ms0}) -> Ms = lists:append(Ms0), Cs = lists:filter(fun(#method{method_type=MT}) -> MT =:= constructor end, Ms), - [gen_constructor(Class, Const) || Const <- Cs]. - + [gen_constructor(Class, Const) || Const <- Cs], + case need_copy_constr(Class) of + true -> + w(" E~s(~s copy) : ~s(copy) {};~n", [Class, Class, Class]); + false -> + ignore + end. gen_constructor(_Class, #method{where=merged_c}) -> ok; gen_constructor(_Class, #method{where=erl_no_opt}) -> ok; gen_constructor(Class, _M=#method{params=Ps, opts=FOpts}) -> @@ -145,6 +150,14 @@ gen_constructor(Class, _M=#method{params=Ps, opts=FOpts}) -> Endif andalso w("#endif~n", []), ok. + +need_copy_constr("wxFont") -> true; +need_copy_constr("wxIcon") -> true; +need_copy_constr("wxImage") -> true; +need_copy_constr("wxBitmap") -> true; +%%need_copy_constr("wxGraphics" ++ _) -> true; +need_copy_constr(_) -> false. + gen_type(#type{name=Type, ref={pointer,1}, mod=Mod},_) -> mods(Mod) ++ to_string(Type) ++ " * "; gen_type(#type{name=Type, ref={pointer,2}, mod=Mod},_) -> @@ -805,18 +818,21 @@ return_res1(#type{name=Type,base={comp,_,_},single=array,by_val=true}) -> {Type ++ " Result = ", ""}; return_res1(#type{name=Type,single=true,by_val=true, base={class, _}}) -> %% Temporary memory leak !!!!!! - case Type of - "wxImage" -> ok; - "wxFont" -> ok; - "wxBitmap" -> ok; - "wxIcon" -> ok; - "wxGraphics" ++ _ -> ok; + case {need_copy_constr(Type),Type} of + {true, _} -> ok; + {_, "wxGraphics" ++ _} -> ok; _ -> io:format("~s::~s Building return value of temp ~s~n", [get(current_class),get(current_func),Type]) end, - {Type ++ " * Result = new " ++ Type ++ "(", "); newPtr((void *) Result," - ++ "3, memenv);"}; + case need_copy_constr(Type) of + true -> + {Type ++ " * Result = new E" ++ Type ++ "(", "); newPtr((void *) Result," + ++ "3, memenv);"}; + false -> + {Type ++ " * Result = new " ++ Type ++ "(", "); newPtr((void *) Result," + ++ "3, memenv);"} + end; return_res1(#type{base={enum,_Type},single=true,by_val=true}) -> {"int Result = " , ""}; return_res1(#type{name="wxCharBuffer", base={binary,_},single=true,by_val=true}) -> |