Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
317 changes: 254 additions & 63 deletions cimgui_funcs.go

Large diffs are not rendered by default.

2 changes: 0 additions & 2 deletions cimgui_structs_accessor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2495,8 +2495,6 @@ void wrap_ImGuiWindowTempData_SetItemWidthStack(ImGuiWindowTempData *ImGuiWindow
ImVector_float wrap_ImGuiWindowTempData_GetItemWidthStack(ImGuiWindowTempData *self) { return self->ItemWidthStack; }
void wrap_ImGuiWindowTempData_SetTextWrapPosStack(ImGuiWindowTempData *ImGuiWindowTempDataPtr, ImVector_float v) { ImGuiWindowTempDataPtr->TextWrapPosStack = v; }
ImVector_float wrap_ImGuiWindowTempData_GetTextWrapPosStack(ImGuiWindowTempData *self) { return self->TextWrapPosStack; }
void wrap_ImVec1_Setx(ImVec1 *ImVec1Ptr, float v) { ImVec1Ptr->x = v; }
float wrap_ImVec1_Getx(ImVec1 *self) { return self->x; }
void wrap_ImVec2ih_Setx(ImVec2ih *ImVec2ihPtr, short v) { ImVec2ihPtr->x = v; }
short wrap_ImVec2ih_Getx(ImVec2ih *self) { return self->x; }
void wrap_ImVec2ih_Sety(ImVec2ih *ImVec2ihPtr, short v) { ImVec2ihPtr->y = v; }
Expand Down
2 changes: 0 additions & 2 deletions cimgui_structs_accessor.h
Original file line number Diff line number Diff line change
Expand Up @@ -2499,8 +2499,6 @@ extern void wrap_ImGuiWindowTempData_SetItemWidthStack(ImGuiWindowTempData *ImGu
extern ImVector_float wrap_ImGuiWindowTempData_GetItemWidthStack(ImGuiWindowTempData *self);
extern void wrap_ImGuiWindowTempData_SetTextWrapPosStack(ImGuiWindowTempData *ImGuiWindowTempDataPtr, ImVector_float v);
extern ImVector_float wrap_ImGuiWindowTempData_GetTextWrapPosStack(ImGuiWindowTempData *self);
extern void wrap_ImVec1_Setx(ImVec1 *ImVec1Ptr, float v);
extern float wrap_ImVec1_Getx(ImVec1 *self);
extern void wrap_ImVec2ih_Setx(ImVec2ih *ImVec2ihPtr, short v);
extern short wrap_ImVec2ih_Getx(ImVec2ih *self);
extern void wrap_ImVec2ih_Sety(ImVec2ih *ImVec2ihPtr, short v);
Expand Down
4 changes: 4 additions & 0 deletions cimplot_funcs.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

26 changes: 15 additions & 11 deletions cmd/codegen/arguments_wrapper.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ type argumentWrapper func(arg ArgDef) ArgumentWrapperData

func argWrapper(argType string) (wrapper argumentWrapper, err error) {
argWrapperMap := map[string]argumentWrapper{
"char": simpleW("rune", "C.char"),
"char[5]": simplePtrArrayW(5, "C.char", "rune"),
"char*": constCharW,
"const char*": constCharW,
"const char**": charPtrPtrW,
Expand All @@ -32,7 +34,8 @@ func argWrapper(argType string) (wrapper argumentWrapper, err error) {
"unsigned char**": uCharPtrW,
"size_t": simpleW("uint64", "C.xulong"),
"size_t*": sizeTPtrW,
"float": floatW,
"float": simpleW("float32", "C.float"),
"const float": simpleW("float32", "C.float"),
"float*": floatPtrW,
"const float*": floatArrayW,
"short": simpleW("int", "C.short"),
Expand All @@ -51,6 +54,7 @@ func argWrapper(argType string) (wrapper argumentWrapper, err error) {
"const ImS16*": simplePtrSliceW("C.ImS16", "int"),
"ImS32": simpleW("int", "C.ImS32"),
"const ImS32*": simplePtrSliceW("C.ImS32", "int32"),
"ImS64": simpleW("int64", "C.ImS64"),
"const ImS64*": int64ArrayW,
"int": simpleW("int32", "C.int"),
"int*": simplePtrW("int32", "C.int"),
Expand All @@ -67,16 +71,22 @@ func argWrapper(argType string) (wrapper argumentWrapper, err error) {
"float[2]": simplePtrArrayW(2, "C.float", "float32"),
"float[3]": simplePtrArrayW(3, "C.float", "float32"),
"float[4]": simplePtrArrayW(4, "C.float", "float32"),
"ImWchar": simpleW("Wchar", "C.ImWchar"),
"const ImWchar*": simpleW("*Wchar", "(*C.ImWchar)"),
"ImGuiID": simpleW("ImGuiID", "C.ImGuiID"),
"ImWchar": simpleW("rune", "C.ImWchar"),
"ImWchar16": simpleW("rune", "C.ImWchar16"),
"const ImWchar*": simplePtrW("rune", "C.ImWchar"),
"ImGuiID": simpleW("ID", "C.ImGuiID"),
"ImGuiID*": simplePtrW("ID", "C.ImGuiID"),
"ImTextureID": simpleW("TextureID", "C.ImTextureID"),
"ImDrawIdx": simpleW("DrawIdx", "C.ImDrawIdx"),
"ImGuiTableColumnIdx": simpleW("TableColumnIdx", "C.ImGuiTableColumnIdx"),
"ImGuiTableDrawChannelIdx": simpleW("TableDrawChannelIdx", "C.ImGuiTableDrawChannelIdx"),
"ImGuiKeyChord": simpleW("KeyChord", "C.ImGuiKeyChord"),
"void*": simpleW("unsafe.Pointer", ""),
"const void*": simpleW("unsafe.Pointer", ""),
"const ImVec1": wrappableW("Vec1"),
"const ImVec1*": wrappablePtrW("*Vec1", "C.ImVec1"),
"ImVec1": wrappableW("Vec1"),
"ImVec1*": wrappablePtrW("*Vec1", "C.ImVec1"),
"const ImVec2": wrappableW("Vec2"),
"const ImVec2*": wrappablePtrW("*Vec2", "C.ImVec2"),
"ImVec2": wrappableW("Vec2"),
Expand All @@ -90,6 +100,7 @@ func argWrapper(argType string) (wrapper argumentWrapper, err error) {
"ImRect": wrappableW("Rect"),
"const ImRect": wrappableW("Rect"),
"ImRect*": wrappablePtrW("*Rect", "C.ImRect"),
"const ImRect*": wrappablePtrW("*Rect", "C.ImRect"),
"ImPlotPoint": wrappableW("PlotPoint"),
"const ImPlotPoint": wrappableW("PlotPoint"),
"ImPlotPoint*": wrappablePtrW("*PlotPoint", "C.ImPlotPoint"),
Expand Down Expand Up @@ -136,13 +147,6 @@ func sizeTPtrW(arg ArgDef) ArgumentWrapperData {
}
}

func floatW(arg ArgDef) ArgumentWrapperData {
return ArgumentWrapperData{
ArgType: "float32",
VarName: fmt.Sprintf("C.float(%s)", arg.Name),
}
}

// leave this for now because of https://github.com/AllenDang/cimgui-go/issues/31
func floatPtrW(arg ArgDef) ArgumentWrapperData {
return simplePtrW("float32", "C.float")(arg)
Expand Down
1 change: 1 addition & 0 deletions cmd/codegen/gencpp.go
Original file line number Diff line number Diff line change
Expand Up @@ -361,6 +361,7 @@ func generateCppStructsAccessor(prefix string, validFuncs []FuncDef, structs []S
"ImGuiIO_SetAppAcceptingEvents": true,
"ImGuiDockNode_SetLocalFlags": true,
"ImFontAtlas_SetTexID": true,
"ImVec1_Getx": true,
"ImVec2_Getx": true,
"ImVec2_Gety": true,
"ImVec4_Getx": true,
Expand Down
5 changes: 3 additions & 2 deletions cmd/codegen/return_wrapper.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,9 @@ func getReturnTypeWrapperFunc(returnType string) (returnWrapper, error) {
"bool": {"bool", "return %s == C.bool(true)"},
"char*": {"string", "return C.GoString(%s)"},
"const char*": {"string", "return C.GoString(%s)"},
"const ImWchar*": simpleR("(*Wchar)"),
"ImWchar": simpleR("Wchar"),
"const ImWchar*": {"*rune", "return (*rune)(unsafe.Pointer((*uint)(unsafe.Pointer(%s))))"},
"ImWchar": simpleR("rune"),
"ImWchar16": simpleR("rune"),
"float": simpleR("float32"),
"double": simpleR("float64"),
"int": simpleR("int"),
Expand Down
20 changes: 19 additions & 1 deletion extra_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import (
)

type (
Wchar C.uint
ID C.ImGuiID
TextureID C.ImTextureID
DrawIdx C.ImDrawIdx
Expand All @@ -20,6 +19,25 @@ type (
KeyChord C.ImGuiKeyChord
)

var _ wrappableType[C.ImVec1, *Vec1] = &Vec1{}

type Vec1 struct {
X float32
}

func NewVec1(x float32) Vec1 {
return Vec1{X: x}
}

func (i *Vec1) fromC(vec1 C.ImVec1) *Vec1 {
*i = NewVec1(float32(vec1.x))
return i
}

func (i Vec1) toC() C.ImVec1 {
return C.ImVec1{x: C.float(i.X)}
}

var _ wrappableType[C.ImVec2, *Vec2] = &Vec2{}

type Vec2 struct {
Expand Down
6 changes: 4 additions & 2 deletions util.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,10 @@ func (gr GlyphRange) Destroy() {
C.wrap_DestroyGlyphRange(gr.handle())
}

func (gr GlyphRange) Data() *Wchar {
return (*Wchar)(C.wrap_GlyphRange_GetData(gr.handle()))
func (gr GlyphRange) Data() *rune {
return (*rune)(unsafe.Pointer((*uint)(
unsafe.Pointer(C.wrap_GlyphRange_GetData(gr.handle())),
)))
}

func (fa FontAtlas) GetFontCount() int {
Expand Down