package raygui3_5 /* #cgo CFLAGS: -DRAYGUI_IMPLEMENTATION -I../raylib/ #include "raygui.h" #include */ import "C" import ( "strings" "unsafe" rl "github.com/gen2brain/raylib-go/raylib" ) const ( SCROLLBAR_LEFT_SIDE = 0 SCROLLBAR_RIGHT_SIDE = 1 ) // GuiStyleProp - transpiled function from C4GO/tests/raylib/raygui.h:332 // //* //* raygui v3.5-dev - A simple and easy-to-use immediate-mode gui library //* //* DESCRIPTION: //* //* raygui is a tools-dev-focused immediate-mode-gui library based on raylib but also //* available as a standalone library, as long as input and drawing functions are provided. //* //* Controls provided: //* //* # Container/separators Controls //* - WindowBox --> StatusBar, Panel //* - GroupBox --> Line //* - Line //* - Panel --> StatusBar //* - ScrollPanel --> StatusBar //* //* # Basic Controls //* - Label //* - Button //* - LabelButton --> Label //* - Toggle //* - ToggleGroup --> Toggle //* - CheckBox //* - ComboBox //* - DropdownBox //* - TextBox //* - TextBoxMulti //* - ValueBox --> TextBox //* - Spinner --> Button, ValueBox //* - Slider //* - SliderBar --> Slider //* - ProgressBar //* - StatusBar //* - DummyRec //* - Grid //* //* # Advance Controls //* - ListView //* - rl.ColorPicker --> rl.ColorPanel, rl.ColorBarHue //* - MessageBox --> Window, Label, Button //* - TextInputBox --> Window, Label, TextBox, Button //* //* It also provides a set of functions for styling the controls based on its properties (size, color). //* //* //* RAYGUI STYLE (guiStyle): //* //* raygui uses a global data array for all gui style properties (allocated on data segment by default), //* when a new style is loaded, it is loaded over the global style... but a default gui style could always be //* recovered with GuiLoadStyleDefault() function, that overwrites the current style to the default one //* //* The global style array size is fixed and depends on the number of controls and properties: //* //* static unsigned int guiStyle[RAYGUI_MAX_CONTROLS*(RAYGUI_MAX_PROPS_BASE + RAYGUI_MAX_PROPS_EXTENDED)]; //* //* guiStyle size is by default: 16*(16 + 8) = 384*4 = 1536 bytes = 1.5 KB //* //* Note that the first set of BASE properties (by default guiStyle[0..15]) belong to the generic style //* used for all controls, when any of those base values is set, it is automatically populated to all //* controls, so, specific control values overwriting generic style should be set after base values. //* //* After the first BASE set we have the EXTENDED properties (by default guiStyle[16..23]), those //* properties are actually common to all controls and can not be overwritten individually (like BASE ones) //* Some of those properties are: TEXT_SIZE, TEXT_SPACING, LINE_COLOR, BACKGROUND_COLOR //* //* Custom control properties can be defined using the EXTENDED properties for each independent control. //* //* TOOL: rGuiStyler is a visual tool to customize raygui style. //* //* //* RAYGUI ICONS (guiIcons): //* //* raygui could use a global array containing icons data (allocated on data segment by default), //* a custom icons set could be loaded over this array using GuiLoadIcons(), but loaded icons set //* must be same RAYGUI_ICON_SIZE and no more than RAYGUI_ICON_MAX_ICONS will be loaded //* //* Every icon is codified in binary form, using 1 bit per pixel, so, every 16x16 icon //* requires 8 integers (16*16/32) to be stored in memory. //* //* When the icon is draw, actually one quad per pixel is drawn if the bit for that pixel is set. //* //* The global icons array size is fixed and depends on the number of icons and size: //* //* static unsigned int guiIcons[RAYGUI_ICON_MAX_ICONS*RAYGUI_ICON_DATA_ELEMENTS]; //* //* guiIcons size is by default: 256*(16*16/32) = 2048*4 = 8192 bytes = 8 KB //* //* TOOL: rGuiIcons is a visual tool to customize raygui icons and create new ones. //* //* //* CONFIGURATION: //* //* #define RAYGUI_IMPLEMENTATION //* Generates the implementation of the library into the included file. //* If not defined, the library is in header only mode and can be included in other headers //* or source files without problems. But only ONE file should hold the implementation. //* //* #define RAYGUI_STANDALONE //* Avoid raylib.h header inclusion in this file. Data types defined on raylib are defined //* internally in the library and input management and drawing functions must be provided by //* the user (check library implementation for further details). //* //* #define RAYGUI_NO_ICONS //* Avoid including embedded ricons data (256 icons, 16x16 pixels, 1-bit per pixel, 2KB) //* //* #define RAYGUI_CUSTOM_ICONS //* Includes custom ricons.h header defining a set of custom icons, //* this file can be generated using rGuiIcons tool //* //* //* VERSIONS HISTORY: //* 3.5 (xx-xxx-2022) ADDED: Multiple new icons, useful for code editing tools //* ADDED: GuiTabBar(), based on GuiToggle() //* REMOVED: Unneeded icon editing functions //* REDESIGNED: GuiDrawText() to divide drawing by lines //* REMOVED: MeasureTextEx() dependency, logic directly implemented //* REMOVED: DrawTextEx() dependency, logic directly implemented //* ADDED: Helper functions to split text in separate lines //* 3.2 (22-May-2022) RENAMED: Some enum values, for unification, avoiding prefixes //* REMOVED: GuiScrollBar(), only internal //* REDESIGNED: GuiPanel() to support text parameter //* REDESIGNED: GuiScrollPanel() to support text parameter //* REDESIGNED: GuiColorPicker() to support text parameter //* REDESIGNED: GuiColorPanel() to support text parameter //* REDESIGNED: GuiColorBarAlpha() to support text parameter //* REDESIGNED: GuiColorBarHue() to support text parameter //* REDESIGNED: GuiTextInputBox() to support password //* 3.1 (12-Jan-2022) REVIEWED: Default style for consistency (aligned with rGuiLayout v2.5 tool) //* REVIEWED: GuiLoadStyle() to support compressed font atlas image data and unload previous textures //* REVIEWED: External icons usage logic //* REVIEWED: GuiLine() for centered alignment when including text //* RENAMED: Multiple controls properties definitions to prepend RAYGUI_ //* RENAMED: RICON_ references to RAYGUI_ICON_ for library consistency //* Projects updated and multiple tweaks //* 3.0 (04-Nov-2021) Integrated ricons data to avoid external file //* REDESIGNED: GuiTextBoxMulti() //* REMOVED: GuiImageButton*() //* Multiple minor tweaks and bugs corrected //* 2.9 (17-Mar-2021) REMOVED: Tooltip API //* 2.8 (03-May-2020) Centralized rectangles drawing to GuiDrawRectangle() //* 2.7 (20-Feb-2020) ADDED: Possible tooltips API //* 2.6 (09-Sep-2019) ADDED: GuiTextInputBox() //* REDESIGNED: GuiListView*(), GuiDropdownBox(), GuiSlider*(), GuiProgressBar(), GuiMessageBox() //* REVIEWED: GuiTextBox(), GuiSpinner(), GuiValueBox(), GuiLoadStyle() //* Replaced property INNER_PADDING by TEXT_PADDING, renamed some properties //* ADDED: 8 new custom styles ready to use //* Multiple minor tweaks and bugs corrected //* 2.5 (28-May-2019) Implemented extended GuiTextBox(), GuiValueBox(), GuiSpinner() //* 2.3 (29-Apr-2019) ADDED: rIcons auxiliar library and support for it, multiple controls reviewed //* Refactor all controls drawing mechanism to use control state //* 2.2 (05-Feb-2019) ADDED: GuiScrollBar(), GuiScrollPanel(), reviewed GuiListView(), removed Gui*Ex() controls //* 2.1 (26-Dec-2018) REDESIGNED: GuiCheckBox(), GuiComboBox(), GuiDropdownBox(), GuiToggleGroup() > Use combined text string //* REDESIGNED: Style system (breaking change) //* 2.0 (08-Nov-2018) ADDED: Support controls guiLock and custom fonts //* REVIEWED: GuiComboBox(), GuiListView()... //* 1.9 (09-Oct-2018) REVIEWED: GuiGrid(), GuiTextBox(), GuiTextBoxMulti(), GuiValueBox()... //* 1.8 (01-May-2018) Lot of rework and redesign to align with rGuiStyler and rGuiLayout //* 1.5 (21-Jun-2017) Working in an improved styles system //* 1.4 (15-Jun-2017) Rewritten all GUI functions (removed useless ones) //* 1.3 (12-Jun-2017) Complete redesign of style system //* 1.1 (01-Jun-2017) Complete review of the library //* 1.0 (07-Jun-2016) Converted to header-only by Ramon Santamaria. //* 0.9 (07-Mar-2016) Reviewed and tested by Albert Martos, Ian Eito, Sergio Martinez and Ramon Santamaria. //* 0.8 (27-Aug-2015) Initial release. Implemented by Kevin Gato, Daniel Nicolás and Ramon Santamaria. //* //* //* CONTRIBUTORS: //* //* Ramon Santamaria: Supervision, review, redesign, update and maintenance //* Vlad Adrian: Complete rewrite of GuiTextBox() to support extended features (2019) //* Sergio Martinez: Review, testing (2015) and redesign of multiple controls (2018) //* Adria Arranz: Testing and Implementation of additional controls (2018) //* Jordi Jorba: Testing and Implementation of additional controls (2018) //* Albert Martos: Review and testing of the library (2015) //* Ian Eito: Review and testing of the library (2015) //* Kevin Gato: Initial implementation of basic components (2014) //* Daniel Nicolas: Initial implementation of basic components (2014) //* //* //* LICENSE: zlib/libpng //* //* Copyright (c) 2014-2022 Ramon Santamaria (@raysan5) //* //* This software is provided "as-is", without any express or implied warranty. In no event //* will the authors be held liable for any damages arising from the use of this software. //* //* Permission is granted to anyone to use this software for any purpose, including commercial //* applications, and to alter it and redistribute it freely, subject to the following restrictions: //* //* 1. The origin of this software must not be misrepresented; you must not claim that you //* wrote the original software. If you use this software in a product, an acknowledgment //* in the product documentation would be appreciated but is not required. //* //* 2. Altered source versions must be plainly marked as such, and must not be misrepresented //* as being the original software. //* //* 3. This notice may not be removed or altered from any source distribution. //* // // Function specifiers in case library is build/used as a shared library (Windows) // NOTE: Microsoft specifiers to tell compiler that symbols are imported/exported from a .dll // Function specifiers definition //---------------------------------------------------------------------------------- // Defines and Macros //---------------------------------------------------------------------------------- // Allow custom memory allocators // Simple log system to avoid printf() calls if required // NOTE: Avoiding those calls, also avoids const strings memory usage //---------------------------------------------------------------------------------- // Types and Structures Definition // NOTE: Some types are required for RAYGUI_STANDALONE usage //---------------------------------------------------------------------------------- // Style property type GuiStyleProp struct { controlId uint16 propertyId uint16 propertyValue uint32 } // STATE_NORMAL - transpiled function from C4GO/tests/raylib/raygui.h:339 // Gui control state const ( STATE_NORMAL int32 = 0 STATE_FOCUSED = 1 STATE_PRESSED = 2 STATE_DISABLED = 3 ) // GuiState - transpiled function from C4GO/tests/raylib/raygui.h:339 type GuiState = int32 // TEXT_ALIGN_LEFT - transpiled function from C4GO/tests/raylib/raygui.h:347 // Gui control text alignment const ( TEXT_ALIGN_LEFT int32 = 0 TEXT_ALIGN_CENTER = 1 TEXT_ALIGN_RIGHT = 2 ) // GuiTextAlignment - transpiled function from C4GO/tests/raylib/raygui.h:347 type GuiTextAlignment = int32 // DEFAULT - transpiled function from C4GO/tests/raylib/raygui.h:354 // Gui controls const ( DEFAULT int32 = 0 LABEL = 1 BUTTON = 2 TOGGLE = 3 SLIDER = 4 PROGRESSBAR = 5 CHECKBOX = 6 COMBOBOX = 7 DROPDOWNBOX = 8 TEXTBOX = 9 VALUEBOX = 10 SPINNER = 11 LISTVIEW = 12 COLORPICKER = 13 SCROLLBAR = 14 STATUSBAR = 15 ) // GuiControl - transpiled function from C4GO/tests/raylib/raygui.h:354 type GuiControl = int32 // BORDER_COLOR_NORMAL - transpiled function from C4GO/tests/raylib/raygui.h:377 // Default -> populates to all controls when set // Basic controls // Used also for: LABELBUTTON // Used also for: TOGGLEGROUP // Used also for: SLIDERBAR // Used also for: TEXTBOXMULTI // Uses: BUTTON, VALUEBOX // Gui base properties for every control // NOTE: RAYGUI_MAX_PROPS_BASE properties (by default 16 properties) const ( BORDER_COLOR_NORMAL int32 = 0 BASE_COLOR_NORMAL = 1 TEXT_COLOR_NORMAL = 2 BORDER_COLOR_FOCUSED = 3 BASE_COLOR_FOCUSED = 4 TEXT_COLOR_FOCUSED = 5 BORDER_COLOR_PRESSED = 6 BASE_COLOR_PRESSED = 7 TEXT_COLOR_PRESSED = 8 BORDER_COLOR_DISABLED = 9 BASE_COLOR_DISABLED = 10 TEXT_COLOR_DISABLED = 11 BORDER_WIDTH = 12 TEXT_PADDING = 13 TEXT_ALIGNMENT = 14 RESERVED = 15 ) // GuiControlProperty - transpiled function from C4GO/tests/raylib/raygui.h:377 type GuiControlProperty = int32 // TEXT_SIZE - transpiled function from C4GO/tests/raylib/raygui.h:402 // Gui extended properties depend on control // NOTE: RAYGUI_MAX_PROPS_EXTENDED properties (by default 8 properties) //---------------------------------------------------------------------------------- // DEFAULT extended properties // NOTE: Those properties are common to all controls or global const ( TEXT_SIZE int32 = 16 TEXT_SPACING = 17 LINE_COLOR = 18 BACKGROUND_COLOR = 19 ) // GuiDefaultProperty - transpiled function from C4GO/tests/raylib/raygui.h:402 type GuiDefaultProperty = int32 // GROUP_PADDING - transpiled function from C4GO/tests/raylib/raygui.h:416 // Text size (glyphs max height) // Text spacing between glyphs // Line control color // Background color // Label //typedef enum { } GuiLabelProperty; // Button/Spinner //typedef enum { } GuiButtonProperty; // Toggle/ToggleGroup const ( GROUP_PADDING int32 = 16 ) // GuiToggleProperty - transpiled function from C4GO/tests/raylib/raygui.h:416 type GuiToggleProperty = int32 // SLIDER_WIDTH - transpiled function from C4GO/tests/raylib/raygui.h:421 // ToggleGroup separation between toggles // Slider/SliderBar const ( SLIDER_WIDTH int32 = 16 SLIDER_PADDING = 17 ) // GuiSliderProperty - transpiled function from C4GO/tests/raylib/raygui.h:421 type GuiSliderProperty = int32 // PROGRESS_PADDING - transpiled function from C4GO/tests/raylib/raygui.h:427 // Slider size of internal bar // Slider/SliderBar internal bar padding // ProgressBar const ( PROGRESS_PADDING int32 = 16 ) // GuiProgressBarProperty - transpiled function from C4GO/tests/raylib/raygui.h:427 type GuiProgressBarProperty = int32 // ARROWS_SIZE - transpiled function from C4GO/tests/raylib/raygui.h:432 // ProgressBar internal padding // ScrollBar const ( ARROWS_SIZE int32 = 16 ARROWS_VISIBLE = 17 SCROLL_SLIDER_PADDING = 18 SCROLL_SLIDER_SIZE = 19 SCROLL_PADDING = 20 SCROLL_SPEED = 21 ) // GuiScrollBarProperty - transpiled function from C4GO/tests/raylib/raygui.h:432 type GuiScrollBarProperty = int32 // CHECK_PADDING - transpiled function from C4GO/tests/raylib/raygui.h:442 // (SLIDERBAR, SLIDER_PADDING) // CheckBox const ( CHECK_PADDING int32 = 16 ) // GuiCheckBoxProperty - transpiled function from C4GO/tests/raylib/raygui.h:442 type GuiCheckBoxProperty = int32 // COMBO_BUTTON_WIDTH - transpiled function from C4GO/tests/raylib/raygui.h:447 // CheckBox internal check padding // ComboBox const ( COMBO_BUTTON_WIDTH int32 = 16 COMBO_BUTTON_SPACING = 17 ) // GuiComboBoxProperty - transpiled function from C4GO/tests/raylib/raygui.h:447 type GuiComboBoxProperty = int32 // ARROW_PADDING - transpiled function from C4GO/tests/raylib/raygui.h:453 // ComboBox right button width // ComboBox button separation // DropdownBox const ( ARROW_PADDING int32 = 16 DROPDOWN_ITEMS_SPACING = 17 ) // GuiDropdownBoxProperty - transpiled function from C4GO/tests/raylib/raygui.h:453 type GuiDropdownBoxProperty = int32 // TEXT_INNER_PADDING - transpiled function from C4GO/tests/raylib/raygui.h:459 // DropdownBox arrow separation from border and items // DropdownBox items separation // TextBox/TextBoxMulti/ValueBox/Spinner const ( TEXT_INNER_PADDING int32 = 16 TEXT_LINES_SPACING = 17 ) // GuiTextBoxProperty - transpiled function from C4GO/tests/raylib/raygui.h:459 type GuiTextBoxProperty = int32 // SPIN_BUTTON_WIDTH - transpiled function from C4GO/tests/raylib/raygui.h:465 // TextBox/TextBoxMulti/ValueBox/Spinner inner text padding // TextBoxMulti lines separation // Spinner const ( SPIN_BUTTON_WIDTH int32 = 16 SPIN_BUTTON_SPACING = 17 ) // GuiSpinnerProperty - transpiled function from C4GO/tests/raylib/raygui.h:465 type GuiSpinnerProperty = int32 // LIST_ITEMS_HEIGHT - transpiled function from C4GO/tests/raylib/raygui.h:471 // Spinner left/right buttons width // Spinner buttons separation // ListView const ( LIST_ITEMS_HEIGHT int32 = 16 LIST_ITEMS_SPACING = 17 SCROLLBAR_WIDTH = 18 SCROLLBAR_SIDE = 19 ) // GuiListViewProperty - transpiled function from C4GO/tests/raylib/raygui.h:471 type GuiListViewProperty = int32 // COLOR_SELECTOR_SIZE - transpiled function from C4GO/tests/raylib/raygui.h:479 // ListView items height // ListView items separation // ListView scrollbar size (usually width) // ListView scrollbar side (0-left, 1-right) // rl.ColorPicker const ( COLOR_SELECTOR_SIZE int32 = 16 HUEBAR_WIDTH = 17 HUEBAR_PADDING = 18 HUEBAR_SELECTOR_HEIGHT = 19 HUEBAR_SELECTOR_OVERFLOW = 20 ) // GuiColorPickerProperty - transpiled function from C4GO/tests/raylib/raygui.h:479 type GuiColorPickerProperty = int32 // GuiEnable - transpiled function from C4GO/tests/raylib/raygui.h:504 // rl.ColorPicker right hue bar width // rl.ColorPicker right hue bar separation from panel // rl.ColorPicker right hue bar selector height // rl.ColorPicker right hue bar selector overflow //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- // ... //---------------------------------------------------------------------------------- // Module Functions Declaration //---------------------------------------------------------------------------------- // Global gui state control functions // Enable gui controls (global state) func Enable() { C.GuiEnable() } // GuiDisable - transpiled function from C4GO/tests/raylib/raygui.h:505 // Disable gui controls (global state) func Disable() { C.GuiDisable() } // GuiLock - transpiled function from C4GO/tests/raylib/raygui.h:506 // Lock gui controls (global state) func Lock() { C.GuiLock() } // GuiUnlock - transpiled function from C4GO/tests/raylib/raygui.h:507 // Unlock gui controls (global state) func Unlock() { C.GuiUnlock() } // GuiIsLocked - transpiled function from C4GO/tests/raylib/raygui.h:508 // Check if gui is locked (global state) func IsLocked() bool { return bool(C.GuiIsLocked()) } // GuiFade - transpiled function from C4GO/tests/raylib/raygui.h:509 // Set gui controls alpha (global state), alpha goes from 0.0f to 1.0f func Fade(alpha float32) { calpha := C.float(alpha) C.GuiFade(calpha) } // GuiSetState - transpiled function from C4GO/tests/raylib/raygui.h:510 // Set gui state (global state) func SetState(state int32) { cstate := C.int(state) C.GuiSetState(cstate) } // GuiGetState - transpiled function from C4GO/tests/raylib/raygui.h:511 // Get gui state (global state) func GetState() int32 { return int32(C.GuiGetState()) } // GuiSetStyle - transpiled function from C4GO/tests/raylib/raygui.h:518 func SetStyle(control int32, property int32, value int32) { ccontrol := C.int(control) cproperty := C.int(property) cvalue := C.int(value) C.GuiSetStyle(ccontrol, cproperty, cvalue) } // GuiGetStyle - transpiled function from C4GO/tests/raylib/raygui.h:519 // Get one style property func GetStyle(control int32, property int32) int32 { ccontrol := C.int(control) cproperty := C.int(property) return int32(C.GuiGetStyle(ccontrol, cproperty)) } // GuiWindowBox - transpiled function from C4GO/tests/raylib/raygui.h:522 // Container/separator controls, useful for controls organization // Window Box control, shows a window that can be closed func WindowBox(bounds rl.Rectangle, title string) bool { var cbounds C.struct_Rectangle cbounds.height = C.float(bounds.Height) 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)) return bool(C.GuiWindowBox(cbounds, ctitle)) } // GuiGroupBox - transpiled function from C4GO/tests/raylib/raygui.h:523 // Group Box control with text name func GroupBox(bounds rl.Rectangle, text string) { var cbounds C.struct_Rectangle cbounds.height = C.float(bounds.Height) 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)) C.GuiGroupBox(cbounds, ctext) } // GuiLine - transpiled function from C4GO/tests/raylib/raygui.h:524 // Line separator control, could contain text func Line(bounds rl.Rectangle, text string) { var cbounds C.struct_Rectangle cbounds.x = C.float(bounds.X) 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)) C.GuiLine(cbounds, ctext) } // GuiPanel - transpiled function from C4GO/tests/raylib/raygui.h:525 // Panel control, useful to group controls func Panel(bounds rl.Rectangle, text string) { var cbounds C.struct_Rectangle cbounds.width = C.float(bounds.Width) 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)) C.GuiPanel(cbounds, ctext) } // Scroll Panel control func ScrollPanel(bounds rl.Rectangle, text string, content rl.Rectangle, scroll *rl.Vector2) rl.Rectangle { var cbounds C.struct_Rectangle cbounds.x = C.float(bounds.X) 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 ccontent C.struct_Rectangle ccontent.x = C.float(content.X) ccontent.y = C.float(content.Y) ccontent.width = C.float(content.Width) ccontent.height = C.float(content.Height) var cscroll C.struct_Vector2 cscroll.x = C.float(scroll.X) cscroll.y = C.float(scroll.Y) defer func() { scroll.X = float32(cscroll.x) scroll.Y = float32(cscroll.y) }() var res C.struct_Rectangle res = C.GuiScrollPanel(cbounds, ctext, ccontent, &cscroll) var goRes rl.Rectangle goRes.X = float32(res.x) goRes.Y = float32(res.y) goRes.Width = float32(res.width) goRes.Height = float32(res.height) return goRes } // Scroll bar control (used by GuiScrollPanel()) func ScrollBar(bounds rl.Rectangle, value, minValue, maxValue int32) int32 { var cbounds C.struct_Rectangle cbounds.x = C.float(bounds.X) cbounds.y = C.float(bounds.Y) cbounds.width = C.float(bounds.Width) cbounds.height = C.float(bounds.Height) cvalue := C.int(value) cminValue := C.int(minValue) cmaxValue := C.int(maxValue) return int32(C.GuiScrollBar(cbounds, cvalue, cminValue, cmaxValue)) } // Label control, shows text func Label(bounds rl.Rectangle, text string) { var cbounds C.struct_Rectangle cbounds.x = C.float(bounds.X) 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)) C.GuiLabel(cbounds, ctext) } // GuiButton - transpiled function from C4GO/tests/raylib/raygui.h:531 // Button control, returns true when clicked func Button(bounds rl.Rectangle, text string) bool { var cbounds C.struct_Rectangle cbounds.x = C.float(bounds.X) 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)) return bool(C.GuiButton(cbounds, ctext)) } // GuiLabelButton - transpiled function from C4GO/tests/raylib/raygui.h:532 // Label button control, show true when clicked func LabelButton(bounds rl.Rectangle, text string) bool { var cbounds C.struct_Rectangle cbounds.x = C.float(bounds.X) 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)) return bool(C.GuiLabelButton(cbounds, ctext)) } // Toggle Button control, returns true when active func Toggle(bounds rl.Rectangle, text string, active bool) bool { var cbounds C.struct_Rectangle cbounds.x = C.float(bounds.X) 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)) cactive := C.bool(active) return bool(C.GuiToggle(cbounds, ctext, cactive)) } // GuiToggleGroup - transpiled function from C4GO/tests/raylib/raygui.h:534 // Toggle Group control, returns active toggle index func ToggleGroup(bounds rl.Rectangle, text string, active int32) int32 { var cbounds C.struct_Rectangle cbounds.x = C.float(bounds.X) 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)) cactive := C.int(active) return int32(C.GuiToggleGroup(cbounds, ctext, cactive)) } // Check Box control, returns true when active func CheckBox(bounds rl.Rectangle, text string, checked bool) bool { var cbounds C.struct_Rectangle cbounds.x = C.float(bounds.X) 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)) cchecked := C.bool(checked) return bool(C.GuiCheckBox(cbounds, ctext, cchecked)) } // GuiComboBox - transpiled function from C4GO/tests/raylib/raygui.h:536 // Combo Box control, returns selected item index func ComboBox(bounds rl.Rectangle, text string, active int32) int32 { var cbounds C.struct_Rectangle cbounds.x = C.float(bounds.X) 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)) cactive := C.int(active) return int32(C.GuiComboBox(cbounds, ctext, cactive)) } // GuiSlider - transpiled function from C4GO/tests/raylib/raygui.h:542 // Spinner control, returns selected value // Value Box control, updates input text with numbers // Text Box control, updates input text // Text Box control with multiple lines // Slider control, returns selected value // Spinner control, returns selected value func Spinner(bounds rl.Rectangle, text string, value *int32, minValue, maxValue int, editMode bool) bool { var cbounds C.struct_Rectangle cbounds.x = C.float(bounds.X) 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 cvalue C.int cvalue = C.int(*value) defer func() { *value = int32(cvalue) }() cminValue := C.int(minValue) cmaxValue := C.int(maxValue) ceditMode := C.bool(editMode) return bool(C.GuiSpinner(cbounds, ctext, &cvalue, cminValue, cmaxValue, ceditMode)) } func Slider(bounds rl.Rectangle, textLeft string, textRight string, value float32, minValue float32, maxValue float32) float32 { var cbounds C.struct_Rectangle cbounds.x = C.float(bounds.X) 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)) cvalue := C.float(value) cminValue := C.float(minValue) cmaxValue := C.float(maxValue) return float32(C.GuiSlider(cbounds, ctextLeft, ctextRight, cvalue, cminValue, cmaxValue)) } // GuiSliderBar - transpiled function from C4GO/tests/raylib/raygui.h:543 // Slider Bar control, returns selected value func SliderBar(bounds rl.Rectangle, textLeft string, textRight string, value float32, minValue float32, maxValue float32) float32 { var cbounds C.struct_Rectangle cbounds.width = C.float(bounds.Width) 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)) cvalue := C.float(value) cminValue := C.float(minValue) cmaxValue := C.float(maxValue) return float32(C.GuiSliderBar(cbounds, ctextLeft, ctextRight, cvalue, cminValue, cmaxValue)) } // GuiProgressBar - transpiled function from C4GO/tests/raylib/raygui.h:544 // Progress Bar control, shows current progress value func ProgressBar(bounds rl.Rectangle, textLeft string, textRight string, value float32, minValue float32, maxValue float32) float32 { var cbounds C.struct_Rectangle cbounds.width = C.float(bounds.Width) 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)) cvalue := C.float(value) cminValue := C.float(minValue) cmaxValue := C.float(maxValue) return float32(C.GuiProgressBar(cbounds, ctextLeft, ctextRight, cvalue, cminValue, cmaxValue)) } // GuiStatusBar - transpiled function from C4GO/tests/raylib/raygui.h:545 // Status Bar control, shows info text func StatusBar(bounds rl.Rectangle, text string) { var cbounds C.struct_Rectangle cbounds.x = C.float(bounds.X) 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)) C.GuiStatusBar(cbounds, ctext) } // GuiDummyRec - transpiled function from C4GO/tests/raylib/raygui.h:546 // Dummy control for placeholders func DummyRec(bounds rl.Rectangle, text string) { var cbounds C.struct_Rectangle cbounds.x = C.float(bounds.X) 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)) C.GuiDummyRec(cbounds, ctext) } // GuiGrid - transpiled function from C4GO/tests/raylib/raygui.h:547 // Grid control, returns mouse cell position func Grid(bounds rl.Rectangle, text string, spacing float32, subdivs int32) rl.Vector2 { var cbounds C.struct_Rectangle cbounds.y = C.float(bounds.Y) 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)) cspacing := C.float(spacing) csubdivs := C.int(subdivs) cResult := C.GuiGrid(cbounds, ctext, cspacing, csubdivs) var goRes rl.Vector2 goRes.Y = float32(cResult.y) goRes.X = float32(cResult.x) return goRes } // GuiMessageBox - transpiled function from C4GO/tests/raylib/raygui.h:552 // Advance controls set // List View control, returns selected list item index // List View control func ListView(bounds rl.Rectangle, text string, scrollIndex *int32, active int32) int32 { var cbounds C.struct_Rectangle cbounds.x = C.float(bounds.X) 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 cscrollIndex C.int cscrollIndex = C.int(*scrollIndex) defer func() { *scrollIndex = int32(cscrollIndex) }() cactive := C.int(active) return int32(C.GuiListView(cbounds, ctext, &cscrollIndex, cactive)) } // Message Box control, displays a message func MessageBox(bounds rl.Rectangle, title string, message string, buttons string) int32 { var cbounds C.struct_Rectangle cbounds.x = C.float(bounds.X) 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)) cbuttons := C.CString(buttons) defer C.free(unsafe.Pointer(cbuttons)) return int32(C.GuiMessageBox(cbounds, ctitle, cmessage, cbuttons)) } // GuiColorPicker - transpiled function from C4GO/tests/raylib/raygui.h:554 // rl.Color Picker control (multiple color controls) func ColorPicker(bounds rl.Rectangle, text string, color rl.Color) rl.Color { var cbounds C.struct_Rectangle cbounds.width = C.float(bounds.Width) 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 ccolor C.struct_Color ccolor.r = C.uchar(color.R) ccolor.g = C.uchar(color.G) ccolor.b = C.uchar(color.B) ccolor.a = C.uchar(color.A) cResult := C.GuiColorPicker(cbounds, ctext, ccolor) var goRes rl.Color goRes.A = byte(cResult.a) goRes.R = byte(cResult.r) goRes.G = byte(cResult.g) goRes.B = byte(cResult.b) return goRes } // GuiColorPanel - transpiled function from C4GO/tests/raylib/raygui.h:555 // Color Panel control func ColorPanel(bounds rl.Rectangle, text string, color rl.Color) rl.Color { var cbounds C.struct_Rectangle cbounds.x = C.float(bounds.X) 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 ccolor C.struct_Color ccolor.b = C.uchar(color.B) ccolor.a = C.uchar(color.A) ccolor.r = C.uchar(color.R) ccolor.g = C.uchar(color.G) cResult := C.GuiColorPanel(cbounds, ctext, ccolor) var goRes rl.Color goRes.A = byte(cResult.a) goRes.R = byte(cResult.r) goRes.G = byte(cResult.g) goRes.B = byte(cResult.b) return goRes } // GuiColorBarAlpha - transpiled function from C4GO/tests/raylib/raygui.h:556 // Color Bar Alpha control func ColorBarAlpha(bounds rl.Rectangle, text string, alpha float32) float32 { var cbounds C.struct_Rectangle cbounds.width = C.float(bounds.Width) 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)) calpha := C.float(alpha) return float32(C.GuiColorBarAlpha(cbounds, ctext, calpha)) } // GuiColorBarHue - transpiled function from C4GO/tests/raylib/raygui.h:557 // Color Bar Hue control func ColorBarHue(bounds rl.Rectangle, text string, value float32) float32 { var cbounds C.struct_Rectangle cbounds.x = C.float(bounds.X) 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)) cvalue := C.float(value) return float32(C.GuiColorBarHue(cbounds, ctext, cvalue)) } // Dropdown Box control // NOTE: Returns mouse click func DropdownBox(bounds rl.Rectangle, text string, active *int32, editMode bool) bool { var cbounds C.struct_Rectangle cbounds.x = C.float(bounds.X) 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 cactive C.int cactive = C.int(*active) defer func() { *active = int32(cactive) }() ceditMode := C.bool(editMode) return bool(C.GuiDropdownBox(cbounds, ctext, &cactive, ceditMode)) } // Value Box control, updates input text with numbers // NOTE: Requires static variables: frameCounter func ValueBox(bounds rl.Rectangle, text string, value *int32, minValue, maxValue int, editMode bool) bool { var cbounds C.struct_Rectangle cbounds.x = C.float(bounds.X) 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 cvalue C.int cvalue = C.int(*value) defer func() { *value = int32(cvalue) }() cminValue := C.int(minValue) cmaxValue := C.int(maxValue) ceditMode := C.bool(editMode) return bool(C.GuiValueBox(cbounds, ctext, &cvalue, cminValue, cmaxValue, ceditMode)) } // Text Box control, updates input text // NOTE 2: Returns if KEY_ENTER pressed (useful for data validation) func TextBox(bounds rl.Rectangle, text *string, textSize int, editMode bool) bool { var cbounds C.struct_Rectangle cbounds.x = C.float(bounds.X) cbounds.y = C.float(bounds.Y) cbounds.width = C.float(bounds.Width) cbounds.height = C.float(bounds.Height) bs := []byte(*text) if 0 < len(bs) && bs[len(bs)-1] != byte(0) { // minimalize allocation bs = append(bs, byte(0)) // for next input symbols } ctext := (*C.char)(unsafe.Pointer(&bs[0])) defer func() { *text = strings.TrimSpace(string(bs)) // no need : C.free(unsafe.Pointer(ctext)) }() ctextSize := C.int(textSize) ceditMode := C.bool(editMode) return bool(C.GuiTextBox(cbounds, ctext, ctextSize, ceditMode)) } // GuiLoadStyle - transpiled function from C4GO/tests/raylib/raygui.h:560 // Styles loading functions // Load style file over global style variable (.rgs) func LoadStyle(fileName string) { cfileName := C.CString(fileName) defer C.free(unsafe.Pointer(cfileName)) C.GuiLoadStyle(cfileName) } // TODO // GuiLoadStyleDefault - transpiled function from C4GO/tests/raylib/raygui.h:561 // Load style default over global style func LoadStyleDefault() { C.GuiLoadStyleDefault() } // GuiIconText - transpiled function from C4GO/tests/raylib/raygui.h:564 // Icons functionality // Get text with icon id prepended (if supported) func IconText(iconId int32, text string) string { ciconId := C.int(iconId) ctext := C.CString(text) defer C.free(unsafe.Pointer(ctext)) return C.GoString(C.GuiIconText(ciconId, ctext)) } // TODO // GuiGetIcons - transpiled function from C4GO/tests/raylib/raygui.h:567 // Get raygui icons data pointer // func GetIcons() []uint32 { // return C.GuiGetIcons() // } // Text Input Box control, ask for text func TextInputBox(bounds rl.Rectangle, title, message, buttons string, text *string, textMaxSize int32, secretViewActive *int32) int32 { var cbounds C.struct_Rectangle cbounds.x = C.float(bounds.X) 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)) cbuttons := C.CString(buttons) defer C.free(unsafe.Pointer(cbuttons)) bs := []byte(*text) if 0 < len(bs) && bs[len(bs)-1] != byte(0) { // minimalize allocation bs = append(bs, byte(0)) // for next input symbols } ctext := (*C.char)(unsafe.Pointer(&bs[0])) defer func() { *text = strings.TrimSpace(string(bs)) // no need : C.free(unsafe.Pointer(ctext)) }() ctextMaxSize := C.int(textMaxSize) var csecretViewActive C.int csecretViewActive = C.int(*secretViewActive) defer func() { *secretViewActive = int32(csecretViewActive) }() return int32(C.TextInputBox(cbounds, ctitle, cmessage, cbuttons, &ctext, textMaxSize, &csecretViewActive)) } // Text Box control with multiple lines func TextBoxMulti(bounds rl.Rectangle, text *string, textSize int32, editMode bool) bool { var cbounds C.struct_Rectangle cbounds.x = C.float(bounds.X) cbounds.y = C.float(bounds.Y) cbounds.width = C.float(bounds.Width) cbounds.height = C.float(bounds.Height) bs := []byte(*text) if 0 < len(bs) && bs[len(bs)-1] != byte(0) { // minimalize allocation bs = append(bs, byte(0)) // for next input symbols } ctext := (*C.char)(unsafe.Pointer(&bs[0])) defer func() { *text = strings.TrimSpace(string(bs)) // no need : C.free(unsafe.Pointer(ctext)) }() ctextSize := (C.int)(textSize) ceditMode := (C.bool)(editMode) return bool(C.GuiTextBoxMulti(cbounds, &ctext, ctextSize, ceditMode)) } // Check Box control, returns true when active func CheckBox(bounds rl.Rectangle, text string, checked bool) bool { var cbounds C.struct_Rectangle cbounds.x = C.float(bounds.X) 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)) cchecked := C.bool(checked) return bool(C.GuiCheckBox(cbounds, ctext, cchecked)) } // List View with extended parameters // Warning (*ast.FunctionDecl): {prefix: n:GuiListViewEx,t1:int (Rectangle, const char **, int, int *, int *, int),t2:}. C4GO/tests/raylib/raygui.h:551 :cannot transpileFunctionDecl. cannot bindingFunctionDecl func `GuiListViewEx`. cannot parse C type: `const char **` // Tab Bar control, returns TAB to be closed or -1 // Warning (*ast.FunctionDecl): {prefix: n:GuiTabBar,t1:int (Rectangle, const char **, int, int *),t2:}. C4GO/tests/raylib/raygui.h:526 :cannot transpileFunctionDecl. cannot bindingFunctionDecl func `GuiTabBar`. cannot parse C type: `const char **` // Warning (*ast.FunctionDecl): {prefix: n:SetAudioStreamCallback,t1:void (AudioStream, AudioCallback),t2:}. C4GO/tests/raylib/raylib.h:1567 :cannot transpileFunctionDecl. cannot bindingFunctionDecl func `SetAudioStreamCallback`. field type is pointer: `rAudioBuffer *` // Warning (*ast.FunctionDecl): {prefix: n:AttachAudioStreamProcessor,t1:void (AudioStream, AudioCallback),t2:}. C4GO/tests/raylib/raylib.h:1569 :cannot transpileFunctionDecl. cannot bindingFunctionDecl func `AttachAudioStreamProcessor`. field type is pointer: `rAudioBuffer *` // Warning (*ast.FunctionDecl): {prefix: n:DetachAudioStreamProcessor,t1:void (AudioStream, AudioCallback),t2:}. C4GO/tests/raylib/raylib.h:1570 :cannot transpileFunctionDecl. cannot bindingFunctionDecl func `DetachAudioStreamProcessor`. field type is pointer: `rAudioBuffer *` // Warning (*ast.FunctionDecl): {prefix: n:GuiSetFont,t1:void (Font),t2:}. C4GO/tests/raylib/raygui.h:514 :cannot transpileFunctionDecl. cannot bindingFunctionDecl func `GuiSetFont`. field type is pointer: `Rectangle *` // Warning (*ast.FunctionDecl): {prefix: n:GuiGetFont,t1:Font (void),t2:}. C4GO/tests/raylib/raygui.h:515 :cannot transpileFunctionDecl. cannot bindingFunctionDecl func `GuiGetFont`. field type is pointer: `Rectangle *`