|  | @ -0,0 +1,208 @@ | 
														
													
														
															
																|  |  |  |  |  | /******************************************************************************************* | 
														
													
														
															
																|  |  |  |  |  | * | 
														
													
														
															
																|  |  |  |  |  | *   raylib [core] example - clipboard text | 
														
													
														
															
																|  |  |  |  |  | * | 
														
													
														
															
																|  |  |  |  |  | *   Example complexity rating: [★☆☆☆] 1/4 | 
														
													
														
															
																|  |  |  |  |  | * | 
														
													
														
															
																|  |  |  |  |  | *   Example originally created with raylib 5.6-dev | 
														
													
														
															
																|  |  |  |  |  | * | 
														
													
														
															
																|  |  |  |  |  | *   Example contributed by Robin (@RobinsAviary) 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-2025 Robin (@RobinsAviary) | 
														
													
														
															
																|  |  |  |  |  | * | 
														
													
														
															
																|  |  |  |  |  | ********************************************************************************************/ | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | #include "raylib.h" | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | #include <stdio.h> | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | //------------------------------------------------------------------------------------ | 
														
													
														
															
																|  |  |  |  |  | // Program main entry point | 
														
													
														
															
																|  |  |  |  |  | //------------------------------------------------------------------------------------ | 
														
													
														
															
																|  |  |  |  |  | int main(void) | 
														
													
														
															
																|  |  |  |  |  | { | 
														
													
														
															
																|  |  |  |  |  | // Initialization | 
														
													
														
															
																|  |  |  |  |  | //-------------------------------------------------------------------------------------- | 
														
													
														
															
																|  |  |  |  |  | const int screenWidth = 800; | 
														
													
														
															
																|  |  |  |  |  | const int screenHeight = 450; | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | InitWindow(screenWidth, screenHeight, "raylib [core] example - clipboard text"); | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | const char* clipboardText = NULL; | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | // List of text the user can switch through and copy | 
														
													
														
															
																|  |  |  |  |  | const char* copyableText[] = {"raylib is fun", "hello, clipboard!", "potato chips"}; | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | unsigned int textIndex = 0; | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | const char* popupText = NULL; | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | // Initialize timers | 
														
													
														
															
																|  |  |  |  |  | // The amount of time the pop-up text is on screen, before fading | 
														
													
														
															
																|  |  |  |  |  | const float maxTime = 3.0f; | 
														
													
														
															
																|  |  |  |  |  | float textTimer = 0.0f; | 
														
													
														
															
																|  |  |  |  |  | // The length of time text is offset | 
														
													
														
															
																|  |  |  |  |  | const float animMaxTime = 0.1f; | 
														
													
														
															
																|  |  |  |  |  | float pasteAnim = 0.0f; | 
														
													
														
															
																|  |  |  |  |  | float copyAnim = 0.0f; | 
														
													
														
															
																|  |  |  |  |  | int copyAnimMult = 1; | 
														
													
														
															
																|  |  |  |  |  | float textAnim = 0.0f; | 
														
													
														
															
																|  |  |  |  |  | float textAlpha = 0.0f; | 
														
													
														
															
																|  |  |  |  |  | // Offset amount for animations | 
														
													
														
															
																|  |  |  |  |  | const int offsetAmount = -4; | 
														
													
														
															
																|  |  |  |  |  | //-------------------------------------------------------------------------------------- | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | // Main game loop | 
														
													
														
															
																|  |  |  |  |  | while (!WindowShouldClose())    // Detect window close button or ESC key | 
														
													
														
															
																|  |  |  |  |  | { | 
														
													
														
															
																|  |  |  |  |  | // Update | 
														
													
														
															
																|  |  |  |  |  | //---------------------------------------------------------------------------------- | 
														
													
														
															
																|  |  |  |  |  | // Check if the user has pressed the copy/paste key combinations | 
														
													
														
															
																|  |  |  |  |  | bool pastePressed = (IsKeyDown(KEY_LEFT_CONTROL) && IsKeyPressed(KEY_V)); | 
														
													
														
															
																|  |  |  |  |  | bool copyPressed = (IsKeyDown(KEY_LEFT_CONTROL) && IsKeyPressed(KEY_C)); | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | // Update animation timers | 
														
													
														
															
																|  |  |  |  |  | if (textTimer > 0) textTimer -= GetFrameTime(); | 
														
													
														
															
																|  |  |  |  |  | if (pasteAnim > 0) pasteAnim -= GetFrameTime(); | 
														
													
														
															
																|  |  |  |  |  | if (copyAnim > 0) copyAnim -= GetFrameTime(); | 
														
													
														
															
																|  |  |  |  |  | if (textAnim > 0) textAnim -= GetFrameTime(); | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | // React to the user pressing paste | 
														
													
														
															
																|  |  |  |  |  | if (pastePressed) | 
														
													
														
															
																|  |  |  |  |  | { | 
														
													
														
															
																|  |  |  |  |  | // Most operating systems hide this information until the user presses Ctrl-V on the window. | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | // Check to see if the clipboard contains an image | 
														
													
														
															
																|  |  |  |  |  | // This function does nothing outside of Windows, as it directly calls the Windows API | 
														
													
														
															
																|  |  |  |  |  | Image image = GetClipboardImage(); | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | if (IsImageValid(image)) | 
														
													
														
															
																|  |  |  |  |  | { | 
														
													
														
															
																|  |  |  |  |  | // Unload the image | 
														
													
														
															
																|  |  |  |  |  | UnloadImage(image); | 
														
													
														
															
																|  |  |  |  |  | // Update visuals | 
														
													
														
															
																|  |  |  |  |  | popupText = "clipboard contains image"; | 
														
													
														
															
																|  |  |  |  |  | } | 
														
													
														
															
																|  |  |  |  |  | else | 
														
													
														
															
																|  |  |  |  |  | { | 
														
													
														
															
																|  |  |  |  |  | // Get text from the user's clipboard | 
														
													
														
															
																|  |  |  |  |  | clipboardText = GetClipboardText(); | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | // Update visuals | 
														
													
														
															
																|  |  |  |  |  | popupText = "text pasted"; | 
														
													
														
															
																|  |  |  |  |  | pasteAnim = animMaxTime; | 
														
													
														
															
																|  |  |  |  |  | } | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | // Reset animation values | 
														
													
														
															
																|  |  |  |  |  | textTimer = maxTime; | 
														
													
														
															
																|  |  |  |  |  | textAnim = animMaxTime; | 
														
													
														
															
																|  |  |  |  |  | textAlpha = 1; | 
														
													
														
															
																|  |  |  |  |  | } | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | // React to the user pressing copy | 
														
													
														
															
																|  |  |  |  |  | if (copyPressed) | 
														
													
														
															
																|  |  |  |  |  | { | 
														
													
														
															
																|  |  |  |  |  | // Set the text on the user's clipboard | 
														
													
														
															
																|  |  |  |  |  | SetClipboardText(copyableText[textIndex]); | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | // Reset values | 
														
													
														
															
																|  |  |  |  |  | textTimer = maxTime; | 
														
													
														
															
																|  |  |  |  |  | textAnim = animMaxTime; | 
														
													
														
															
																|  |  |  |  |  | copyAnim = animMaxTime; | 
														
													
														
															
																|  |  |  |  |  | copyAnimMult = 1; | 
														
													
														
															
																|  |  |  |  |  | textAlpha = 1; | 
														
													
														
															
																|  |  |  |  |  | // Update the text that pops up at the bottom of the screen | 
														
													
														
															
																|  |  |  |  |  | popupText = "text copied"; | 
														
													
														
															
																|  |  |  |  |  | } | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | // Switch to the next item in the list when the user presses up | 
														
													
														
															
																|  |  |  |  |  | if (IsKeyPressed(KEY_UP)) | 
														
													
														
															
																|  |  |  |  |  | { | 
														
													
														
															
																|  |  |  |  |  | // Reset animation | 
														
													
														
															
																|  |  |  |  |  | copyAnim = animMaxTime; | 
														
													
														
															
																|  |  |  |  |  | copyAnimMult = 1; | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | textIndex += 1; | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | if (textIndex >= sizeof(copyableText) / sizeof(const char*)) // Length of array | 
														
													
														
															
																|  |  |  |  |  | { | 
														
													
														
															
																|  |  |  |  |  | // Loop back to the other end | 
														
													
														
															
																|  |  |  |  |  | textIndex = 0; | 
														
													
														
															
																|  |  |  |  |  | } | 
														
													
														
															
																|  |  |  |  |  | } | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | // Switch to the previous item in the list when the user presses down | 
														
													
														
															
																|  |  |  |  |  | if (IsKeyPressed(KEY_DOWN)) | 
														
													
														
															
																|  |  |  |  |  | { | 
														
													
														
															
																|  |  |  |  |  | // Reset animation | 
														
													
														
															
																|  |  |  |  |  | copyAnim = animMaxTime; | 
														
													
														
															
																|  |  |  |  |  | copyAnimMult = -1; | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | if (textIndex == 0) | 
														
													
														
															
																|  |  |  |  |  | { | 
														
													
														
															
																|  |  |  |  |  | // Loop back to the other end | 
														
													
														
															
																|  |  |  |  |  | textIndex = (sizeof(copyableText) / sizeof(const char*)) - 1; // Length of array minus one | 
														
													
														
															
																|  |  |  |  |  | } | 
														
													
														
															
																|  |  |  |  |  | else | 
														
													
														
															
																|  |  |  |  |  | { | 
														
													
														
															
																|  |  |  |  |  | textIndex -= 1; | 
														
													
														
															
																|  |  |  |  |  | } | 
														
													
														
															
																|  |  |  |  |  | } | 
														
													
														
															
																|  |  |  |  |  | //---------------------------------------------------------------------------------- | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | // Draw | 
														
													
														
															
																|  |  |  |  |  | //---------------------------------------------------------------------------------- | 
														
													
														
															
																|  |  |  |  |  | BeginDrawing(); | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | ClearBackground(RAYWHITE); | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | // Draw the user's pasted text, if there is any yet | 
														
													
														
															
																|  |  |  |  |  | if (clipboardText) | 
														
													
														
															
																|  |  |  |  |  | { | 
														
													
														
															
																|  |  |  |  |  | // Offset animation | 
														
													
														
															
																|  |  |  |  |  | int offset = 0; | 
														
													
														
															
																|  |  |  |  |  | if (pasteAnim > 0) offset = offsetAmount; | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | // Draw the pasted text | 
														
													
														
															
																|  |  |  |  |  | DrawText("pasted clipboard:", 10, 10 + offset, 20, DARKGREEN); | 
														
													
														
															
																|  |  |  |  |  | DrawText(clipboardText, 10, 30 + offset, 20, DARKGRAY); | 
														
													
														
															
																|  |  |  |  |  | } | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | // Offset animation | 
														
													
														
															
																|  |  |  |  |  | int textOffset = 0; | 
														
													
														
															
																|  |  |  |  |  | if (copyAnim > 0) textOffset = offsetAmount; | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | // Draw copyable text and controls | 
														
													
														
															
																|  |  |  |  |  | DrawText(copyableText[textIndex], 10, 330 + (textOffset * copyAnimMult), 20, MAROON); | 
														
													
														
															
																|  |  |  |  |  | DrawText("up/down to change string, ctrl-c to copy, ctrl-v to paste", 10, 355, 20, DARKGRAY); | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | // Alpha / Offset animation | 
														
													
														
															
																|  |  |  |  |  | if (textAlpha > 0) | 
														
													
														
															
																|  |  |  |  |  | { | 
														
													
														
															
																|  |  |  |  |  | // Offset animation | 
														
													
														
															
																|  |  |  |  |  | int offset = 0; | 
														
													
														
															
																|  |  |  |  |  | if (textAnim > 0) offset = offsetAmount; | 
														
													
														
															
																|  |  |  |  |  | // Draw pop up text | 
														
													
														
															
																|  |  |  |  |  | DrawText(popupText, 10, 425 + offset, 20, ColorAlpha(DARKGREEN, textAlpha)); | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | // Fade-out animation | 
														
													
														
															
																|  |  |  |  |  | if (textTimer < 0) | 
														
													
														
															
																|  |  |  |  |  | { | 
														
													
														
															
																|  |  |  |  |  | textAlpha -= GetFrameTime(); | 
														
													
														
															
																|  |  |  |  |  | } | 
														
													
														
															
																|  |  |  |  |  | } | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | EndDrawing(); | 
														
													
														
															
																|  |  |  |  |  | //---------------------------------------------------------------------------------- | 
														
													
														
															
																|  |  |  |  |  | } | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | // De-Initialization | 
														
													
														
															
																|  |  |  |  |  | //-------------------------------------------------------------------------------------- | 
														
													
														
															
																|  |  |  |  |  | CloseWindow();        // Close window and OpenGL context | 
														
													
														
															
																|  |  |  |  |  | //-------------------------------------------------------------------------------------- | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | return 0; | 
														
													
														
															
																|  |  |  |  |  | } |