From cdda4c4182c9ee068567529715e4a5c68a8efb58 Mon Sep 17 00:00:00 2001 From: bonmas14 Date: Sat, 20 Sep 2025 22:28:15 +0300 Subject: Init commit v1.0 --- deps/raylib/examples/text/text_input_box.c | 132 +++++++++++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 deps/raylib/examples/text/text_input_box.c (limited to 'deps/raylib/examples/text/text_input_box.c') diff --git a/deps/raylib/examples/text/text_input_box.c b/deps/raylib/examples/text/text_input_box.c new file mode 100644 index 0000000..c530577 --- /dev/null +++ b/deps/raylib/examples/text/text_input_box.c @@ -0,0 +1,132 @@ +/******************************************************************************************* +* +* raylib [text] example - Input Box +* +* Example originally created with raylib 1.7, last time updated with raylib 3.5 +* +* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, +* BSD-like license that allows static linking with closed source software +* +* Copyright (c) 2017-2024 Ramon Santamaria (@raysan5) +* +********************************************************************************************/ + +#include "raylib.h" + +#define MAX_INPUT_CHARS 9 + +//------------------------------------------------------------------------------------ +// Program main entry point +//------------------------------------------------------------------------------------ +int main(void) +{ + // Initialization + //-------------------------------------------------------------------------------------- + const int screenWidth = 800; + const int screenHeight = 450; + + InitWindow(screenWidth, screenHeight, "raylib [text] example - input box"); + + char name[MAX_INPUT_CHARS + 1] = "\0"; // NOTE: One extra space required for null terminator char '\0' + int letterCount = 0; + + Rectangle textBox = { screenWidth/2.0f - 100, 180, 225, 50 }; + bool mouseOnText = false; + + int framesCounter = 0; + + SetTargetFPS(60); // Set our game to run at 60 frames-per-second + //-------------------------------------------------------------------------------------- + + // Main game loop + while (!WindowShouldClose()) // Detect window close button or ESC key + { + // Update + //---------------------------------------------------------------------------------- + if (CheckCollisionPointRec(GetMousePosition(), textBox)) mouseOnText = true; + else mouseOnText = false; + + if (mouseOnText) + { + // Set the window's cursor to the I-Beam + SetMouseCursor(MOUSE_CURSOR_IBEAM); + + // Get char pressed (unicode character) on the queue + int key = GetCharPressed(); + + // Check if more characters have been pressed on the same frame + while (key > 0) + { + // NOTE: Only allow keys in range [32..125] + if ((key >= 32) && (key <= 125) && (letterCount < MAX_INPUT_CHARS)) + { + name[letterCount] = (char)key; + name[letterCount+1] = '\0'; // Add null terminator at the end of the string. + letterCount++; + } + + key = GetCharPressed(); // Check next character in the queue + } + + if (IsKeyPressed(KEY_BACKSPACE)) + { + letterCount--; + if (letterCount < 0) letterCount = 0; + name[letterCount] = '\0'; + } + } + else SetMouseCursor(MOUSE_CURSOR_DEFAULT); + + if (mouseOnText) framesCounter++; + else framesCounter = 0; + //---------------------------------------------------------------------------------- + + // Draw + //---------------------------------------------------------------------------------- + BeginDrawing(); + + ClearBackground(RAYWHITE); + + DrawText("PLACE MOUSE OVER INPUT BOX!", 240, 140, 20, GRAY); + + DrawRectangleRec(textBox, LIGHTGRAY); + if (mouseOnText) DrawRectangleLines((int)textBox.x, (int)textBox.y, (int)textBox.width, (int)textBox.height, RED); + else DrawRectangleLines((int)textBox.x, (int)textBox.y, (int)textBox.width, (int)textBox.height, DARKGRAY); + + DrawText(name, (int)textBox.x + 5, (int)textBox.y + 8, 40, MAROON); + + DrawText(TextFormat("INPUT CHARS: %i/%i", letterCount, MAX_INPUT_CHARS), 315, 250, 20, DARKGRAY); + + if (mouseOnText) + { + if (letterCount < MAX_INPUT_CHARS) + { + // Draw blinking underscore char + if (((framesCounter/20)%2) == 0) DrawText("_", (int)textBox.x + 8 + MeasureText(name, 40), (int)textBox.y + 12, 40, MAROON); + } + else DrawText("Press BACKSPACE to delete chars...", 230, 300, 20, GRAY); + } + + EndDrawing(); + //---------------------------------------------------------------------------------- + } + + // De-Initialization + //-------------------------------------------------------------------------------------- + CloseWindow(); // Close window and OpenGL context + //-------------------------------------------------------------------------------------- + + return 0; +} + +// Check if any key is pressed +// NOTE: We limit keys check to keys between 32 (KEY_SPACE) and 126 +bool IsAnyKeyPressed() +{ + bool keyPressed = false; + int key = GetKeyPressed(); + + if ((key >= 32) && (key <= 126)) keyPressed = true; + + return keyPressed; +} -- cgit v1.2.3-70-g09d2