raygui icon indicating copy to clipboard operation
raygui copied to clipboard

Using multiple `GuiTextInputBox`es is buggy

Open Anut-py opened this issue 1 year ago • 1 comments

Compile and run the following code

#include <raylib.h>

#define RAYGUI_IMPLEMENTATION
#include <raygui.h>
#undef RAYGUI_IMPLEMENTATION

int main(void) {
    InitWindow(800, 500, "test");
    SetTargetFPS(60);
    GuiEnable();
    GuiUnlock();

    Rectangle bounds = { 10, 40, 400, 150 };
    Rectangle bounds1 = { 10, 200, 400, 150 };

    char *buffer = calloc(1024, sizeof(char));
    strcpy(buffer, "Hello world");

    char *buffer1 = calloc(1024, sizeof(char));
    strcpy(buffer1, "password");

    bool secret = true;

    while (!WindowShouldClose()) {
        BeginDrawing();
        ClearBackground(RAYWHITE);
        
        GuiTextInputBox(bounds, 0, "Hello", "A;B;C;D", buffer, 1024, 0);
        GuiTextInputBox(bounds1, 0, "Password", "E;F;G;H", buffer1, 1024, &secret);

        EndDrawing();
    }

    CloseWindow();
}

Editing one text box affects the other and sometimes they don't edit at all.

Anut-py avatar Jan 28 '24 03:01 Anut-py

@Anut-py Yes, it is. This control was designed to have only one of it on the screen, actually it was a simple replace for native desktop dialogs for systems not supporting them (i.e. embedded devices running raylib in headless mode).

Here it is an usage sample:

// GUI: Save File Dialog (and saving logic)
//----------------------------------------------------------------------------------------
if (showSaveFileDialog)
{
#if defined(CUSTOM_MODAL_DIALOGS)
    //int result = GuiFileDialog(DIALOG_TEXTINPUT, "Save raygui icons file...", outFileName, "Ok;Cancel", NULL);
    int result = GuiTextInputBox((Rectangle){ screenWidth/2 - 280/2, screenHeight/2 - 112/2 - 30, 280, 112 }, "#2#Save rtool config file...", NULL, "#2#Save", outFileName, 512, NULL);
#else
    int result = GuiFileDialog(DIALOG_SAVE_FILE, "Save rtool config file...", outFileName, "*.rtool", "rTool Config (*.rtool)");
#endif
    if (result == 1)
    {
        // Check for valid extension and make sure it is
        if ((GetFileExtension(outFileName) == NULL) || !IsFileExtension(outFileName, ".rtool")) strcat(outFileName, ".rtool\0");

        SaveToolConfig(rtool, outFileName);   // Save rtool config file
    }

    if (result >= 0) showSaveFileDialog = false;
}
//----------------------------------------------------------------------------------------

It should probably be redesigned/improved.

raysan5 avatar Jan 28 '24 12:01 raysan5

I'm closing this issue "as design" for now. The control was actually designed to only allow one of them on screen at a time.

raysan5 avatar May 07 '24 08:05 raysan5