From c212c3388657742aa15f3996db911dac0cf53961 Mon Sep 17 00:00:00 2001 From: JupiterRider <60042618+JupiterRider@users.noreply.github.com> Date: Thu, 16 May 2024 19:05:18 +0200 Subject: [PATCH 1/2] [raygui] empty string will cause the draw of a title-bar, but nil doesn't --- raygui/raygui.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/raygui/raygui.go b/raygui/raygui.go index 2e7a6ed..379875a 100644 --- a/raygui/raygui.go +++ b/raygui/raygui.go @@ -356,8 +356,11 @@ func ScrollPanel(bounds rl.Rectangle, text string, content rl.Rectangle, scroll cbounds.y = C.float(bounds.Y) cbounds.width = C.float(bounds.Width) cbounds.height = C.float(bounds.Height) - ctext := C.CString(text) - defer C.free(unsafe.Pointer(ctext)) + var ctext *C.char + if len(text) > 0 { + ctext = C.CString(text) + defer C.free(unsafe.Pointer(ctext)) + } var ccontent C.struct_Rectangle ccontent.x = C.float(content.X) ccontent.y = C.float(content.Y) From 7c239d105098ecabd34a27c4c12fbea0fb025dc7 Mon Sep 17 00:00:00 2001 From: JupiterRider <60042618+JupiterRider@users.noreply.github.com> Date: Thu, 16 May 2024 20:41:28 +0200 Subject: [PATCH 2/2] [raygui] use nil for empty strings; fixes #386 --- raygui/raygui.go | 254 ++++++++++++++++++++++++++++++++++------------- 1 file changed, 184 insertions(+), 70 deletions(-) diff --git a/raygui/raygui.go b/raygui/raygui.go index 379875a..2d7c173 100644 --- a/raygui/raygui.go +++ b/raygui/raygui.go @@ -308,8 +308,11 @@ func WindowBox(bounds rl.Rectangle, title string) bool { cbounds.x = C.float(bounds.X) cbounds.y = C.float(bounds.Y) cbounds.width = C.float(bounds.Width) - ctitle := C.CString(title) - defer C.free(unsafe.Pointer(ctitle)) + var ctitle *C.char + if len(title) > 0 { + ctitle = C.CString(title) + defer C.free(unsafe.Pointer(ctitle)) + } return C.GuiWindowBox(cbounds, ctitle) != 0 } @@ -320,8 +323,11 @@ func GroupBox(bounds rl.Rectangle, text string) { cbounds.x = C.float(bounds.X) cbounds.y = C.float(bounds.Y) cbounds.width = C.float(bounds.Width) - ctext := C.CString(text) - defer C.free(unsafe.Pointer(ctext)) + var ctext *C.char + if len(text) > 0 { + ctext = C.CString(text) + defer C.free(unsafe.Pointer(ctext)) + } C.GuiGroupBox(cbounds, ctext) } @@ -332,8 +338,11 @@ func Line(bounds rl.Rectangle, text string) { cbounds.y = C.float(bounds.Y) cbounds.width = C.float(bounds.Width) cbounds.height = C.float(bounds.Height) - ctext := C.CString(text) - defer C.free(unsafe.Pointer(ctext)) + var ctext *C.char + if len(text) > 0 { + ctext = C.CString(text) + defer C.free(unsafe.Pointer(ctext)) + } C.GuiLine(cbounds, ctext) } @@ -344,8 +353,11 @@ func Panel(bounds rl.Rectangle, text string) { cbounds.height = C.float(bounds.Height) cbounds.x = C.float(bounds.X) cbounds.y = C.float(bounds.Y) - ctext := C.CString(text) - defer C.free(unsafe.Pointer(ctext)) + var ctext *C.char + if len(text) > 0 { + ctext = C.CString(text) + defer C.free(unsafe.Pointer(ctext)) + } C.GuiPanel(cbounds, ctext) } @@ -412,8 +424,11 @@ func Label(bounds rl.Rectangle, text string) { cbounds.y = C.float(bounds.Y) cbounds.width = C.float(bounds.Width) cbounds.height = C.float(bounds.Height) - ctext := C.CString(text) - defer C.free(unsafe.Pointer(ctext)) + var ctext *C.char + if len(text) > 0 { + ctext = C.CString(text) + defer C.free(unsafe.Pointer(ctext)) + } C.GuiLabel(cbounds, ctext) } @@ -424,8 +439,11 @@ func Button(bounds rl.Rectangle, text string) bool { cbounds.y = C.float(bounds.Y) cbounds.width = C.float(bounds.Width) cbounds.height = C.float(bounds.Height) - ctext := C.CString(text) - defer C.free(unsafe.Pointer(ctext)) + var ctext *C.char + if len(text) > 0 { + ctext = C.CString(text) + defer C.free(unsafe.Pointer(ctext)) + } return C.GuiButton(cbounds, ctext) != 0 } @@ -436,8 +454,11 @@ func LabelButton(bounds rl.Rectangle, text string) bool { cbounds.y = C.float(bounds.Y) cbounds.width = C.float(bounds.Width) cbounds.height = C.float(bounds.Height) - ctext := C.CString(text) - defer C.free(unsafe.Pointer(ctext)) + var ctext *C.char + if len(text) > 0 { + ctext = C.CString(text) + defer C.free(unsafe.Pointer(ctext)) + } return C.GuiLabelButton(cbounds, ctext) != 0 } @@ -448,8 +469,11 @@ func Toggle(bounds rl.Rectangle, text string, active bool) bool { cbounds.y = C.float(bounds.Y) cbounds.width = C.float(bounds.Width) cbounds.height = C.float(bounds.Height) - ctext := C.CString(text) - defer C.free(unsafe.Pointer(ctext)) + var ctext *C.char + if len(text) > 0 { + ctext = C.CString(text) + defer C.free(unsafe.Pointer(ctext)) + } cactive := C.bool(active) C.GuiToggle(cbounds, ctext, &cactive) return bool(cactive) @@ -462,8 +486,11 @@ func ToggleGroup(bounds rl.Rectangle, text string, active int32) int32 { cbounds.y = C.float(bounds.Y) cbounds.width = C.float(bounds.Width) cbounds.height = C.float(bounds.Height) - ctext := C.CString(text) - defer C.free(unsafe.Pointer(ctext)) + var ctext *C.char + if len(text) > 0 { + ctext = C.CString(text) + defer C.free(unsafe.Pointer(ctext)) + } cactive := C.int(active) C.GuiToggleGroup(cbounds, ctext, &cactive) return int32(cactive) @@ -476,8 +503,11 @@ func ToggleSlider(bounds rl.Rectangle, text string, active int32) int32 { cbounds.y = C.float(bounds.Y) cbounds.width = C.float(bounds.Width) cbounds.height = C.float(bounds.Height) - ctext := C.CString(text) - defer C.free(unsafe.Pointer(ctext)) + var ctext *C.char + if len(text) > 0 { + ctext = C.CString(text) + defer C.free(unsafe.Pointer(ctext)) + } cactive := C.int(active) C.GuiToggleSlider(cbounds, ctext, &cactive) return int32(cactive) @@ -490,8 +520,11 @@ func CheckBox(bounds rl.Rectangle, text string, checked bool) bool { cbounds.y = C.float(bounds.Y) cbounds.width = C.float(bounds.Width) cbounds.height = C.float(bounds.Height) - ctext := C.CString(text) - defer C.free(unsafe.Pointer(ctext)) + var ctext *C.char + if len(text) > 0 { + ctext = C.CString(text) + defer C.free(unsafe.Pointer(ctext)) + } cchecked := C.bool(checked) C.GuiCheckBox(cbounds, ctext, &cchecked) return bool(cchecked) @@ -504,8 +537,11 @@ func ComboBox(bounds rl.Rectangle, text string, active int32) int32 { cbounds.y = C.float(bounds.Y) cbounds.width = C.float(bounds.Width) cbounds.height = C.float(bounds.Height) - ctext := C.CString(text) - defer C.free(unsafe.Pointer(ctext)) + var ctext *C.char + if len(text) > 0 { + ctext = C.CString(text) + defer C.free(unsafe.Pointer(ctext)) + } cactive := C.int(active) C.GuiComboBox(cbounds, ctext, &cactive) return int32(cactive) @@ -518,8 +554,11 @@ func Spinner(bounds rl.Rectangle, text string, value *int32, minValue, maxValue cbounds.y = C.float(bounds.Y) cbounds.width = C.float(bounds.Width) cbounds.height = C.float(bounds.Height) - ctext := C.CString(text) - defer C.free(unsafe.Pointer(ctext)) + var ctext *C.char + if len(text) > 0 { + ctext = C.CString(text) + defer C.free(unsafe.Pointer(ctext)) + } if value == nil { value = new(int32) @@ -544,10 +583,19 @@ func Slider(bounds rl.Rectangle, textLeft string, textRight string, value float3 cbounds.y = C.float(bounds.Y) cbounds.width = C.float(bounds.Width) cbounds.height = C.float(bounds.Height) - ctextLeft := C.CString(textLeft) - defer C.free(unsafe.Pointer(ctextLeft)) - ctextRight := C.CString(textRight) - defer C.free(unsafe.Pointer(ctextRight)) + + var ctextLeft *C.char + if len(textLeft) > 0 { + ctextLeft = C.CString(textLeft) + defer C.free(unsafe.Pointer(ctextLeft)) + } + + var ctextRight *C.char + if len(textRight) > 0 { + ctextRight = C.CString(textRight) + defer C.free(unsafe.Pointer(ctextRight)) + } + cvalue := C.float(value) cminValue := C.float(minValue) cmaxValue := C.float(maxValue) @@ -562,10 +610,19 @@ func SliderBar(bounds rl.Rectangle, textLeft string, textRight string, value flo cbounds.height = C.float(bounds.Height) cbounds.x = C.float(bounds.X) cbounds.y = C.float(bounds.Y) - ctextLeft := C.CString(textLeft) - defer C.free(unsafe.Pointer(ctextLeft)) - ctextRight := C.CString(textRight) - defer C.free(unsafe.Pointer(ctextRight)) + + var ctextLeft *C.char + if len(textLeft) > 0 { + ctextLeft = C.CString(textLeft) + defer C.free(unsafe.Pointer(ctextLeft)) + } + + var ctextRight *C.char + if len(textRight) > 0 { + ctextRight = C.CString(textRight) + defer C.free(unsafe.Pointer(ctextRight)) + } + cvalue := C.float(value) cminValue := C.float(minValue) cmaxValue := C.float(maxValue) @@ -580,10 +637,19 @@ func ProgressBar(bounds rl.Rectangle, textLeft string, textRight string, value f cbounds.height = C.float(bounds.Height) cbounds.x = C.float(bounds.X) cbounds.y = C.float(bounds.Y) - ctextLeft := C.CString(textLeft) - defer C.free(unsafe.Pointer(ctextLeft)) - ctextRight := C.CString(textRight) - defer C.free(unsafe.Pointer(ctextRight)) + + var ctextLeft *C.char + if len(textLeft) > 0 { + ctextLeft = C.CString(textLeft) + defer C.free(unsafe.Pointer(ctextLeft)) + } + + var ctextRight *C.char + if len(textRight) > 0 { + ctextRight = C.CString(textRight) + defer C.free(unsafe.Pointer(ctextRight)) + } + cvalue := C.float(value) cminValue := C.float(minValue) cmaxValue := C.float(maxValue) @@ -598,8 +664,11 @@ func StatusBar(bounds rl.Rectangle, text string) { cbounds.y = C.float(bounds.Y) cbounds.width = C.float(bounds.Width) cbounds.height = C.float(bounds.Height) - ctext := C.CString(text) - defer C.free(unsafe.Pointer(ctext)) + var ctext *C.char + if len(text) > 0 { + ctext = C.CString(text) + defer C.free(unsafe.Pointer(ctext)) + } C.GuiStatusBar(cbounds, ctext) } @@ -610,8 +679,11 @@ func DummyRec(bounds rl.Rectangle, text string) { cbounds.y = C.float(bounds.Y) cbounds.width = C.float(bounds.Width) cbounds.height = C.float(bounds.Height) - ctext := C.CString(text) - defer C.free(unsafe.Pointer(ctext)) + var ctext *C.char + if len(text) > 0 { + ctext = C.CString(text) + defer C.free(unsafe.Pointer(ctext)) + } C.GuiDummyRec(cbounds, ctext) } @@ -622,8 +694,11 @@ func Grid(bounds rl.Rectangle, text string, spacing float32, subdivs int32, mous cbounds.width = C.float(bounds.Width) cbounds.height = C.float(bounds.Height) cbounds.x = C.float(bounds.X) - ctext := C.CString(text) - defer C.free(unsafe.Pointer(ctext)) + var ctext *C.char + if len(text) > 0 { + ctext = C.CString(text) + defer C.free(unsafe.Pointer(ctext)) + } cspacing := C.float(spacing) csubdivs := C.int(subdivs) var cmouseCell C.struct_Vector2 @@ -642,8 +717,11 @@ func ListView(bounds rl.Rectangle, text string, scrollIndex *int32, active int32 cbounds.y = C.float(bounds.Y) cbounds.width = C.float(bounds.Width) cbounds.height = C.float(bounds.Height) - ctext := C.CString(text) - defer C.free(unsafe.Pointer(ctext)) + var ctext *C.char + if len(text) > 0 { + ctext = C.CString(text) + defer C.free(unsafe.Pointer(ctext)) + } if scrollIndex == nil { scrollIndex = new(int32) @@ -666,10 +744,16 @@ func MessageBox(bounds rl.Rectangle, title string, message string, buttons strin cbounds.y = C.float(bounds.Y) cbounds.width = C.float(bounds.Width) cbounds.height = C.float(bounds.Height) - ctitle := C.CString(title) - defer C.free(unsafe.Pointer(ctitle)) - cmessage := C.CString(message) - defer C.free(unsafe.Pointer(cmessage)) + var ctitle *C.char + if len(title) > 0 { + ctitle = C.CString(title) + defer C.free(unsafe.Pointer(ctitle)) + } + var cmessage *C.char + if len(message) > 0 { + cmessage = C.CString(message) + defer C.free(unsafe.Pointer(cmessage)) + } cbuttons := C.CString(buttons) defer C.free(unsafe.Pointer(cbuttons)) return int32(C.GuiMessageBox(cbounds, ctitle, cmessage, cbuttons)) @@ -682,8 +766,11 @@ func ColorPicker(bounds rl.Rectangle, text string, color rl.Color) rl.Color { cbounds.height = C.float(bounds.Height) cbounds.x = C.float(bounds.X) cbounds.y = C.float(bounds.Y) - ctext := C.CString(text) - defer C.free(unsafe.Pointer(ctext)) + var ctext *C.char + if len(text) > 0 { + ctext = C.CString(text) + defer C.free(unsafe.Pointer(ctext)) + } var ccolor C.struct_Color ccolor.r = C.uchar(color.R) ccolor.g = C.uchar(color.G) @@ -705,8 +792,11 @@ func ColorPanel(bounds rl.Rectangle, text string, color rl.Color) rl.Color { cbounds.y = C.float(bounds.Y) cbounds.width = C.float(bounds.Width) cbounds.height = C.float(bounds.Height) - ctext := C.CString(text) - defer C.free(unsafe.Pointer(ctext)) + var ctext *C.char + if len(text) > 0 { + ctext = C.CString(text) + defer C.free(unsafe.Pointer(ctext)) + } var ccolor C.struct_Color ccolor.b = C.uchar(color.B) ccolor.a = C.uchar(color.A) @@ -728,8 +818,11 @@ func ColorBarAlpha(bounds rl.Rectangle, text string, alpha float32) float32 { cbounds.height = C.float(bounds.Height) cbounds.x = C.float(bounds.X) cbounds.y = C.float(bounds.Y) - ctext := C.CString(text) - defer C.free(unsafe.Pointer(ctext)) + var ctext *C.char + if len(text) > 0 { + ctext = C.CString(text) + defer C.free(unsafe.Pointer(ctext)) + } calpha := C.float(alpha) C.GuiColorBarAlpha(cbounds, ctext, &calpha) return float32(calpha) @@ -742,8 +835,11 @@ func ColorBarHue(bounds rl.Rectangle, text string, value float32) float32 { cbounds.y = C.float(bounds.Y) cbounds.width = C.float(bounds.Width) cbounds.height = C.float(bounds.Height) - ctext := C.CString(text) - defer C.free(unsafe.Pointer(ctext)) + var ctext *C.char + if len(text) > 0 { + ctext = C.CString(text) + defer C.free(unsafe.Pointer(ctext)) + } cvalue := C.float(value) C.GuiColorBarHue(cbounds, ctext, &cvalue) return float32(cvalue) @@ -757,8 +853,11 @@ func ColorPickerHSV(bounds rl.Rectangle, text string, colorHSV *rl.Vector3) int3 cbounds.x = C.float(bounds.X) cbounds.y = C.float(bounds.Y) - ctext := C.CString(text) - defer C.free(unsafe.Pointer(ctext)) + var ctext *C.char + if len(text) > 0 { + ctext = C.CString(text) + defer C.free(unsafe.Pointer(ctext)) + } var ccolorHSV C.struct_Vector3 ccolorHSV.x = C.float(colorHSV.X) @@ -781,8 +880,11 @@ func ColorPanelHSV(bounds rl.Rectangle, text string, colorHSV *rl.Vector3) int32 cbounds.x = C.float(bounds.X) cbounds.y = C.float(bounds.Y) - ctext := C.CString(text) - defer C.free(unsafe.Pointer(ctext)) + var ctext *C.char + if len(text) > 0 { + ctext = C.CString(text) + defer C.free(unsafe.Pointer(ctext)) + } var ccolorHSV C.struct_Vector3 ccolorHSV.x = C.float(colorHSV.X) @@ -804,8 +906,11 @@ func DropdownBox(bounds rl.Rectangle, text string, active *int32, editMode bool) cbounds.y = C.float(bounds.Y) cbounds.width = C.float(bounds.Width) cbounds.height = C.float(bounds.Height) - ctext := C.CString(text) - defer C.free(unsafe.Pointer(ctext)) + var ctext *C.char + if len(text) > 0 { + ctext = C.CString(text) + defer C.free(unsafe.Pointer(ctext)) + } if active == nil { active = new(int32) @@ -827,8 +932,11 @@ func ValueBox(bounds rl.Rectangle, text string, value *int32, minValue, maxValue cbounds.y = C.float(bounds.Y) cbounds.width = C.float(bounds.Width) cbounds.height = C.float(bounds.Height) - ctext := C.CString(text) - defer C.free(unsafe.Pointer(ctext)) + var ctext *C.char + if len(text) > 0 { + ctext = C.CString(text) + defer C.free(unsafe.Pointer(ctext)) + } if value == nil { value = new(int32) @@ -1165,11 +1273,17 @@ func TextInputBox(bounds rl.Rectangle, title, message, buttons string, text *str cbounds.width = C.float(bounds.Width) cbounds.height = C.float(bounds.Height) - ctitle := C.CString(title) - defer C.free(unsafe.Pointer(ctitle)) + var ctitle *C.char + if len(title) > 0 { + ctitle = C.CString(title) + defer C.free(unsafe.Pointer(ctitle)) + } - cmessage := C.CString(message) - defer C.free(unsafe.Pointer(cmessage)) + var cmessage *C.char + if len(message) > 0 { + cmessage = C.CString(message) + defer C.free(unsafe.Pointer(cmessage)) + } cbuttons := C.CString(buttons) defer C.free(unsafe.Pointer(cbuttons))