/******************************************************************************************* * * raylib [text] example - text alignment * * Example complexity rating: [★☆☆☆] 1/4 * * Example originally created with raylib 5.0, last time updated with raylib 5.5 * * Example contributed by JP Mortiboys (@themushroompirates) and reviewed by Ramon Santamaria (@raysan5) * * 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) 2025 JP Mortiboys (@themushroompirates) * ********************************************************************************************/ #include "raylib.h" #include "raymath.h" // Required for: Lerp() typedef enum TextAlignment { TEXT_ALIGN_LEFT = 0, TEXT_ALIGN_TOP = 0, TEXT_ALIGN_CENTRE = 1, TEXT_ALIGN_MIDDLE = 1, TEXT_ALIGN_RIGHT = 2, TEXT_ALIGN_BOTTOM = 2 } TextAlignment; //------------------------------------------------------------------------------------ // Program main entry point //------------------------------------------------------------------------------------ int main(void) { // Initialization //-------------------------------------------------------------------------------------- const int screenWidth = 800; const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [text] example - text alignment"); // Define the rectangle we will draw the text in Rectangle textContainerRect = (Rectangle){ screenWidth/2-screenWidth/4, screenHeight/2-screenHeight/3, screenWidth/2, screenHeight*2/3 }; // Some text to display the current alignment const char *textAlignNameH[] = { "Left", "Centre", "Right" }; const char *textAlignNameV[] = { "Top", "Middle", "Bottom" }; // Define the text we're going to draw in the rectangle int wordIndex = 0; int wordCount = 0; char **words = TextSplit("raylib is a simple and easy-to-use library to enjoy videogames programming", ' ', &wordCount); // Initialize the font size we're going to use int fontSize = 40; // And of course the font... Font font = GetFontDefault(); // Intialize the alignment variables TextAlignment hAlign = TEXT_ALIGN_CENTRE; TextAlignment vAlign = TEXT_ALIGN_MIDDLE; 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 (IsKeyPressed(KEY_LEFT)) { hAlign = hAlign - 1; if (hAlign < 0) hAlign = 0; } if (IsKeyPressed(KEY_RIGHT)) { hAlign = hAlign + 1; if (hAlign > 2) hAlign = 2; } if (IsKeyPressed(KEY_UP)) { vAlign = vAlign - 1; if (vAlign < 0) vAlign = 0; } if (IsKeyPressed(KEY_DOWN)) { vAlign = vAlign + 1; if (vAlign > 2) vAlign = 2; } // One word per second wordIndex = (int)GetTime() % wordCount; //---------------------------------------------------------------------------------- // Draw //---------------------------------------------------------------------------------- BeginDrawing(); ClearBackground(DARKBLUE); DrawText("Use Arrow Keys to change the text alignment", 20, 20, 20, LIGHTGRAY); DrawText(TextFormat("Alignment: Horizontal = %s, Vertical = %s", textAlignNameH[hAlign], textAlignNameV[vAlign]), 20, 40, 20, LIGHTGRAY); DrawRectangleRec(textContainerRect, BLUE); // Get the size of the text to draw Vector2 textSize = MeasureTextEx(font, words[wordIndex], fontSize, fontSize*.1f); // Calculate the top-left text position based on the rectangle and alignment Vector2 textPos = (Vector2) { textContainerRect.x + Lerp(0.0f, textContainerRect.width - textSize.x, ((float)hAlign) * 0.5f), textContainerRect.y + Lerp(0.0f, textContainerRect.height - textSize.y, ((float)vAlign) * 0.5f) }; // Draw the text DrawTextEx(font, words[wordIndex], textPos, fontSize, fontSize*.1f, RAYWHITE); EndDrawing(); //---------------------------------------------------------------------------------- } // De-Initialization //-------------------------------------------------------------------------------------- CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- return 0; }