diff --git a/cimgui.h b/cimgui.h index ede29c1..69acd92 100644 --- a/cimgui.h +++ b/cimgui.h @@ -3818,7 +3818,6 @@ struct SDL_Window; typedef union SDL_Event SDL_Event; #endif // CIMGUI_DEFINE_ENUMS_AND_STRUCTS - #ifdef CIMGUI_DEFINE_ENUMS_AND_STRUCTS typedef struct ImTextureRef_c ImTextureRef; typedef struct ImVec2_c ImVec2; @@ -3860,6 +3859,8 @@ struct ImRect_c { ImVec2_c Max; }; #endif + + #ifndef CIMGUI_DEFINE_ENUMS_AND_STRUCTS typedef struct ImGuiTextFilter::ImGuiTextRange ImGuiTextRange; typedef ImStb::STB_TexteditState STB_TexteditState; diff --git a/generator/cimgui_template.h b/generator/cimgui_template.h index fc39b0b..3005e64 100644 --- a/generator/cimgui_template.h +++ b/generator/cimgui_template.h @@ -49,6 +49,7 @@ struct SDL_Window; typedef union SDL_Event SDL_Event; #endif // CIMGUI_DEFINE_ENUMS_AND_STRUCTS +PLACE_STRUCTS_C #include "auto_funcs.h" diff --git a/generator/cpp2ffi.lua b/generator/cpp2ffi.lua index fdd1968..c07cfad 100644 --- a/generator/cpp2ffi.lua +++ b/generator/cpp2ffi.lua @@ -1104,12 +1104,13 @@ local function get_nonPOD(FP) return nonPOD end local function recur_calc_depth(FP, structs, k,n) + --print("recur_calc_depth",k,n) local struct = structs[k] local n1 = n for i,field in ipairs(struct) do local typ = field.type:gsub("const ","") typ = typ:gsub("*","") - if FP.nP_used[typ] then + if k~=typ and FP.nP_used[typ] then n1 = math.max(n1,recur_calc_depth(FP, structs, typ,n+1)) end end @@ -1163,12 +1164,16 @@ local function gen_structs_c(FP) return table.concat(tabs_c,"\n").."\n"..table.concat(tabs,"\n") --return table.concat(tabs,"\n") end -local function gen_field_conversion(tab, struct, FP, prefix) +local function gen_field_conversion(tab, struct, FP, to,prefix) prefix = prefix or "" local structs = FP.structs_and_enums_table.structs for i,field in ipairs(struct) do + local ftype = field.type:gsub("*","") if FP.nP_used[field.type] then - gen_field_conversion(tab, structs[field.type],FP, prefix..field.name..".") + gen_field_conversion(tab, structs[field.type],FP, to,prefix..field.name..".") + elseif FP.nP_used[ftype] then + local ftypec = field.type:gsub(ftype,not to and (ftype.."_c") or ftype) + insert(tab, " dest."..prefix..field.name.." = reinterpret_cast<"..ftypec..">(src."..prefix..field.name..");") else insert(tab," dest."..prefix..field.name.." = src."..prefix..field.name..";") end @@ -1183,14 +1188,14 @@ local function genConversions(FP) insert(convers,"{") insert(convers," "..k.." dest;") local struct = structs[k] - gen_field_conversion(convers,struct,FP) + gen_field_conversion(convers,struct,FP, true) insert(convers," return dest;") insert(convers,"}") insert(convers,"static inline "..k.."_c ConvertFromCPP_"..k.."(const "..k.."& src)") insert(convers,"{") insert(convers," "..k.."_c dest;") local struct = structs[k] - gen_field_conversion(convers,struct,FP) + gen_field_conversion(convers,struct,FP, false) insert(convers," return dest;") insert(convers,"}") end) @@ -3128,8 +3133,8 @@ local function func_header_generate(FP) --outtabf = M.header_subs_nonPOD(FP,outtabf) local cfuncsstr = table.concat(outtab)..outtabf cfuncsstr = cfuncsstr:gsub("\n+","\n") --several empty lines to one empty line - local structs_c = FP:gen_structs_c() - return structs_c..cfuncsstr + + return cfuncsstr end M.func_header_generate = func_header_generate diff --git a/generator/generator.lua b/generator/generator.lua index a602af1..4027c4d 100644 --- a/generator/generator.lua +++ b/generator/generator.lua @@ -286,7 +286,6 @@ local function cimgui_generation(parser) local tdt = parser:generate_templates() - --local cstructsstr = "\n//7777estio es outpre\n"..outpre.."\n///////////////tdt\n"..tdt.."\n////////////////////outpost\n"..outpost local cstructsstr = outpre..tdt..outpost if gdefines.IMGUI_HAS_DOCK then @@ -307,6 +306,7 @@ local function cimgui_generation(parser) cstructsstr = colapse_defines(cstructsstr, "IMGUI_ENABLE_FREETYPE") hstrfile = hstrfile:gsub([[#include "imgui_structs%.h"]],cstructsstr) + hstrfile = hstrfile:gsub([[PLACE_STRUCTS_C]],parser:gen_structs_c()) local cfuncsstr = func_header_generate(parser) cfuncsstr = colapse_defines(cfuncsstr, "IMGUI_ENABLE_FREETYPE") hstrfile = hstrfile:gsub([[#include "auto_funcs%.h"]],cfuncsstr)